>>> from env_helper import info; info()
页面更新时间: 2024-03-04 14:19:47
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

11.3. 管理投影

11.3.1. 坐标参考系统

CRS非常重要,其意义在于GeoSeries或GeoDataFrame对象中的几何形状是任意空间中的坐标集合。 CRS可以使Python的坐标与地球上的具体实物点相关联。

使用proj4字符串代码的方法引用CRS。你可以从 https://www.spatialreference.orghttps://remote-sensing.org/ 找到最常用的代码。

例如,最常用的CRS之一是WGS84纬度 - 经度投影。 这个投影的proj4表示通常可以用多种不同的方式引用相同CRS:

"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

通用的投影可以通过EPSG代码来引用,因此这个通用的投影也可以使用proj4字符串调用

"+init=epsg:4326".

geopandas包含有CRS的表示方法,包括proj4字符串本身

("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

或在字典中分解的参数:

{'proj': 'latlong', 'ellps': 'WGS84', 'datum': 'WGS84', 'no_defs': True}

此外,也可直接采用EPSG代码完成一些功能。

以下为参考值,是一些非常常见的投影和它们的proj4字符串:

  • WGS84纬度/经度:“+ proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs”或“+ init = epsg:4326”

  • UTM区域(北):“+ proj = utm + zone = 33 + ellps = WGS84 + datum = WGS84 + units = m + no_defs”

  • UTM Zones(南):“+ proj = utm + zone = 33 + ellps = WGS84 + datum = WGS84 + units = m + no_defs + south”

11.3.2. 设置投影

投影有两个操作方法:设置投影和重新投影。

当地理坐标有坐标数据(x-y值),但没有关于这些坐标如何指向实际位置的信息时,需要设置投影。 如果没有设置CRS,地理信息的几何操作虽可以工作,但不会变换坐标,导出的文件也可能无法被其他软件正常理解。

注意,大多数情况你不需要设置投影。使用 from_file() 命令加载的数据会始终包括投影信息。 您可以通过crs属性来查看当前CRS对象: my_geoseries.crs

然而,您可能会获得不包含投影的数据。在这种情况下,您必须设置CRS,以便地理数据库作出解释坐标的合理操作。

例如,将纬度和经度的电子表格手动转换为GeoSeries,可以通过WGS84纬度 - 经度CRS分配给 crs 属性的方法来设置投影:

my_geoseries.crs = {'init' :'epsg:4326'}

首先加载数据:

>>> import geopandas as gpd
>>> world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
>>>
>>> # Check original projection
>>> # (it's Platte Carre! x-y are long and lat)
>>> world.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 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

查看结果 :

>>> world.plot()
<AxesSubplot: >
_images/sec6_project_5_1.png

11.3.3. 重新投影

重新投影是从一个坐标系变到另一个坐标系并重新表示位置的过程。 地球上的任意一点放置到二维平面上时,所有投影都是失真的,在制图时希望使用的投影可能不同于与导入数据相关联的投影。 在这些情况下,可以使用 to_crs 命令重新进行投影。

Reproject to Mercator (after dropping Antartica)。 设置投影可以使用: world = world.to_crs({'init': 'epsg:3395'}) , 但现在更推荐使用如下方式:

>>> world = world[(world.name != "Antarctica") & (world.name != "Fr. S. Antarctic Lands")]
>>> world = world.to_crs('epsg:3395') # world.to_crs(epsg=3395) would also work
>>> world.plot();
_images/sec6_project_8_0.png