【问题标题】:Retrieving JSON data from the osmbuildings.org data site从 osmbuildings.org 数据站点检索 JSON 数据
【发布时间】:2021-02-08 01:55:39
【问题描述】:

我正在尝试从 osmbuildings.org 检索建筑数据

osmbuildings 文档 (https://osmbuildings.org/documentation/data/) 提供了一个示例 URL (https://data.osmbuildings.org/0.2/anonymous/tile/15/17605/10743.json),它返回位于柏林大约 52°32'30.6"N 13°25'23.2"E 坐标处的建筑物的 JSON 文件。

我可以使用同一个站点来获取不同位置的建筑物的 JSON 文件吗?例如,我相信使用 XYZ 平铺坐标的 X、Y 坐标将是 25835 和 5221,对于新加坡的一个位置,缩放为 15,相应的 url 将是 https://data.osmbuildings.org/0.2/anonymous/tile/15/25835/5221.json。 但是,当我将其放入 Web 浏览器时,我没有像柏林案例中那样获得 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 gis openstreetmap coordinate-transformation


    【解决方案1】:

    如果您没有收到 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.8617lat = 1.2742zoom = 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 = 25837Y = 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,其中包含命名的建筑物,例如“滨海湾金沙大厦 1”、“滨海湾金沙大厦 2”等,这表明它有效符合预期。

    【讨论】:

    • 感谢您的详细解答!我没有意识到我错误地转换为 X、Y 坐标。但是,我的 X 和 Y 坐标仍然有效,但返回了一个没有建筑物的位置,并且在我这边似乎需要永远加载。我遇到的问题是,尽管我使用了与您显示的相同的方程式,但我错误地从度数转换为弧度数。愚蠢的错误!再次感谢。你为我节省了很多时间。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多