Как получить данные OSM с помощью Overpass API из jQuery?

У меня есть следующий код для запроса данных карты из OSM:

$.ajax({
    url:
        'https://www.overpass-api.de/api/interpreter?' + 
        '[out:json][timeout:60];' + 
        'area["boundary"~"administrative"]["name"~"Berlin"];' + 
        'node(area)["amenity"~"school"];' + 
        'out;',
    dataType: 'json',
    type: 'GET',
    async: true,
    crossDomain: true
}).done(function() {
    console.log( "second success" );
}).fail(function(error) {
    console.log(error);
    console.log( "error" );
}).always(function() {
    console.log( "complete" );
});

Когда я тестирую запрос на Overpass Turbo, он работает без проблем, но при предварительном формировании этого запроса в JavaScript я всегда получаю сообщение об ошибке:

"<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>  <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/>  <title>OSM3S Response</title></head><body><p>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Key expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: '!', '~', '=', '!=', or ']'  expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Value expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: ',' or ']' expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Key expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: '!', '~', '=', '!=', or ']'  expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Value expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: ',' or ']' expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: static error: For the attribute "k" of the element "has-kv" the only allowed values are non-empty strings. </p><p><strong style="color:#FF0000">Error</strong>: line 1: static error: For the attribute "k" of the element "has-kv" the only allowed values are non-empty strings. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Key expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: '!', '~', '=', '!=', or ']'  expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Value expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: parse error: ',' or ']' expected - '%' found. </p><p><strong style="color:#FF0000">Error</strong>: line 1: static error: For the attribute "k" of the element "has-kv" the only allowed values are non-empty strings. </p></body></html>"

Должно быть что-то не так с тем, как я делаю запрос, но я не могу понять, что с ним может быть не так.

Как мне получить позиции всех школ в Берлине из JavaScript?

Я также пытался использовать $.getJSON(), но у меня это тоже не сработало.


person Zelphir Kaltstahl    schedule 18.07.2015    source источник


Ответы (1)


URL-адрес, который вы используете в своем примере, кажется неполным: он должен читаться как ...interpreter?data=[out:json].... т. е. часть data= отсутствовала.

В качестве справки вы также можете поместить свой запрос в overpass turbo и просто нажать Экспорт -> необработанные данные непосредственно из API Overpass, чтобы перейти к рабочему URL-адресу. Может быть, сначала попробуйте это с помощью wget, и если все получится, поместите URL-адрес в свой код Javascript.

Возможно, вы также хотите немного изучить, как overpass turbo выполняет (на основе POST) вызовы Overpass API: см. https://github.com/tyrasd/overpass-turbo/blob/master/js/overpass.js#L581.

person mmd    schedule 18.07.2015
comment
Ах, извините, не обновил страницу, прежде чем опубликовать свой собственный ответ. Ничего себе, в этой ссылке много нечитаемого кода: D, но все равно спасибо! - person Zelphir Kaltstahl; 19.07.2015