четверг, 25 августа 2016 г.

Получаем координаты районов с помощью API OSM

Итак, всё до безобразия просто, делаем запрос:
http://nominatim.openstreetmap.org/search?format=json&q=%D0%9A%D1%80%D0%BE%D0%BD%D1%88%D1%82%D0%B0%D0%B4%D1%82%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B9%D0%BE%D0%BD,%20%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3&polygon_geojson=1
Всё  Получаем в ответ geojson (массив с географическими координатами) и делаем с ним что хотим.
Например, я решил обработать его в несколько ином виде, чтобы скармливать Яндекс.Картам. Для этого я накидал простеньку функцию на PHP:
function areaCoordsParser($search)
{
    $query = http_build_query([
        'format' => 'json',
        'q' => $search,
        'polygon_geojson' => 1,
    ]);
    $url = "http://nominatim.openstreetmap.org/search?$query";
    $response = json_decode(file_get_contents($url), true);
    $result = [];
    if ($response[0]['geojson']['type'] === 'MultiPolygon') {
        $coords = $response[0]['geojson']['coordinates'];
        foreach ($coords as $coord) {
            $temp = [];
            foreach ($coord[0] as $item) {
                $temp[] = array_reverse($item);
            }
            $result[] = $temp;
        }
    } elseif ($response[0]['geojson']['type'] === 'Polygon') {
        $coords = $response[0]['geojson']['coordinates'][0];
        foreach ($coords as $coord) {
            $result[] = array_reverse($coord);
        }
    }
    return $result;
}
echo json_encode(areaCoordsParser('Адмиралтейский район, Санкт-Петербург'));
Источник - http://zabolotskikh.com/tips/kak-poluchit-koordinaty-rayonov/