Получение координат полигона очерчивающего районы Вологодской области
Ну или собственно легко адаптировать под любую область.

Одной и задач явилось отрисовывание контуров районов Вологодской области на карте. Для этого нужно знать координаты точек полигона очерчивающего районы. Через API Яндекс.Карты возможно получить только полигоны областей, а не районов. Поэтому было принято решение вытянуть координаты точек из OpenStreetMap. Из нюансов:
- Обязательно нужно указывать UserAgent — иначе сервис забанит
- Ограничение — 1 запрос в секунду. Именно поэтому координаты «складируем» в файлы для последующего использования, а не вытягиваем «на лету»
- Координаты в OpenStreetMap хранятся «наоборот», а не как в Яндексе, поэтому сразу «переворачиваем»
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <?php  function GetAreaPolygon($region,$area,$filename){             $address= urlencode($region.",".$area);             $rul="https://nominatim.openstreetmap.org/search?q=".$address."&format=json&polygon_geojson=1&limit=2";             var_dump($rul);             $ch = curl_init($rul);             $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';             curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);             curl_setopt($ch, CURLOPT_REFERER, 'https://укмцукму.ru/');             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);             curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));             $res_curl=curl_exec($ch);             $res=json_decode($res_curl);             if ($res!=null){                 $geo=$res[0]->geojson->coordinates;                 // переворачиваем координаты..                 foreach ($geo as &$coors) {                     foreach ($coors as &$coor) {                         $tmp=$coor[0];                         $coor[0]=$coor[1];                         $coor[1]=$tmp;                     };                 };                 file_put_contents($filename,json_encode($geo));             };             sleep(2); //делаем паузу, чтоб не забанили  }     GetAreaPolygon("Вологодская область","Вологодский район","1.json");     GetAreaPolygon("Вологодская область","Бабаевский район","2.json");     GetAreaPolygon("Вологодская область","Бабушкинский район","3.json");     GetAreaPolygon("Вологодская область","Белозерский район","4.json");     GetAreaPolygon("Вологодская область","Вашкинский район","5.json");     GetAreaPolygon("Вологодская область","Великоустюгский район","6.json");     GetAreaPolygon("Вологодская область","Верховажский район","7.json");     GetAreaPolygon("Вологодская область","Вожегодский район","8.json");     GetAreaPolygon("Вологодская область","Вытегорский район","9.json");     GetAreaPolygon("Вологодская область","Грязовецкий район","10.json");     GetAreaPolygon("Вологодская область","Кадуйский район","11.json");     GetAreaPolygon("Вологодская область","Кирилловский район","12.json");     GetAreaPolygon("Вологодская область","Кичменгско-Городецкий район","13.json");     GetAreaPolygon("Вологодская область","Междуреченский район","14.json");     GetAreaPolygon("Вологодская область","Никольский район","15.json");     GetAreaPolygon("Вологодская область","Нюксенский район","16.json");     GetAreaPolygon("Вологодская область","Сокольский район","17.json");     GetAreaPolygon("Вологодская область","Сямженский район","18.json");     GetAreaPolygon("Вологодская область","Тарногский район","19.json");     GetAreaPolygon("Вологодская область","Тотемский район","20.json");     GetAreaPolygon("Вологодская область","Усть-Кубинский район","21.json");     GetAreaPolygon("Вологодская область","Устюженский район","22.json");     GetAreaPolygon("Вологодская область","Харовский район","23.json");     GetAreaPolygon("Вологодская область","Чагодощенский район","24.json");     GetAreaPolygon("Вологодская область","Череповецкий район","25.json");     GetAreaPolygon("Вологодская область","Шекснинский район","26.json"); ?> | 
Сохранив файлы, отрисуем районы на карте:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <script src="https://api-maps.yandex.ru/2.1/?lang=RU_ru&apikey=<?=$config->api_map?>" type="text/javascript"></script>     <div id="map"></div> <script>  ymaps.ready(init);  function GetAreaPolygon(region,area,filename,fillcolor){     var url = "https://eуцкацукаc/areas/"+filename;     $.getJSON(url, {})     .then(function (data) {             var p = new ymaps.Polygon(             data,             {               hintContent: area                },             {                 fillColor: fillcolor,                 strokeColor: '#0000FF',                 opacity: 0.2,                 strokeWidth: 2,                 strokeStyle: 'shortdash'             }                                         );     myMap.geoObjects.add(p);                                                             });       }  function init () {     latitude=59.2084992;     longitude=39.8491648;     myMap = new ymaps.Map('map', {         center: [latitude, longitude],          controls: ['routeButtonControl','geolocationControl'],         zoom: 7,     }, {         searchControlProvider: 'yandex#search',         geoObjectBalloonAutoPan: false,         geoObjectBalloonPanelMaxMapArea: Infinity,         balloonPanelMaxMapArea: Infinity // балун-всегда панель - проблема с наложением надписи "Открыть на яндекс картах", из-за динамической загрузки     });     GetAreaPolygon("Вологодская область","Вологодский район","1.json","#FF0000");     GetAreaPolygon("Вологодская область","Бабаевский район","2.json","#dcec3c");     GetAreaPolygon("Вологодская область","Бабушкинский район","3.json","#3c9cec");     GetAreaPolygon("Вологодская область","Белозерский район","4.json","#ec813c");     GetAreaPolygon("Вологодская область","Вашкинский район","5.json","#ca5784");     GetAreaPolygon("Вологодская область","Великоустюгский район","6.json","#57cab2");     GetAreaPolygon("Вологодская область","Верховажский район","7.json","#467623");     GetAreaPolygon("Вологодская область","Вожегодский район","8.json","#764923");     GetAreaPolygon("Вологодская область","Вытегорский район","9.json","#236c76");     GetAreaPolygon("Вологодская область","Грязовецкий район","10.json","#3eb9ca");     GetAreaPolygon("Вологодская область","Кадуйский район","11.json","#4fca3e");     GetAreaPolygon("Вологодская область","Кирилловский район","12.json","#cab13e");     GetAreaPolygon("Вологодская область","Кичменгско-Городецкий район","13.json","#e47694");     GetAreaPolygon("Вологодская область","Междуреченский район","14.json","#e176e4");     GetAreaPolygon("Вологодская область","Никольский район","15.json","#7694e4");     GetAreaPolygon("Вологодская область","Нюксенский район","16.json","#76e4e4");     GetAreaPolygon("Вологодская область","Сокольский район","17.json","#76e4af");     GetAreaPolygon("Вологодская область","Сямженский район","18.json","#80e476");     GetAreaPolygon("Вологодская область","Тарногский район","19.json","#b2e476");     GetAreaPolygon("Вологодская область","Тотемский район","20.json","#e4a576");     GetAreaPolygon("Вологодская область","Усть-Кубинский район","21.json","#e48676");     GetAreaPolygon("Вологодская область","Устюженский район","22.json","#e4768a");     GetAreaPolygon("Вологодская область","Харовский район","23.json","#d776e4");     GetAreaPolygon("Вологодская область","Чагодощенский район","24.json","#a876e4");     GetAreaPolygon("Вологодская область","Череповецкий район","25.json","#76dae4");     GetAreaPolygon("Вологодская область","Шекснинский район","26.json","#FF0000"); }; </script>  |