Gostaria de converter alguns arquivos shp baseados em polígono que possuem vários recursos de polígono em pontos para cada recurso que representariam essencialmente o centríodo de cada recurso de polígono. Eu sei que no mundo ArcGIS eu poderia usar a ferramenta Feature To Point, mas gostaria de manter isso em um script que possa ser executado em PCs que não possuam arcpy, então estou procurando uma alternativa de código aberto. Alguém está ciente de uma biblioteca que eu poderia usar para isso, juntamente com alguma orientação sobre como alavancá-lo para fazer isso?
9
Respostas:
Você pode executar um
ogr2ogr
comando (por exemplo, a partir de um OSGeo4w Shell). Por exemplo, em um shapefile de países:O novo shapefile
countries_centroid.shp
deve ser semelhante à entrada, mas conter apenas um ponto por [Multi] Polígono.O @PEL também mostra um bom exemplo com ST_PointOnSurface, que é simples de substituir neste comando.
Algo semelhante pode ser feito em Python, se necessário, mas pode levar algumas linhas de código a mais:
fonte
gdal-bin
incluir esse suporte.Simplesmente use Fiona ou GeoPandas (Python 2.7.xe 3.x)
Alguns polígonos
Transformação em pontos (centróides)
Resultado
fonte
Outra maneira, talvez mais "de baixo nível", seria usar diretamente
fiona
eshapely
para processamento de E / S e geometria.fonte
Eu acho que a maneira mais fácil é usar o formato virtual gdal / ogr. ( http://www.gdal.org/drv_vrt.html ) e dialeto SQL / SQLITE ( http://www.gdal.org/ogr_sql.html e https://www.gaia-gis.it/spatialite-3.0 .0-BETA / spatialite-sql-3.0.0.html )
Meu shapefile de polígono é nomeado poly.shp. Então eu crio esse XML como um arquivo chamado vrt.vrt. Dentro deste arquivo (vrt.vrt), aqui o conteúdo a ser convertido em pontos
No momento, você pode integrar esse arquivo ao Qgis para validar. Com certeza, a renderização é mais lenta que a fonte bruta, pois cada recurso é convertido como ponto em cada consulta de renderização.
Depois, converta esse arquivo (vrt.vrt) em outra coisa usando os utilitários gdal / ogr de um shell / script python
Você obtém um shapefile de ponto chamado point_from_vrt.shp.
fonte
'wkbPoints' is not a valid value of the atomic type