Wikimapia.org API - Coordinate System?

本文关键字:System Coordinate org API Wikimapia | 更新日期: 2023-09-27 18:32:09

我正在尝试使用wikimapia API。

我从他们那里收到的坐标看起来像例如 X=148163437, Y=99238706 对于纬度=42.406425N, lon=18.702075E 的地方。更有趣的是,居住在阿根廷的物体(纬度和经度都是负的)仍然具有正坐标。

如何将维基地图专有坐标系中的坐标转换为普通坐标系?

附言我正在使用墨卡托选项请求 JSON 数据。

Wikimapia.org API - Coordinate System?

这看起来像一个四叉树系统,有时用于坐标存储。 通过设计,它允许快速索引和简单的数据回忆。 基本上,360 x 180 行星分为 4 个象限(或其任何倍数 - 如果使用纯数字,通常小于 8。 但如果采用字母数字,则可以扩展)。每个由此产生的分裂进一步分裂,依此类推。 即最左上角的块将是 1111 在一个系统中,一个简单的递归四分法被使用了 4 次。

恐怕除非你知道所实施的策略,否则破译实际分配只能计算出你知道的坐标和它们的四叉树对应物的良好分布。

请注意,这是我对您的帖子的看法。 。

要解码坐标,只有两个值(x,y)是不够的。据我了解,他们传递 MBR 作为响应,而不是直接坐标。这实际上取决于图块的边界坐标。我将举一个解码的例子。首先,您应该有磁贴的边界。

如果我们有适用于所有世界的瓷砖,他们就会将它们设置为:

-1800000000

|1800000000|-850511288|850511288

这将转换为:

let left = -1800000000 / 1e7
let right = 1800000000 / 1e7
let bottom = -850511288 / 1e7
let top = 850511288 / 1e7

然后,如果您有这样的信息行:

30870710|2492727202|1200141117|20170|8177|18| Bagram

它包含一个对象的MBR和附加信息。您可以使用以下代码对其进行解码:

let str = '30870710|2492727202|1200141117|20170|8177|18| Bagram'
let temp = str.split('|')
let mbr = {
   left: left + parseInt(temp[1], 10) / 1e7,
   top: bottom + parseInt(temp[2], 10) / 1e7,
   bottom: parseInt(temp[4], 10) / 1e7,
   right: parseInt(temp[3], 10) / 1e7
}
// mbr correction
mbr.bottom = mbr.top - mbr.bottom
mbr.right = mbr.left + mbr.right
let obj = {
    type: "Feature",
    properties: {
       "id": temp[0],
       "name": temp[6],
       "zoom": parseInt(temp[5], 10),
       "mbr": mbr,
    },
    geometry: {
       type: "Point",
       coordinates: [(mbr.left + mbr.right) / 2, (mbr.bottom + mbr.top) / 2]
    }
}