сделать geo pandas dataframe из точек, затем спроецировать gpd, получил ошибку: не удается преобразовать наивные геометрии. Пожалуйста, сначала установите crs на объекте - PullRequest
2 голосов
/ 06 апреля 2020

Я преобразовал набор данных с широтой / долготой в гео pandas фрейм данных (назовем его gpd). У gpd нет CRS, я пытался спроецировать этот gpd на «EPSG: 3857», используя:

gpd = gpd.to_crs («EPSG: 3857»)

Я получил сообщение о том, что «Невозможно преобразовать наивные геометрии. Сначала установите CRS для объекта». Означает ли это, что для любого gpd без CRS я должен сначала назначить ему CRS, а затем перепроектировать его в CRS, который меня интересует, например, с 4326 до 3857:

gpd.crs = "EPSG: 4326"

gpd = gpd.to_crs ("EPSG: 3857")

Мои заблуждения - это различия между CRS и проекцией, и почему я не могу использовать 3857 прямо в этом случае. Кроме того, проект pyproj упомянул, что произошли некоторые изменения в перепроектировании геоданных , и дал предложения о том, как проецировать геоданные, я не совсем понимаю детали, кто-то может дать некоторые советы о том, как проектировать / перепроектировать геоданные соответственно с учетом изменений, которые они сделали? Спасибо.

1 Ответ

1 голос
/ 06 апреля 2020

Вам нужно определить crs, прежде чем вы сможете его спроецировать. Это часто случается, если ваш файл .shp не имеет сопровождающего файла .prj.

import geopandas as gpd
gdf = gpd.read_file('GSHHS_c_L1.shp')
print(gdf.crs)
None

#this is how we define the projection
gdf.crs = "EPSG:4326"
print(gdf.crs)
EPSG:4326

#In Jupyter if you don't use a print statement, but shift+enter, you'll get this for your crs

<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

После того, как вы определили свои crs, вы можете проецировать их.

#this is how we project the data
gdf = gdf.to_crs("EPSG:3857")
# this will display crs information in jupyter
gdf.crs

<Projected CRS: EPSG:3857>
Name: WGS 84 / Pseudo-Mercator
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: World - 85°S to 85°N
- bounds: (-180.0, -85.06, 180.0, 85.06)
Coordinate Operation:
- name: Popular Visualisation Pseudo-Mercator
- method: Popular Visualisation Pseudo Mercator
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
...