获取mapbox生成的地图图块边界

时间:2018-03-16 19:40:49

标签: ruby leaflet openlayers mapbox

我的移动应用程序需要在特定位置周围的区域使用离线地图;计划将获得一个mapbox tile,然后是周围的tile或类似的东西,然后使用Leaflet渲染它们。

这是一个多部分的过程;首先,我使用我在以下Ruby方法上的单个坐标:

def get_tile_number(lat_deg, lng_deg, zoom)
  lat_rad = lat_deg/180 * Math::PI
  n = 2.0 ** zoom
  x = ((lng_deg + 180.0) / 360.0 * n).to_i
  y = ((1.0 - Math::log(Math::tan(lat_rad) + (1 / Math::cos(lat_rad))) / Math::PI) / 2.0 * n).to_i
  {:z => zoom, :x => x, :y =>y}
end

返回瓷砖的x,y,z坐标,然后我可以将其输入到瓷砖图像的mapbox API中,然后我可以将其用作小册子地图的源图像...但我不会&#39 ; t有关于边界的任何信息,因此无法正确使用地图图像。

那么,我怎样才能获得该地图边界的信息?有没有更简单的方法来提供离线地图?

1 个答案:

答案 0 :(得分:0)

您确实拥有有关地图图像边界的信息。您已经计算了平铺图像的点。要获取图块图像的边界, 这是我在JavaScript中为OpenStreetMaps Wiki中的方法改编的代码:

const toDegrees = radians => radians * 180 / Math.PI

const tile2Lon = (x, z) => {
     return (x / Math.pow(2.0, z) * 360.0 - 180)
}

const tile2Lat = (y, z) => {
    let n = Math.PI - (2.0 * Math.PI * y) / Math.pow(2.0, z)
    return (toDegrees(Math.atan(Math.sinh(n))))
}

const tile2BoundingBox = (x, y, zoom) => {

   let bb = {}
   bb.north = tile2Lat(y, zoom)
   bb.south = tile2Lat(y + 1, zoom)
   bb.west = tile2Lon(x, zoom)
   bb.east = tile2Lon(x + 1, zoom)
   return (bb)
}

src和其他语言:https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_bounding_box