2009-07-07 4 views
36

Интересно, есть ли какой-либо API, который мог бы запросить данные OSM, например, Есть (lon_1, lat_1) на суше или в море? Или можно ли получить остров как четко определенный полигон? Единственное, что я видел до сих пор, - это только инструменты для визуализации данных OSM (генерирование плиток).Есть ли API для openstreetmap?

+0

Этот MapServer кажется довольно интересным. Спасибо – vikingosegundo

+0

Вы должны добавить свое обновление в качестве ответа и принять его. –

ответ

1

Я нашел отличный API для чтения данных Openstreetmap; Mapscript. Это интерфейс к MapServer, который способен читать файлы * .map и * .shp.Он может использовать пространственный индекс и, следовательно, потенциально чрезвычайно быстро. Я сделал случайный поиск полигонов (проверяя, пересекает ли многоугольник землю) файла формы береговой линии в течение 40 мс.

2

Конечно, javascript api называется openlayers.

+1

Я знаю об openlayers, но разве это не только для отображения/работы с выделенными плитками? –

25

Да, есть api и xapi (extended api).

Я еще не использовал их.

Но есть и cloudmade api в OSM. Я немного поиграл с api python.

Я не уверен, если они могут помочь вам с вашей конкретной проблемой, но вы можете найти coastline рядом с вашей точкой. Если ваша точка находится в пределах полигона tagged natural=coastline, у вас есть остров (или континент) ...

+0

Каков формат XML, который он предоставляет, и как я могу сделать это в растровом изображении в моем приложении? –

+3

для создания iamge из xml и нужен рендерер. там несколько. см. здесь http://wiki.openstreetmap.org/wiki/Renderers – vikingosegundo

+0

Для больших и/или сложных запросов [API переадресации] (https://wiki.openstreetmap.org/wiki/Overpass_API) - это путь. – scai

9

Вы можете использовать API геокодирования CloudMade для поиска острова в данных OpenStreetMap. API вернет геометрию результата по умолчанию, и это звучит для меня, что вы ищете. Например, Арран у берегов Шотландии можно найти по следующей запрос HTTP:.

http://geocoding.cloudmade.com/BC9A493B41014CAABB98F0471D759707/geocoding/find/Arran,UK.js?results=1

(и, как аккуратный маленький хак, меняя .js на .html просмотрит результат

Дополнительные документы и примеры в API находятся на developers.cloudmade.com/projects/show/geocoding-http-api Если вы не хотите использовать http api, тогда API абстракции доступны на нескольких языках: ruby, python, perl и др.

2

Я использовал экстракты OSM CloudMade, но имел некоторые проблемы с им. Например, Норвегия была обрезана слишком сильно, в результате чего некоторые дороги на западном побережье исчезли.

Теперь я предпочитаю API-интерфейс эстакады.

Положите что-то подобное в форму запроса на http://www.overpass-api.de/query_form.html

<osm-script timeout="10000" element-limit="1073741824"> 
    <union into="_"> 
    <bbox-query into="_" s="52.3170669250001" n="52.4027433480001" w="4.80527567900009" e="4.97793537400008"/> 
    <recurse from="_" into="_" type="up"/> 
    <recurse from="_" into="_" type="down"/> 
    </union> 
    <print from="_" limit="" mode="meta" order="id"/> 
</osm-script> 

Помещенных границы области, которую вы хотите, в градусах, в с, п, ш и е атрибутами элемента.

1

MapQuest имеет набор API-интерфейсов веб-сервиса «Open» на основе данных OpenStreetMap с довольно unrestrictive Условия (т.е. условия внимательно следить, чтобы у OSM):

http://developer.mapquest.com/web/products/open

7

Никто не кажется, упоминали здесь листовка API:
http://leafletjs.com/reference.html

+0

На самом деле это не отвечает на вопрос автора. Он хочет, чтобы запросить OpenStreetMap, а не отображать карту. Листовка - это «библиотека JavaScript с открытым исходным кодом для мобильных интерактивных карт», как указано на их веб-сайте. –