如何解决从osmbuildings.org数据站点检索JSON数据
我正在尝试从osmbuildings.org检索建筑数据
osmbuildings文档(https://osmbuildings.org/documentation/data/)的示例网址(https://data.osmbuildings.org/0.2/anonymous/tile/15/17605/10743.json)返回位于柏林大约52°32'30.6“ N 13°25'23.2的建筑物的JSON文件“ E坐标。
我可以使用同一网站获取位于其他位置的建筑物的JSON文件吗?例如,对于在新加坡的位置(缩放比例为15),我相信使用XYZ瓦片坐标的X,Y坐标将为25835和5221,相应的网址为https://data.osmbuildings.org/0.2/anonymous/tile/15/25835/5221.json。 但是,当我将其放入网络浏览器时,我没有像柏林案例中那样得到json文件。有人可以解释吗?
我还在同一位置尝试了不同的缩放值: https://data.osmbuildings.org/0.2/anonymous/tile/16/51672/8779.json
在建筑物较少的位置略有不同: https://data.osmbuildings.org/0.2/anonymous/tile/16/51666/9459.json
解决方法
如果未获取JSON文件,则可能会收到空回复。这可能是因为您指定的图块不包含任何建筑物数据。
这可能有多种原因,例如有些地区没有可用的建筑物数据。但是,就您而言,在我看来,您转换为X,Y坐标对新加坡来说是不正确的。
在下面的示例中,我将使用新加坡滨海湾(https://www.openstreetmap.org/#map=15/1.2742/103.8617)的坐标。
我使用OSM Wiki(https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames)中的公式将lon / lat转换为图块编号。用伪代码:
n = 2 ^ zoom
xtile = n * ((lon_deg + 180) / 360)
ytile = n * (1 - (ln(tan(lat_rad) + sec(lat_rad)) / π)) / 2
= n * (1 - (ln(tan(lat_rad) + (1 / cos(lat_rad))) / π)) / 2
填写lon = 103.8617
和lat = 1.2742
和zoom = 15
中的内容,您将得到:
n = 2^15
= 32768
xtile = 32768 * ((103.8617 + 180) / 360)
= 25837.722737778
ytile = 32768 * (1 - (ln(tan(1.2742) + (1 / cos(1.2742))) / π)) / 2
= 16268.009923134
忽略小数,我们得到X = 25837
和Y = 16268
。将其链接(根据https://osmbuildings.org/documentation/data/),我们得到
https://data.osmbuildings.org/0.2/anonymous/tile/15/25837/16268.json
它确实返回了大约40座建筑物的JSON数据。
在其他缩放级别上,这对我也很好。例如。放大著名的“ 滨海湾金沙”(https://www.openstreetmap.org/#map=17/1.28338/103.86148)并根据上面的伪代码计算链接,我得到:
https://data.osmbuildings.org/0.2/anonymous/tile/17/103350.810851556/65068.69652388.json
返回一个包含命名建筑物的JSON,例如“ Marina Bay Sands Tower 1 ”,“ Marina Bay Sands Tower 2 ”等,表明该方法有效按预期。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。