pyproj.Proj也支持直接通过epsg代码设置投影坐标系。
EPSP的英文全称是European Petroleum Survey Group,中文名称为欧洲石油调查组织。它负责维护并发布坐标参照系统的数据集参数,以及坐标转换描述,该数据集被广泛接受并使用,通过一个Web发布平台进行分发,同时提供了微软Acess数据库的存储文件,通过SQL脚本文件,mySQL, Oracle和PostgreSQL等数据库也可使用。
目前已有的参考椭球体,大地坐标系,投影坐标系等不同组合都对应着不同的epsg ID号,在EPSG中被称为EPSG code,它代表特定的椭球体、单位、地理坐标系或投影坐标系等信息。EPSG对世界的每一个地方都制定了地图,但是由于座标系不同,所以地图也各不相同。具体不同的EPSG code可在Coordinate Systems Worldwide上查询。
比较常用的几个EPSG CODE如下表:
EPSG CODE | 含义 |
---|---|
4479 | 中国大地2000坐标系,中国专用 |
4326 | WGS84坐标系,GPS使用 |
3857 | 基于WGS84的伪墨卡托投影坐标系,互联网常用 |
pyproj.CRS表示一个坐标参数系统(Coordinate Reference System),pyproj.CRS.from_epsg()支持epsg代码。比如:
In [34]: crs=pyproj.CRS.from_epsg(4479)
In [35]: crs
Out[35]:
<Geocentric CRS: EPSG:4479>
Name: China Geodetic Coordinate System 2000
Axis Info [cartesian]:
- X[geocentricX]: Geocentric X (metre)
- Y[geocentricY]: Geocentric Y (metre)
- Z[geocentricZ]: Geocentric Z (metre)
Area of Use:
- name: China
- bounds: (73.62, 16.7, 134.77, 53.56)
Datum: China 2000
- Ellipsoid: CGCS2000
- Prime Meridian: Greenwich
然而,epsg代码既可以表示投影坐标系(如EPSG:3070表示NAD83/Wisconsin Transverse Mercator),
也可以表示大地坐标系(如EPSG:4479表示China Geodetic Coordinate System 2000 ),
还可以表示大地基准面(如EPSG:1043表示China 2000 ),
还可以表示参考椭球(如EPSG:1024表示CGCS2000 )。
但pyproj.CRS.from_epsg()只支持表示投影坐标系和大地坐标系的EPSG代码,比如:
In [40]: crs=pyproj.CRS.from_epsg(3070)In [41]: crs
Out[41]:
<Projected CRS: EPSG:3070>
Name: NAD83 / Wisconsin Transverse Mercator
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: USA - Wisconsin
- bounds: (-92.89, 42.48, -86.25, 47.31)
Coordinate Operation:
- name: Wisconsin Transverse Mercator 83
- method: Transverse Mercator
Datum: North American Datum 1983
- Ellipsoid: GRS 1980
- Prime Meridian: Greenwich
In [42]: crs=pyproj.CRS.from_epsg(4479)In [43]: crs
Out[43]:
<Geocentric CRS: EPSG:4479>
Name: China Geodetic Coordinate System 2000
Axis Info [cartesian]:
- X[geocentricX]: Geocentric X (metre)
- Y[geocentricY]: Geocentric Y (metre)
- Z[geocentricZ]: Geocentric Z (metre)
Area of Use:
- name: China
- bounds: (73.62, 16.7, 134.77, 53.56)
Datum: China 2000
- Ellipsoid: CGCS2000
- Prime Meridian: Greenwich
In [44]: crs.datum
Out[44]:
DATUM["China 2000",ELLIPSOID["CGCS2000",6378137,298.257222101,LENGTHUNIT["metre",1]],ID["EPSG",1043]]In [45]: pyproj.CRS.from_epsg(1043)
---------------------------------------------------------------------------
CRSError Traceback (most recent call last)
<ipython-input-45-afd15e3adcf2> in <module>
----> 1 pyproj.CRS.from_epsg(1043)~\anaconda3\lib\site-packages\pyproj\crs\crs.py in from_epsg(code)329 CRS330 """
--> 331 return CRS(_prepare_from_epsg(code))332333 @staticmethod~\anaconda3\lib\site-packages\pyproj\crs\crs.py in __init__(self, projparams, **kwargs)294 projstring = _prepare_from_string(" ".join((projstring, projkwargs)))295
--> 296 super().__init__(projstring)297298 @staticmethodpyproj\_crs.pyx in pyproj._crs._CRS.__init__()CRSError: Invalid projection: epsg:1043: (Internal Proj Error: proj_create: crs not found)
In [46]: crs.ellipsoid
Out[46]:
ELLIPSOID["CGCS2000",6378137,298.257222101,LENGTHUNIT["metre",1],ID["EPSG",1024]]In [47]: pyproj.CRS.from_epsg(1024)
---------------------------------------------------------------------------
CRSError Traceback (most recent call last)
<ipython-input-47-e84987c37b35> in <module>
----> 1 pyproj.CRS.from_epsg(1024)~\anaconda3\lib\site-packages\pyproj\crs\crs.py in from_epsg(code)329 CRS330 """
--> 331 return CRS(_prepare_from_epsg(code))332333 @staticmethod~\anaconda3\lib\site-packages\pyproj\crs\crs.py in __init__(self, projparams, **kwargs)294 projstring = _prepare_from_string(" ".join((projstring, projkwargs)))295
--> 296 super().__init__(projstring)297298 @staticmethodpyproj\_crs.pyx in pyproj._crs._CRS.__init__()CRSError: Invalid projection: epsg:1024: (Internal Proj Error: proj_create: crs not found)
如果知道投影坐标系的EPSG CODE,可以通过代码构建投影坐标系,如下:
In [51]: crs=pyproj.CRS.from_epsg(3857)In [52]: proj = pyproj.Proj(crs)In [53]: proj
Out[53]: Proj('+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs', preserve_units=True)