Я хотел бы создать шейп-файл из фрейма данных Pandas, используя строки lon & lat.
У меня есть файл CSV, и я обрабатываю его с помощью панд, чтобы сделать кадр данных, который легче обрабатывать
Возможно ли сделать это без создания цикла строка за строкой?
Ответы:
Немного поздно, но, возможно, также полезно для других. Да, это можно сделать с помощью
shapely
иgeopandas
.Предполагается, что ваш фрейм данных выглядит так:
Во-первых, убедитесь, что
geopandas
иshapely
установлены правильно, что иногда непросто, потому что они имеют некоторые зависимости (например, GEOS и GDAL). Если сначала не получается, попробуйтеpip install geopandas shapely
выполнить поиск через Google или StackOverflow / Gis.Stackexchange, потому что, скорее всего, найдется ответ, который решит эту проблему за вас.Затем, это просто вопрос создания нового столбца геометрии в вашем фрейме данных, который объединяет значения lat и lon в
shapely Point()
объект. Обратите внимание, чтоPoint()
конструктор ожидает кортеж значений с плавающей запятой, поэтому преобразование должно быть включено, если dtypes столбца элемента данных еще не установлены вfloat
.Теперь преобразуйте DataFrame для панд в
GeoDataFrame
. Конструктор Geopandas ожидает геометрический столбец, который может состоять из объектов геометрической формы, поэтому созданный нами столбец просто отлично:Чтобы выгрузить этот GeoDataFrame в шейп-файл, используйте
to_file()
метод геопандаса (другие драйверы, поддерживаемые Fiona, например, такжеGeoJSON
должны работать):Вот как выглядит получившийся шейп-файл при визуализации с помощью QGIS :
источник
Для ArcMap вам нужно определить Projection перед экспортом в Shapefile.
источник
df.crs= "+init=epsg:27700"
для проецирования моего шейп-файла в соответствии с Британской национальной сеткой. Однако, когда я открываю его в ArcGIS, система координат неизвестна. Что я делаю неправильно?