Me gustaría construir un shapefile a partir de un Marco de Datos Pandas usando las filas lon y lat.
Tengo un archivo csv y lo proceso con pandas para crear un marco de datos que sea más fácil de manejar
¿Es posible hacer eso sin hacer un bucle línea por línea?
Respuestas:
Un poco tarde pero quizás también útil para otros. Sí, eso se puede hacer con
shapely
ygeopandas
.Supongamos que su marco de datos de pandas se ve así:
En primer lugar, asegúrese de que
geopandas
yshapely
se ha instalado correctamente, que a veces no es fácil, ya que vienen con algunas dependencias (por ejemplo, GEOS y GDAL). Si no funciona en el primer intentopip install geopandas shapely
, busque el error en Google o StackOverflow / Gis.Stackexchange porque lo más probable es que haya una respuesta disponible para resolver ese problema.Entonces, solo es cuestión de crear una nueva columna de geometría en su marco de datos que combine los valores lat y lon en un
shapely Point()
objeto. Tenga en cuenta que elPoint()
constructor espera una tupla de valores flotantes, por lo que la conversión debe incluirse si los tipos de columna del marco de datos todavía no están establecidosfloat
.Ahora, convierta el DataFrame de pandas en a
GeoDataFrame
. El constructor de geopandas espera una columna de geometría que puede consistir en objetos de geometría bien formados, por lo que la columna que creamos está bien:Para volcar este GeoDataFrame en un shapefile, use el
to_file()
método de geopandas (otros controladores compatibles con Fiona comoGeoJSON
también deberían funcionar):Y así es como se ve el archivo shape resultante cuando se visualiza con QGIS :
fuente
Para ArcMap, debe definir la Proyección antes de exportar a Shapefile.
fuente
df.crs= "+init=epsg:27700"
para proyectar mi shapefile de acuerdo con la British National Grid. Sin embargo, cuando lo abro en ArcGIS, el sistema de coordenadas es desconocido. ¿Qué estoy haciendo mal?