程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[python] 天地圖切片下載優化

編輯:Python

天地圖切片下載優化

前提

下載天地圖切片地圖,這篇文章中提供了一種天地圖切片下載方案,其方案需要去尋找一個范圍(切片的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級,查看這個點所在的圖片是否和計算結果重合

  • 下圖中,藍色空心圓為輸入點,左側是完整的天地圖切片,右側是計算結果,可以發現點落在右側圖片中,所以認為這個算法是正確的

後續

  • 本文沒有對天地圖切片服務做進一步的解析t{0-7} 與放大級別之間的關系
http://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=a4ee5c551598a1889adfabff55a5fc27
  • 四至框選范圍後得到的切片索引配合 下載天地圖切片地圖即可進行下載操作

本文代碼及可視化代碼均放在 github 歡迎star & fork

  • ez_title_index
  • ez_tdt_title_download

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved