Я пытаюсь получить данные о здании с osmbuildings.org

В документации по osmbuildings (https://osmbuildings.org/documentation/data/) есть пример URL. (https://data.osmbuildings.org/0.2/anonymous /tile/15/17605/10743.json), который возвращает файл JSON для зданий, расположенных в Берлине примерно в координатах 52 ° 32'30,6 "N 13 ° 25'23,2" E.

Могу ли я использовать этот же сайт для получения файла JSON для зданий в другом месте? Например, я считаю, что координаты X, Y с использованием координат плитки XYZ будут 25835 и 5221 для местоположения в Сингапуре с увеличением 15, а соответствующий URL-адрес будет 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

0
KirstenS 25 Окт 2020 в 20:03

1 ответ

Лучший ответ

Если вы не получили файл JSON, вероятно, вы получите пустой ответ. Вероятно, это связано с тем, что указанная вами плитка не содержит данных о зданиях.

Это может иметь разные причины, например: есть регионы, в которых отсутствуют данные о зданиях. Однако в вашем случае мне кажется, что ваше преобразование в координаты X, Y неверно для Сингапура.

В моем следующем примере я использую координаты Сингапурского залива Марина (https: // www.openstreetmap.org/#map=15/1.2742/103.8617).

Я преобразовал долготу / широту в числа плиток, используя формулу из вики OSM (https: //wiki.openstreetmap .org / wiki / Slippy_map_tilenames). В псевдокоде:

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

Который действительно возвращает данные JSON для примерно 40 зданий.

Это также отлично работало для меня на других уровнях масштабирования. Например. увеличение знаменитого " Marina Bay Sands " (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 » и т. д., что показывает, что он работал должным образом.

1
buddemat 25 Окт 2020 в 23:05