根据矢量范围框计算瓦片编号

"""pyproj库未使用"""
import pyproj
import shapely
from shapely import wkt
import math

"""wgs84_to_webmercator函数未使用"""
def wgs84_to_webmercator(lat_in,lon_in):
  input_crs = pyproj.CRS.from_string("espg:4326")
  output_crs = pyproj.CRS.from_string("espg:3857")
  coord_trans = pyproj.Transformer.from_crs(input_crs,output_crs)
  lat_out,lon_out = coord_trans.transform(lat_in,lon_in)
  return lat_out,lon_out

def deg2num(lat_deg,lon_deg,zoom_level):
  lat_rad = math.radians(lat_deg)
  n = 2.0 ** zoom_level
  xtile = int((lon_deg + 180.0) / 360.0 * n)
  ytile = int((1.0 - math.asinh(math.tan(lat_deg)) / math.pi) / 2.0 * n)
  return xtile,ytile

def num2deg(xtile,ytile,zoom_level):
  n = 2.0 ** zoom_level
  lon_deg = xtile / n * 360.0 - 180.0
  lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
  lat_deg = math.degrees(lat_rad)

  lon_deg_plus = (xtile + 1) / n * 360.0 - 180.0
  lat_rad_plus = math.atan(math.sinh(math.pi * (1 - 2 * (ytile + 1) / n)))
  lat_deg_plus = math.degrees(lat_rad_plus)

  return lat_deg,lon_deg,lat_deg_plus,lon_deg_plus

def get_tile_list(area_geom_wkt,zoom_level):
  tile_list = []
  area_geometry = wkt.loads(area_geom_wkt)
  """获取范围框的矩形外包围框坐标"""
  (x_min,y_min,x_max,y_max) = area_geometry.bounds

  """获取矩形外包围框坐标涉及到瓦片编号的x、y的最大最小值"""
  start_x,end_y = deg2num(y_min,x_min,zoom_level)
  end_x,start_y = deg2num(y_max,x_max,zoom_level)

  """遍历矩形外包围框坐标涉及到的全部瓦片编号,判断与原始范围框是否存在相交关系,是则正确"""
  for x_tile in range(start_x,end_x + 1):
     for y_tile in range(start_y,end_y + 1):
        """根据瓦片编号,获取瓦片对应的角点坐标"""
        lat_deg,lon_deg,lat_deg_plus,lon_deg_plus = num2deg(x_tile,y_tile,zoom_level)
        """将瓦片角点坐标转换为矩形几何"""
        bbox = shapely.geometry.box(lon_deg_plus,lat_deg,lon_deg,lat_deg_plus)
        """判断瓦片范围与原始范围框的相交关系"""
        if area_geometry.intersects(bbox):
          """去重处理"""
          if '_'.join([str(x_tile),str(y_tile)]) not in tile_list:
             tile_list.append('_'.join([str(x_tile),str(y_tile)]))
          else:
             pass
  return tile_list
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇