Skip to content

天地图切片下载优化

huifer edited this page May 6, 2019 · 1 revision

天地图切片下载优化

需求

  • 输入经纬度返回切片索引

制作

本文参考内容

1557107298944

上述代码不能正常运行

1557107365840

所以对这个代码进行重构

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __file__: 天地图经纬度转换切片索引
import math


def lng_lat_to_title_index(lng, lat, level):
    """
    天地图经纬度转换切片索引
    :param lng: 经度
    :param lat: 纬度
    :param level: 放大级别
    :return: (切片的x索引,切片的y索引)
    """
    x = (lng + 180) / 360
    title_X = math.floor(x * math.pow(2, level))
    lat_rad = lat * math.pi / 180
    y = (1 - math.log(math.tan(lat_rad) + 1 / math.cos(lat_rad)) / math.pi) / 2
    title_Y = math.floor(y * math.pow(2, level))
    return (title_X, title_Y)


if __name__ == '__main__':
    z = 18
    xy = [120.25871185675187, 30.16739619707534]
    aaa = lng_lat_to_title_index(xy[0], xy[1], z)
    url = 'http://t2.tianditu.gov.cn/DataServer?T=vec_w&x={}&y={}&l={}&tk=a4ee5c551598a1889adfabff55a5fc27'.format(
        aaa[0], aaa[1], z)
    print(url)

校验

  • 校验方式:在地图上绘制当前输入点[120.25871185675187, 30.16739619707534] ,将地图放大到18级,查看这个点所在的图片是否和计算结果重合

  • 下图中,蓝色空心圆为输入点,左侧是完整的天地图切片,右侧是计算结果,可以发现点落在右侧图片中,所以认为这个算法是正确的

1557107550925

后续

  • 本文没有对天地图切片服务做进一步的解析t{0-7} 与放大级别之间的关系
http://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=a4ee5c551598a1889adfabff55a5fc27
Clone this wiki locally