地图学分幅编号(中国地区)(包含新旧)(Python)

文章提供了一段Python代码,用于根据不同的比例尺和分幅原理,计算和转换地图的旧分幅和新分幅编号。主要涉及地理坐标到图幅编号的转换算法,适用于1:100万至1:1万不同比例尺的地图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图幅关系如下:

 

旧分幅的总原理:

 

 

 

 

计算公式:

 

新的分幅原理:

 

比例尺代码:

 

 计算公式:

 总代码如下(以溧阳为例):

import math
#北半球分幅

#旧编号
def old(latitude,longitude,scale):
    one=chr(int(latitude/4)+65)
    print(one)
    two=int(longitude/6)+31
    print(two)
    if scale == 1/500000:
        if (longitude-int(longitude/6)*6)>=3:
            if (latitude-int(latitude/4)*4)>=2:
                three="B"
            else:
                three = "D"
        else:
            if (latitude - int(latitude / 4) * 4) >= 2:
                three = "A"
            else:
                three = "C"
        print(three)
    elif scale == 1 / 250000:
        four= int(13-((latitude%4)//1)*4+((longitude%6)//1.5))
        print('['+str(four)+']')
    else:
        five= int(133-((latitude%4)//(1/3))*12+((longitude%6)//0.5))                                      #1/100000
        print(five)
        if scale == 1 / 10000:
            eight= int(57 - ((latitude % (1 / 3)) // (1 / 24)) * 8 + ((longitude % 0.5) // 0.0625))
            print('('+str(eight)+')')
        else:
            six = chr(int(3 - ((latitude % (1 / 3)) // (1 / 6)) * 4 + ((longitude % 0.5) // 0.25)) + 64)  #1/50000
            print(six)
            if scale==1/25000:
                seven=int(3 - ((latitude % (1 / 6)) // (1 / 12)) * 4 + ((longitude % 0.25) // 0.125))
                print(seven)
    return '-----------------------'

#新编号
def new(latitude,longitude,code):
    first=chr(int(latitude/4)+65)
    print(first)
    second=int(longitude/6)+31
    print(second)
    if code=='B':
        print('B')
        third=int(2-(latitude%4)//2)
        print('%03d'%third)
        fourth=int((longitude%6)//3+1)
        print('%03d'%fourth)
    elif code=='C':
        print('C')
        third=int(4-(latitude%4)//1)
        print('%03d'%third)
        fourth=int((longitude%6)//1.5+1)
        print('%03d'%fourth)
    elif code=='D':
        print('D')
        third=int(12-(latitude%4)//(1/3))
        print('%03d'%third)
        fourth=int((longitude%6)//0.5+1)
        print('%03d'%fourth)
    elif code=='E':
        print('E')
        third=int(24-(latitude%4)//(1/6))
        print('%03d'%third)
        fourth=int((longitude%6)//0.25+1)
        print('%03d'%fourth)
    elif code=='F':
        print('F')
        third=int(48-(latitude%4)//(1/12))
        print('%03d'%third)
        fourth=int((longitude%6)//0.125+1)
        print('%03d'%fourth)
    elif code=='G':
        print('G')
        third=int(96-(latitude%4)//(1/24))
        print('%03d'%third)
        fourth=int((longitude%6)//0.0625+1)
        print('%03d'%fourth)
    return '-----------------------'

print('旧分幅编号')
print('1:100万分幅编号')
print(old(31.016667,119.01333333,1/1000000))
print('1:50万分幅编号')
print(old(31.016667,119.01333333,1/500000))
print('1:25万分幅编号')
print(old(31.016667,119.01333333,1/250000))
print('1:10万分幅编号')
print(old(31.016667,119.01333333,1/100000))
print('1:5万分幅编号')
print(old(31.016667,119.01333333,1/50000))
print('1:2.5万分幅编号')
print(old(31.016667,119.01333333,1/25000))
print('1:1万分幅编号')
print(old(31.016667,119.01333333,1/10000))

print('新分幅编号')
print('1:50万分幅编号')
print(new(31.016667,119.01333333,'B'))
print('1:25万分幅编号')
print(new(31.016667,119.01333333,'C'))
print('1:10万分幅编号')
print(new(31.016667,119.01333333,'D'))
print('1:5万分幅编号')
print(new(31.016667,119.01333333,'E'))
print('1:2.5万分幅编号')
print(new(31.016667,119.01333333,'F'))
print('1:1万分幅编号')
print(new(31.016667,119.01333333,'G'))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值