ogr2ogr
コマンドを実行できます(たとえば、OSGeo4wシェルから)。たとえば、国のシェープファイル:
cd path/to/shapefiles
ogr2ogr -sql "SELECT ST_Centroid(geometry), * FROM countries" -dialect sqlite countries_centroid.shp countries.shp
新しいシェープファイルcountries_centroid.shp
は入力に似ているはずですが、[Multi] Polygonごとに1つのポイントしか含まれていません。
@PELは、ST_PointOnSurfaceの良い例も示しています。これは、このコマンドで簡単に置き換えることができます。
必要に応じて、Pythonでも同様のことができますが、数行のコードがさらに必要になる場合があります。
import os
from osgeo import ogr
ogr.UseExceptions()
os.chdir('path/to/shapefiles')
ds = ogr.Open('countries.shp')
ly = ds.ExecuteSQL('SELECT ST_Centroid(geometry), * FROM countries', dialect='sqlite')
drv = ogr.GetDriverByName('Esri shapefile')
ds2 = drv.CreateDataSource('countries_centroid.shp')
ds2.CopyLayer(ly, '')
ly = ds = ds2 = None # save, close