CGCS2000、北京54、西安80、WGS84一看就会

中国领土的四端为:

  • 最东端:
    在黑龙江和乌苏里江的主航道中心线的相交处(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

  • 转换举例对比:


    image.png
    • CGCS2000 / 3-degree Gauss-Kruger zone 39,解释为:【CGCS2000坐标系(国家2000)、三度带(经度跨度单元)、高斯克吕格(投影算法)、时区 39】对应 EPSG的代号为 4527;
    • 参心坐标系由于参考中心不同、距离参考中心远近不同导致有明显的误差的;
    • 加代号和不加代号少了两位数而已。

扩展研究(选看):

image.png

image.png

在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

测试:

image.png

结果:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容