下載天地圖切片地圖,這篇文章中提供了一種天地圖切片下載方案,其方案需要去尋找一個范圍(切片的xy索引區間),在尋找切片范圍的時候需要在大量的圖片中尋找到結果比較麻煩,因此提出如下需求。
本文參考內容
上述代碼不能正常運行
所以對這個代碼進行重構
#! /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級,查看這個點所在的圖片是否和計算結果重合
下圖中,藍色空心圓為輸入點,左側是完整的天地圖切片,右側是計算結果,可以發現點落在右側圖片中,所以認為這個算法是正確的
http://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=a4ee5c551598a1889adfabff55a5fc27
本文代碼及可視化代碼均放在 github 歡迎star & fork