我的移动应用程序需要在特定位置周围的区域使用离线地图;计划将获得一个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有关于边界的任何信息,因此无法正确使用地图图像。
那么,我怎样才能获得该地图边界的信息?有没有更简单的方法来提供离线地图?
答案 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