中国领土的四端为:
- 最东端:
在黑龙江和乌苏里江的主航道中心线的相交处(135°2′30′′E); - 最西端:
在帕米尔高原附近(73°29′59.79′′E); - 最南端:
在立地暗沙(3°31′00′′N,112°17′09′E),(英语:Lidi Ansha或Lydi Shoal)为中国南海南沙群岛区域的一座暗沙,是实际上的中国领土的最南端(非位于其东北约15海里的曾母暗沙)。按中华人民共和国行政区划,立地暗沙属于海南省三沙市管辖; - 最北端:
在漠河以北黑龙江主航道的中心线上(53°33′N,124°20′E)。
中国东西跨越经度60多度,最东端的乌苏里江畔和最西端的帕米尔高原高原相差5个时区。
中国领土辽阔广大,陆地总面积约960万平方千米,仅次于俄罗斯、加拿大,居世界第3位,第四位为美国。中国南北相距5500千米,东西相距5200千米。
EPSG是什么?
European Peroleum Survey Group,欧洲石油勘探组织。对,简单的来说就是它搞的一套标准,大家以他为权威,他收录了很多坐标系,并给这些坐标系分配到详细的“EPSG代码”,比如:EPSG:3857、EPSG:4326、EPSG:4527 等。。。
CGCS2000、北京54、西安80、WGS84 是什么?有什么关系?
详细介绍可以参考这篇文章:
(36条消息) 北京54、西安80、CGCS2000、WGS84坐标系及区别54 80 2000坐标系区别大作家佚名的博客-CSDN博客
现在我国已经停用北京54和西安80坐标系,改用CGCS2000坐标系了。北京54和西安80是参心坐标系,CGCS2000是地心坐标系与WGS84一样,只是椭球扁率微小差异,实际坐标结果几乎一致,约有毫米级别的差异 。
EPSG:3857是什么?
最早是google在web上使用的伪墨卡托投影坐标系(Web Mercator),一开始EPSG组织由于它“伪”拒绝收录,后来google自己定制了一个ID为EPSG:900913(非官方认证的ID),900913-google长得很像。。。,再然后,EPSG官方在2008年收录了并指定代号为EPSG:3785,再然后代号被弃用重新命名为EPSG:3857,也就是现在我们常用的Web 地图的坐标系,并且给定官方命名 “WGS 84 / Pseudo-Mercator“???
EPSG:4326 和 EPSG:3857 ?
这俩都是投影,世界级别(WGS 84),只不过EPSG:4326标注的单位是度,EPSG:3857标注的单位是米。
所以 EPSG:4326 叫:“WGS 84”;EPSG:3857 叫:“WGS 84 / Pseudo-Mercator”
举例对比:
EPSG对照表(参照中国领土的四端):
坐标系对应EPSG代号、经度范围、中央经线 - 豆丁网 (docin.com)坐标在线转换:
https://epsg.io/transform-
转换举例对比:
- CGCS2000 / 3-degree Gauss-Kruger zone 39,解释为:【CGCS2000坐标系(国家2000)、三度带(经度跨度单元)、高斯克吕格(投影算法)、时区 39】对应 EPSG的代号为 4527;
- 参心坐标系由于参考中心不同、距离参考中心远近不同导致有明显的误差的;
- 加代号和不加代号少了两位数而已。
扩展研究(选看):
在postgis数据库中可以查询到国内常用的几个坐标系的空间参考系信息:
-- 六度带:zone 属于 [13,23],CM 属于 [75E, 135E],数量:11
-- 三度带:zone 属于 [25,45],CM 属于 [75E, 135E],数量:21
-- 1. 2000坐标系:
-- CGCS2000 6度带 高斯投影 加代号 srid 属于 [4491,4501],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["CGCS2000 / Gauss-Kruger zone%' order by srid asc;
-- CGCS2000 6度带 高斯投影 不加代号 srid 属于 [4502,4512],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["CGCS2000 / Gauss-Kruger CM%' order by srid asc;
-- CGCS2000 3度带 高斯投影 加代号 srid 属于 [4513,4533],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone%' order by srid asc;
-- CGCS2000 3度带 高斯投影 不加代号 srid 属于 [4534,4554],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM%' order by srid asc;
-- 2. 西安80坐标系:
-- Xian 1980 6度带 高斯投影 加代号 srid 属于 [2327,2337],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Xian 1980 / Gauss-Kruger zone%' order by srid asc;
-- Xian 1980 6度带 高斯投影 不加代号 srid 属于 [2338,2348],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Xian 1980 / Gauss-Kruger CM%' order by srid asc;
-- Xian 1980 3度带 高斯投影 加代号 srid 属于 [2349,2369],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone%' order by srid asc;
-- Xian 1980 3度带 高斯投影 不加代号 srid 属于 [2370,2390],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM%' order by srid asc;
-- 3. 北京54坐标系:
-- Beijing 1954 6度带 高斯投影 加代号 srid 属于 [21413,21423],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Beijing 1954 / Gauss-Kruger zone%' order by srid asc;
-- Beijing 1954 6度带 高斯投影 不加代号 srid 属于 [21453,21463],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Beijing 1954 / Gauss-Kruger CM%' order by srid asc;
-- Beijing 1954 3度带 高斯投影 加代号 srid 属于 [2401,2421],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone%' order by srid asc;
-- Beijing 1954 3度带 高斯投影 不加代号 srid 属于 [2422,2442],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM%' order by srid asc;
-- 1. 新北京54坐标系:
-- (新北京54)New Beijing 6度带 高斯投影 加代号 srid 属于 [4568,4578],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["New Beijing / Gauss-Kruger zone%' order by srid asc;
-- (新北京54)New Beijing 6度带 高斯投影 不加代号 srid 属于 [4579,4589],数量:11
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["New Beijing / Gauss-Kruger CM%' order by srid asc;
-- (新北京54)New Beijing 3度带 高斯投影 加代号 srid 属于 [4652,4656]并[4766,4781],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["New Beijing / 3-degree Gauss-Kruger zone%' order by srid asc;
-- (新北京54)New Beijing 3度带 高斯投影 不加代号 srid 属于 [4782,4800]并[4812]并[4822],数量:21
SELECT * FROM "spatial_ref_sys" where srtext like 'PROJCS["New Beijing / 3-degree Gauss-Kruger CM%' order by srid asc;
附:python根据给定的投影坐标x,y值,自动识别epsg代码:
适用于 CGCS2000,Xian80,Beijing54,NewBeijing54 四大crs
from math import inf
from pprint import pprint
import pyproj
# 中国领土的四端为:
# 最东端:
# 在黑龙江和乌苏里江的主航道中心线的相交处(135°2'30"E);
# 最西端:
# 在帕米尔高原附近(73°29'59.79"E);
# 最南端:
# 在立地暗沙(3°31'00"N,112°17'09"E),(英语:Lidi Ansha或Lydi Shoal)为中国南海南沙群岛区域的一座暗沙,是实际上的中国领土的最南端(非位于其东北约15海里的曾母暗沙)。按中华人民共和国行政区划,立地暗沙属于海南省三沙市管辖;
# 最北端:
# 在漠河以北黑龙江主航道的中心线上(53°33'N,124°20'E)。
# minx, miny, maxx, maxy = (73°29'59.79"E, 3°31'00"N, 135°2'30"E, 53°33'N)
# # 3857
# minx, miny, maxx, maxy = (8181976.079668645, 391719.56668402057, 15032769.569208318, 7085388.165495079)
# # 4326
ChinaBbox4326 = [73.4999417, 3.5166667, 135.0416667, 53.55]
# # cgcs2000-4491
# minx, miny, maxx, maxy = (13333307.577437889, 388991.6394066638, 17137769.453445204, 7744052.21995985)
# # cgcs2000-4501
# minx, miny, maxx, maxy = (14778679.655726733, 820784.1522103351, 23502761.70636996, 5935831.474453285)
# # cgcs2000-3degree-4513
# minx, miny, maxx, maxy = (25333307.57743789, 388991.6394066638, 29137769.453445204, 7744052.21995985)
# # cgcs2000-3degree-4533
# minx, miny, maxx, maxy = (36778679.65572673, 820784.1522103351, 45502761.70636996, 5935831.474453285)
# class SpatialRefSys:
# srid: int = 4326
# auth_name: str = 'EPSG'
# auth_srid: int = 4326
# srtext: str = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]'
# proj4text: str = '+proj=longlat +datum=WGS84 +no_defs '
# 已知 web墨卡托
WebMercator3857 = 'WebMercator3857'
# 已知 wgs84 4326
WGS84 = 'WGS84'
# 已知 中国四大坐标系得 zone 和 cm 范围:
CGCS2000 = 'CGCS2000'
Xian80 = 'Xian80'
Beijing54 = 'Beijing54'
NewBeijing54 = 'NewBeijing54'
zoneRangesDegree6, zoneRangesDegree3 = (range(13, 23 + 1, 1), range(25, 45 + 1, 1))
zoneRangesDegree6Dict, zoneRangesDegree3Dict = ({item: index for index, item in enumerate(zoneRangesDegree6)},
{item: index for index, item in enumerate(zoneRangesDegree3)})
cmRangesDegree6, cmRangesDegree3 = (range(75, 135 + 6, 6), range(75, 135 + 3, 3))
chinaSrsDegree6List1323: list = []
chinaSrsDegree3List2545: list = []
class ChinaSrs:
crs: str = 'CGCS2000' # 坐标系
isZone: bool = False # 是否加代号
is3DegreeBelt: bool = False # 是否3度带
epsg: str = 'EPSG:4491' # epsg代码
zone: int = 13 # 时区/代号
cm: str = '75E' # 中央经线
convertCoordinate: list[float] = [0.0, 0.0] # 转换结果
def __init__(self, crs, isZone, is3DegreeBelt, epsg, zone, cm):
self.crs = crs
self.isZone = isZone
self.is3DegreeBelt = is3DegreeBelt
self.epsg = epsg
self.zone = zone
self.cm = cm
def __repr__(self) -> str:
return f"(crs={self.crs!r}, isZone={self.isZone!r}, is3DegreeBelt={self.is3DegreeBelt!r}, epsg={self.epsg!r}, zone={self.zone!r}, cm={self.cm!r}, convertCoordinate={self.convertCoordinate!r})"
def initCrs():
if len(chinaSrsDegree6List1323) > 0:
print('===》chinaSrs 缓存...')
return
print('===》chinaSrs 初始化...')
is3DegreeBelt = False
for index, zone in enumerate(zoneRangesDegree6):
centralMeridian = cmRangesDegree6.start + cmRangesDegree6.step * index
chinaSrsDegree6List1323.append((
# CGCS2000 6度带 高斯投影 加代号 srid 属于 [4491,4501],数量:11
# CGCS2000 6度带 高斯投影 不加代号 srid 属于 [4502,4512],数量:11
ChinaSrs(crs=CGCS2000, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4491 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=CGCS2000, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4502 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# Xian 1980 6度带 高斯投影 加代号 srid 属于 [2327,2337],数量:11
# Xian 1980 6度带 高斯投影 不加代号 srid 属于 [2338,2348],数量:11
ChinaSrs(crs=Xian80, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2327 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=Xian80, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2338 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# Beijing 1954 6度带 高斯投影 加代号 srid 属于 [21413,21423],数量:11
# Beijing 1954 6度带 高斯投影 不加代号 srid 属于 [21453,21463],数量:11
ChinaSrs(crs=Beijing54, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{21413 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=Beijing54, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{21453 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# (新北京54)New Beijing 6度带 高斯投影 加代号 srid 属于 [4568,4578],数量:11
# (新北京54)New Beijing 6度带 高斯投影 不加代号 srid 属于 [4579,4589],数量:11
ChinaSrs(crs=NewBeijing54, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4568 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=NewBeijing54, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4579 + index}',
zone=zone,
cm=f'{centralMeridian}E')
))
is3DegreeBelt = True
for index, zone in enumerate(zoneRangesDegree3):
centralMeridian = cmRangesDegree3.start + cmRangesDegree3.step * index
# 新北京54坐标系-3度带-加代号特殊处理
epsgNewBeijing54Zone = 4652 + index
if epsgNewBeijing54Zone >= 4657:
epsgNewBeijing54Zone = epsgNewBeijing54Zone - 4657 + 4766
# 新北京54坐标系-3度带-不加代号特殊处理
epsgNewBeijing54 = 4782 + index
if epsgNewBeijing54 == 4801:
epsgNewBeijing54 = 4812
elif epsgNewBeijing54 == 4802:
epsgNewBeijing54 = 4822
chinaSrsDegree3List2545.append((
# CGCS2000 3度带 高斯投影 加代号 srid 属于 [4513,4533],数量:21
# CGCS2000 3度带 高斯投影 不加代号 srid 属于 [4534,4554],数量:21
ChinaSrs(crs=CGCS2000, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4513 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=CGCS2000, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{4534 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# Xian 1980 3度带 高斯投影 加代号 srid 属于 [2349,2369],数量:21
# Xian 1980 3度带 高斯投影 不加代号 srid 属于 [2370,2390],数量:21
ChinaSrs(crs=Xian80, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2349 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=Xian80, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2370 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# Beijing 1954 3度带 高斯投影 加代号 srid 属于 [2401,2421],数量:21
# Beijing 1954 3度带 高斯投影 不加代号 srid 属于 [2422,2442],数量:21
ChinaSrs(crs=Beijing54, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2401 + index}', zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=Beijing54, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{2422 + index}', zone=zone,
cm=f'{centralMeridian}E'),
# (新北京54)New Beijing 3度带 高斯投影 加代号 srid 属于 [4652,4656]并[4766,4781],数量:21
# (新北京54)New Beijing 3度带 高斯投影 不加代号 srid 属于 [4782,4800]并[4812]并[4822],数量:21
ChinaSrs(crs=NewBeijing54, isZone=True, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{epsgNewBeijing54Zone}',
zone=zone,
cm=f'{centralMeridian}E'),
ChinaSrs(crs=NewBeijing54, isZone=False, is3DegreeBelt=is3DegreeBelt, epsg=f'EPSG:{epsgNewBeijing54}',
zone=zone,
cm=f'{centralMeridian}E')
))
# print(chinaSrsDegree6List1323)
print('------------------------------')
# print(chinaSrsDegree3List2545)
results: list[ChinaSrs] = []
cgcs2000Results = []
xian80Results = []
beijing54Results = []
newbeijing54Results = []
def identify(_x: float, _y: float, zoneNum, isZone):
if zoneRangesDegree6.start <= zoneNum <= zoneRangesDegree6.stop - 1:
# print('==>六度带')
tmpZoneRangesDict = zoneRangesDegree6Dict
tmpChinaSrsList = chinaSrsDegree6List1323
elif zoneRangesDegree3.start <= zoneNum <= zoneRangesDegree3.stop - 1:
# print('==>三度带')
tmpZoneRangesDict = zoneRangesDegree3Dict
tmpChinaSrsList = chinaSrsDegree3List2545
else:
# print('==>无解,包括x == 24')
return
if zoneNum in tmpZoneRangesDict:
index = tmpZoneRangesDict.get(zoneNum)
chinaSrsTuple: tuple[ChinaSrs] = tmpChinaSrsList[index]
for item in chinaSrsTuple:
if not item.isZone == isZone:
# 如果要求识别 isZone ,则跳过不加代号
# 如果不要求识别 isZone ,则跳过加代号
continue
try:
transformer = pyproj.Transformer.from_crs(item.epsg, "EPSG:4326", always_xy=True)
other_x, other_y = transformer.transform(xx=_x, yy=_y)
if xyTransferValid(xt=other_x, yt=other_y) is False:
continue
item.convertCoordinate = [other_x, other_y]
if item.crs == CGCS2000:
cgcs2000Results.append(item)
elif item.crs == Xian80:
xian80Results.append(item)
elif item.crs == Beijing54:
beijing54Results.append(item)
elif item.crs == NewBeijing54:
newbeijing54Results.append(item)
else:
continue
except Exception as e:
print('e=%s' % e)
continue
# 判断转换后坐标的有效性
def xyTransferValid(xt, yt):
if xt == inf or yt == inf:
return False
elif ChinaBbox4326[0] <= xt <= ChinaBbox4326[2] and ChinaBbox4326[1] <= yt <= ChinaBbox4326[3]:
return True
else:
return False
# 根据坐标计算epsg代号
def identify_crs(_x: float, _y: float, crsName: str = 'unlimited', degreeBelt: str = 'unlimited'):
"""
Args:
_x:
_y:
crsName: 坐标系名称,可选为 'unlimited'、'WebMercator3857'、'CGCS2000'、'Xian80'、'Beijing54'、'NewBeijing54',默认 'unlimited' 不限
degreeBelt: 坐标系度带,可选为 '6'、'3'、'unlimited',默认 'unlimited' 不限
Returns: []
"""
if crsName not in (WebMercator3857, CGCS2000, Xian80, Beijing54, NewBeijing54):
crsName = 'unlimited'
if degreeBelt not in ('6', '3'):
degreeBelt = 'unlimited'
print(f'(坐标X值:{_x},坐标Y值:{_y},坐标系:{crsName},度带:{degreeBelt})')
_vo = []
try:
# xInt, yInt = int(_x), int(_y)
xLen, yLen = len(str(int(_x))), len(str(int(_y)))
# 1. 3857坐标系识别
epsg3857Result = None
transformer = pyproj.Transformer.from_crs('EPSG:3857', "EPSG:4326", always_xy=True)
other_x, other_y = transformer.transform(xx=_x, yy=_y)
if xyTransferValid(xt=other_x, yt=other_y) is False:
pass
else:
epsg3857Result = {
'crs': WebMercator3857,
'epsg': 'EPSG:3857',
'convertCoordinate': [other_x, other_y]
}
# 1-1. 3857 坐标特殊处理返回
if crsName == WebMercator3857:
_vo.append(epsg3857Result)
return _vo
# 2-0. 初始化 chinaSrs
initCrs()
# 2-1. 中国四大坐标系识别
if xLen == 8 and yLen == 7:
# 加代号
# print('==>加代号')
zoneNum = int(_x / 1000000)
identify(_x, _y, zoneNum, True)
else:
# 不加代号
# print('==>不加代号')
for zoneNum in zoneRangesDegree6:
identify(_x, _y, zoneNum, False)
for zoneNum in zoneRangesDegree3:
identify(_x, _y, zoneNum, False)
# 整合结果集合,按 crs 分组
results.extend(cgcs2000Results)
results.extend(xian80Results)
results.extend(beijing54Results)
results.extend(newbeijing54Results)
# 2-2. 中国四大坐标统一处理返回
if crsName != 'unlimited' and degreeBelt != 'unlimited':
# 国家2000 6度带
for item in results:
if item.crs == crsName and item.is3DegreeBelt == (False if degreeBelt == '6' else True):
_vo.append(item)
elif crsName != 'unlimited' and degreeBelt == 'unlimited':
# 国家2000 不限
for item in results:
if item.crs == crsName:
_vo.append(item)
elif crsName == 'unlimited' and degreeBelt != 'unlimited':
# 不限 6度带
for item in results:
if item.is3DegreeBelt == (False if degreeBelt == '6' else True):
_vo.append(item)
else:
# 不限 不限
_vo = results
if epsg3857Result is not None:
_vo.append(epsg3857Result)
return _vo
except Exception as e:
print('e=%s' % e)
return _vo
def getOne(_vo):
_voDict = {}
if len(_vo) > 0:
for item in _vo:
if type(item) == ChinaSrs:
_voDict[item.crs] = item.epsg
else:
_voDict[item['crs']] = item['epsg']
else:
return None
if WebMercator3857 in _voDict:
return _voDict.get(WebMercator3857)[5:]
elif CGCS2000 in _voDict:
return _voDict.get(CGCS2000)[5:]
elif Beijing54 in _voDict:
return _voDict.get(Beijing54)[5:]
elif Xian80 in _voDict:
return _voDict.get(Xian80)[5:]
elif NewBeijing54 in _voDict:
return _voDict.get(NewBeijing54)[5:]
else:
return None
if __name__ == '__main__':
# 坐标系自动识别逻辑:
# 已知中心点:
x, y = (39500000.1234, 3500000.5678)
# x, y = (38471609.56449664,3918692.0474597644)
# x, y = (500000, 3500000)
# x, y = (13033287.131065886,4080601.624207251)
vo: list = []
vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='unlimited')
print('1. 获取可能的空间参考系epsg代码列表为:')
pprint(vo)
print('---------------------------------------------------------')
print('2. 获取一个可能的空间参考系epsg代码为:')
pprint(getOne(vo))
vo.clear()
#
# x, y = (39440055.461313486,3855857.7584496653)
# vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='unlimited')
# pprint(vo)
# pprint(getOne(vo))
# vo.clear()
#
# x, y = (38471609.56449664, 3918692.0474597644)
# vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='unlimited')
# pprint(vo)
# pprint(getOne(vo))
# vo.clear()
# vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='WebMercator3857', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='CGCS2000', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='CGCS2000', degreeBelt='6')
# vo = identify_crs(_x=x, _y=y, crsName='CGCS2000', degreeBelt='3')
# vo = identify_crs(_x=x, _y=y, crsName='Xian80', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='Xian80', degreeBelt='6')
# vo = identify_crs(_x=x, _y=y, crsName='Xian80', degreeBelt='3')
# vo = identify_crs(_x=x, _y=y, crsName='Beijing54', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='Beijing54', degreeBelt='6')
# vo = identify_crs(_x=x, _y=y, crsName='Beijing54', degreeBelt='3')
# vo = identify_crs(_x=x, _y=y, crsName='NewBeijing54', degreeBelt='unlimited')
# vo = identify_crs(_x=x, _y=y, crsName='NewBeijing54', degreeBelt='6')
# vo = identify_crs(_x=x, _y=y, crsName='NewBeijing54', degreeBelt='3')
# vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='6')
# vo = identify_crs(_x=x, _y=y, crsName='unlimited', degreeBelt='3')
# pprint(vo)
# pprint(getOne(vo))
# 4326 -180, -90, 180, 90
# 3857 -20037508.342789244, -242528680.94374272, 20037508.342789244, 242528680.94374272
# 国家2000六度带加代号 4491 -13500000, -10001965.729230462, 13500000, 10001965.729230462
# 国家2000六度带加代号 4501 -23500000, -10001965.729230462, 23500000, 10001965.729230462
# 国家2000三度带加代号 4513 -25500000, -10001965.729230462, 25500000, 10001965.729230462
# 国家2000三度带加代号 4533 -45500000, -10001965.729230462, 45500000, 10001965.729230462
pass
测试:
结果: