php Пример скрипта запроса для получения координат условных "центров" регионов РФ (код для API Яндекс геокодирование)

Как-то так:
(в примере ниже для "Ханты-Мансийский АО — Югра" пришлось использовать псевдоним -- яндекс показывал что-то невнятное)

<?php

$regions =
 [		
    ['name' => "Удмуртская республика"],
    ['name' => "Чувашская республика"],
    ['name' => "Алтайский край"],
    ['name' =>  "Амурская область"],
    ['name' =>  "Архангельская область"],
    ['name' =>  "Астраханская область"],
    ['name' =>  "Белгородская область"],
    ['name' =>  "Брянская область"],
    ['name' =>  "Владимирская область"],
    ['name' => "Волгоградская область"],
    ['name' =>  "Вологодская область"],
    ['name' =>  "Воронежская область"],
    ['name' =>  "Город Санкт-Петербург"],
    ['name' => "Город Севастополь"],
    ['name' =>  "Еврейская автономная область"],
    ['name' =>  "Забайкальский край"],
    ['name' => "Ивановская область"],
    ['name' => "Иркутская область"],
    ['name' =>  "Кабардино-Балкарская Республика"],
    ['name' => "Калининградская область"],
    ['name' => "Калужская область"],
    ['name' => "Камчатский край"],
    ['name' => "Карачаево-Черкесская Республика"],
    ['name' => "Кемеровская область"],
    ['name' => "Кировская область"],
    ['name' =>  "Костромская область"],
    ['name' =>  "Краснодарский край"],
    ['name' => "Красноярский край"],
    ['name' =>  "Курганская область"],
    ['name' => "Курская область"],
    ['name' =>  "Ленинградская область"],
    ['name' =>  "Липецкая область"],
    ['name' => "Магаданская область"],
    ['name' =>  "Москва"],
    ['name' =>  "Московская область"],
    ['name' =>  "Мурманская область"],
    ['name' => "Ненецкий автономный округ"],
    ['name' =>  "Нижегородская область"],
    ['name' =>  "Новгородская область"],
    ['name' =>  "Новосибирская область"],
    ['name' => "Омская область"],
    ['name' =>  "Оренбургская область"],
    ['name' => "Орловская область"],
    ['name' =>  "Пензенская область"],
    ['name' => "Пермский край"],
    ['name' =>  "Приморский край"],
    ['name' =>  "Псковская область"],
    ['name' =>  "Республика Адыгея"],
    ['name' => "Республика Алтай"],
    ['name' =>  "Республика Башкортостан"],
    ['name' =>  "Республика Бурятия"],
    ['name' =>  "Республика Дагестан"],
    ['name' =>  "Республика Ингушетия"],
    ['name' => "Республика Калмыкия"],
    ['name' => "Республика Карелия"],
    ['name' => "Республика Коми"],
    ['name' => "Республика Крым"],
    ['name'  =>  "Республика Марий Эл"],
    ['name' => "Республика Мордовия"],
    ['name' => "Республика Саха(Якутия)"],
    ['name' => "Республика Северная Осетия-Алания"],
    ['name' => "Республика Татарстан"],
    ['name'  =>  "Республика Тыва"],
    ['name' => "Республика Хакасия"],
    ['name' => "Ростовская область"],
    ['name' => "Рязанская область"],
    ['name'  =>  "Самарская область"],
    ['name' => "Саратовская область"],
    ['name' => "Сахалинская область"],
    ['name' => "Свердловская область"],
    ['name' => "Смоленская область"],
    ['name' => "Ставропольский край"],
    ['name' => "Тамбовская область"],
    ['name' => "Тверская область"],
    ['name' => "Томская область"],
    ['name' => "Тульская область"],
    ['name' => "Тюменская область"],
    ['name' => "Ульяновская область"],
    ['name' => "Хабаровский край"],
    ['name' => "Ханты-Мансийский АО — Югра", 'ya-name' => "Ханты-Мансийский АО"],
    ['name' => "Челябинская область"],
    ['name' => "Чеченская Республика"],
    ['name' => "Чукотский АО"],
    ['name' => "Ямало-Ненецкий АО"],
    ['name' => "Ярославская область"],
 ];

$placesWithCoords = [];
$i = 0;
foreach ($regions as $region) {
    $placesWithCoords[$i]['name'] = $region['name'];
    $searchName = $region['name'];
    if (!empty($region['ya-name'])) { // всё-таки некоторые имена пришлось задать руками
        $searchName = $region['ya-name'];
    }
    
    $placesWithCoords[$i]['coords'] = getCoords($searchName); 
    
    $i++;
    msleep(0.2);
}

echo '<br> Резулmтат:<br>';
foreach ($placesWithCoords  as $place) {
    echo $place['coords']['la'] . ' '
            .  $place['coords']['lo'] . ' '
            .  $place['name']
            . '<br>';
    
}


/**
 * Получит координаты места (точки) с помощью 
 * сервиса геокодирования Яндекса
 * 
 * @param string $placeName  Имя места 
 * @return array массив вида:
 * ['la' => , 'lo' => ]  -- широта и долгода
 */
function getCoords($placeName)
{
    $response = json_decode(file_get_contents('https://geocode-maps.yandex.ru/1.x/?form...' 
            . $placeName));
    $coordsStr = $response->response->
        GeoObjectCollection
        ->featureMember[0]
        ->GeoObject
        ->Point
        ->pos;
    //echo $coordsStr;

    $coords = explode(' ', $coordsStr);
    
    return [
        'la' => $coords[1],
        'lo' => $coords[0],
    ];
}

function msleep($time)
{
    usleep($time * 1000000);
}


Результат работы скрипта см. ниже в комментариях.

vedro-compota's picture

После запуска скрипта выше получили следующее:

широта      долгота     название региона

57.166784 52.796972 Удмуртская республика
55.492023 47.086875 Чувашская республика
52.129671 82.530013 Алтайский край
53.413341 127.728064 Амурская область
63.637517 43.336661 Архангельская область
46.851463 47.466189 Астраханская область
50.872231 37.303198 Белгородская область
52.909192 33.422197 Брянская область
56.013588 40.679166 Владимирская область
49.615821 44.151406 Волгоградская область
60.138988 44.049618 Вологодская область
50.970898 40.233395 Воронежская область
59.939095 30.315868 Город Санкт-Петербург
44.616687 33.525432 Город Севастополь
48.522902 132.257612 Еврейская автономная область
52.847258 116.200424 Забайкальский край
56.989772 41.554071 Ивановская область
57.100294 106.363305 Иркутская область
43.494396 43.408274 Кабардино-Балкарская Республика
54.754365 21.22993 Калининградская область
54.3718 35.445185 Калужская область
61.350179 169.782981 Камчатский край
43.770947 41.753928 Карачаево-Черкесская Республика
54.779047 87.207361 Кемеровская область
58.679946 49.830366 Кировская область
58.456003 43.788495 Костромская область
45.272365 38.951409 Краснодарский край
67.236779 95.968477 Красноярский край
55.448347 64.809405 Курганская область
51.680369 36.104872 Курская область
59.337013 29.608975 Ленинградская область
52.644554 39.149784 Липецкая область
62.575815 154.036835 Магаданская область
55.753215 37.622504 Москва
55.815792 37.380031 Московская область
67.250244 38.313668 Мурманская область
67.714212 54.365062 Ненецкий автономный округ
56.312764 44.611891 Нижегородская область
58.307715 32.490222 Новгородская область
55.582396 79.264861 Новосибирская область
56.103472 73.344416 Омская область
52.743528 53.498682 Оренбургская область
52.781455 36.481042 Орловская область
53.1824 44.634151 Пензенская область
59.117698 56.225679 Пермский край
45.04198 134.709375 Приморский край
57.236486 29.236911 Псковская область
44.429866 40.252969 Республика Адыгея
50.73624 87.015454 Республика Алтай
54.2715 56.525537 Республика Башкортостан
54.544222 112.348699 Республика Бурятия
42.259793 47.095742 Республика Дагестан
43.10359 45.054581 Республика Ингушетия
46.414024 45.325701 Республика Калмыкия
63.621324 33.232608 Республика Карелия
64.125463 54.789669 Республика Коми
45.389194 33.993751 Республика Крым
56.577278 47.936763 Республика Марий Эл
54.246692 45.063654 Республика Мордовия
65.061073 119.845652 Республика Саха(Якутия)
43.092669 44.262033 Республика Северная Осетия-Алания
55.350336 50.911013 Республика Татарстан
51.584332 94.793085 Республика Тыва
53.386357 89.897078 Республика Хакасия
47.728732 41.268128 Ростовская область
54.333363 40.62524 Рязанская область
53.27635 50.463301 Самарская область
51.578529 46.797223 Саратовская область
50.150926 142.750797 Сахалинская область
58.586755 61.530761 Свердловская область
54.956192 32.998543 Смоленская область
44.953551 43.344521 Ставропольский край
52.680864 41.587183 Тамбовская область
57.093033 34.706195 Тверская область
58.949193 78.63728 Томская область
53.888064 37.575693 Тульская область
57.541821 68.096045 Тюменская область
54.122616 48.15155 Ульяновская область
60.567116 143.008928 Хабаровский край
61.588912 65.897508 Ханты-Мансийский АО — Югра
54.446199 60.395641 Челябинская область
43.305784 45.747667 Чеченская Республика
65.982613 174.432311 Чукотский АО
66.086435 80.005397 Ямало-Ненецкий АО
57.817361 39.105138 Ярославская область

Или в виде php-массива:

$coords = [
	[57.166784, 52.796972, 'Удмуртская республика'],
	[55.492023, 47.086875, 'Чувашская республика'],
	[52.129671, 82.530013, 'Алтайский край'],
	[53.413341, 127.728064, 'Амурская область'],
	[63.637517, 43.336661, 'Архангельская область'],
	[46.851463, 47.466189, 'Астраханская область'],
	[50.872231, 37.303198, 'Белгородская область'],
	[52.909192, 33.422197, 'Брянская область'],
	[56.013588, 40.679166, 'Владимирская область'],
	[49.615821, 44.151406, 'Волгоградская область'],
	[60.138988, 44.049618, 'Вологодская область'],
	[50.970898, 40.233395, 'Воронежская область'],
	[59.939095, 30.315868, 'Город Санкт-Петербург'],
	[44.616687, 33.525432 , 'Город Севастополь'],
	[48.522902, 132.257612, 'Еврейская автономная область'],
	[52.847258, 116.200424, 'Забайкальский край'],
	[56.989772, 41.554071, 'Ивановская область'],
	[57.100294, 106.363305, 'Иркутская область'],
	[43.494396, 43.408274, 'Кабардино-Балкарская Республика'],
	[54.754365, 21.22993, 'Калининградская область'],
	[54.3718, 35.445185, 'Калужская область'],
	[61.350179, 169.782981, 'Камчатский край'],
	[43.770947, 41.753928 , 'Карачаево-Черкесская Республика'],
	[54.779047, 87.207361, 'Кемеровская область'],
	[58.679946, 49.830366, 'Кировская область'],
	[58.456003, 43.788495, 'Костромская область'],
	[45.272365, 38.951409, 'Краснодарский край'],
	[67.236779, 95.968477, 'Красноярский край'],
	[55.448347, 64.809405, 'Курганская область'],
	[51.680369, 36.104872, 'Курская область'],
	[59.337013, 29.608975, 'Ленинградская область'],
	[52.644554, 39.149784, 'Липецкая область'],
	[62.575815, 154.036835, 'Магаданская область'],
	[55.753215, 37.622504, 'Москва'],
	[55.815792, 37.380031, 'Московская область'],
	[67.250244, 38.313668, 'Мурманская область'],
	[67.714212, 54.365062, 'Ненецкий автономный округ'],
	[56.312764, 44.611891, 'Нижегородская область'],
	[58.307715, 32.490222, 'Новгородская область'],
	[55.582396, 79.264861, 'Новосибирская область'],
	[56.103472, 73.344416, 'Омская область'],
	[52.743528, 53.498682, 'Оренбургская область'],
	[52.781455, 36.481042, 'Орловская область'],
	[53.1824, 44.634151, 'Пензенская область'],
	[59.117698, 56.225679, 'Пермский край'],
	[45.04198, 134.709375, 'Приморский край'],
	[57.236486, 29.236911, 'Псковская область'],
	[44.429866, 40.252969, 'Республика Адыгея'],
	[50.73624, 87.015454, 'Республика Алтай'],
	[54.2715, 56.525537, 'Республика Башкортостан'],
	[54.544222, 112.348699, 'Республика Бурятия'],
	[42.259793, 47.095742, 'Республика Дагестан'],
	[43.10359, 45.054581, 'Республика Ингушетия'],
	[46.414024, 45.325701, 'Республика Калмыкия'],
	[63.621324, 33.232608, 'Республика Карелия'],
	[64.125463, 54.789669, 'Республика Коми'],
	[45.389194, 33.993751, 'Республика Крым'],
	[56.577278, 47.936763, 'Республика Марий Эл'],
	[54.246692, 45.063654 , 'Республика Мордовия'],
	[65.061073, 119.845652, 'Республика Саха(Якутия)'],
	[43.092669, 44.262033, 'Республика Северная Осетия-Алания'],
	[55.350336, 50.911013, 'Республика Татарстан'],
	[51.584332, 94.793085, 'Республика Тыва'],
	[53.386357, 89.897078, 'Республика Хакасия'],
	[47.728732, 41.268128, 'Ростовская область'],
	[54.333363, 40.62524, 'Рязанская область'],
	[53.27635, 50.463301, 'Самарская область'],
	[51.578529, 46.797223, 'Саратовская область'],
	[50.150926, 142.750797, 'Сахалинская область'],
	[58.586755, 61.530761, 'Свердловская область'],
	[54.956192, 32.998543, 'Смоленская область'],
	[44.953551, 43.344521, 'Ставропольский край'],
	[52.680864, 41.587183, 'Тамбовская область'],
	[57.093033, 34.706195, 'Тверская область'],
	[58.949193, 78.63728 , 'Томская область'],
	[53.888064, 37.575693, 'Тульская область'],
	[57.541821, 68.096045, 'Тюменская область'],
	[54.122616, 48.15155, 'Ульяновская область'],
	[60.567116, 143.008928, 'Хабаровский край'],
	[61.588912, 65.897508 , 'Ханты-Мансийский АО — Югра'],
	[54.446199, 60.395641, 'Челябинская область'],
	[43.305784, 45.747667 , 'Чеченская Республика'],
	[65.982613, 174.432311, 'Чукотский АО'],
	[66.086435, 80.005397, 'Ямало-Ненецкий АО'],
	[57.817361, 39.105138, 'Ярославская область'],
];

_____________
матфак вгу и остальная классика =)