Ну или собственно легко адаптировать под любую область.
Одной и задач явилось отрисовывание контуров районов Вологодской области на карте. Для этого нужно знать координаты точек полигона очерчивающего районы. Через API Яндекс.Карты возможно получить только полигоны областей, а не районов. Поэтому было принято решение вытянуть координаты точек из OpenStreetMap. Из нюансов:
- Обязательно нужно указывать UserAgent — иначе сервис забанит
- Ограничение — 1 запрос в секунду. Именно поэтому координаты «складируем» в файлы для последующего использования, а не вытягиваем «на лету»
- Координаты в OpenStreetMap хранятся «наоборот», а не как в Яндексе, поэтому сразу «переворачиваем»
<?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");
?>
Сохранив файлы, отрисуем районы на карте:
<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>