Gostaria de construir um shapefile a partir de um Pandas Data Frame usando as linhas long e lat.
Eu tenho um arquivo csv e o processo com pandas para criar um quadro de dados mais fácil de manusear
É possível fazer isso sem fazer um loop linha por linha?
Respostas:
Um pouco tarde, mas talvez também seja útil para os outros. Sim, isso pode ser feito com
shapely
egeopandas
.Suponhamos que seu dataframe do pandas se pareça com o seguinte:
Primeiro, certifique-se
geopandas
eshapely
estão instalados corretamente o que por vezes não é fácil, porque eles vêm com algumas dependências (por exemplo GEOS e GDAL). Se não funcionar na primeira tentativapip install geopandas shapely
, procure o erro no Google ou no StackOverflow / Gis.Stackexchange, porque provavelmente haverá uma resposta disponível para solucionar esse problema.Então, é apenas uma questão de criar uma nova coluna geométrica no seu quadro de dados que combine os valores lat e lon em um
shapely Point()
objeto. Observe que oPoint()
construtor espera uma tupla de valores flutuantes; portanto, a conversão deve ser incluída se os tipos de coluna da estrutura de dados ainda não estiverem configuradosfloat
.Agora, converta o DataFrame do panda em um
GeoDataFrame
. O construtor geopandas espera uma coluna de geometria que possa consistir em objetos de geometria bem torneados; portanto, a coluna que criamos é ótima:Para despejar esse GeoDataFrame em um shapefile, use o
to_file()
método das geopandas (outros drivers suportados pela Fiona , comoGeoJSON
também devem funcionar):E é assim que o shapefile resultante se parece quando visualizado com QGIS :
fonte
Para o ArcMap, você precisa definir a Projeção antes de exportar para o Shapefile.
fonte
df.crs= "+init=epsg:27700"
para projetar meu shapefile de acordo com o British National Grid. No entanto, quando eu o abro no ArcGIS, o sistema de coordenadas é desconhecido. O que estou fazendo de errado?