Как получить координаты границ районов

Здравствуйте,

Использовал пример отсюда http://zabolotskikh.com/tips/kak-poluchit-koordinaty-rayonov/

делаю запрос

$response = json_decode(curl('https://nominatim.openstreetmap.org/search?format=json&q=' . urlencode($f['name'] . ', ' . $f['city']) . '&polygon_geojson=1'), true);

в результате вываливается,

3 результата, но границ среди нет.

Как из получить?

мне нужны границы всех районов городов России, чтоб потом проверять находится ли определенный дом внутри района.

Странно как ту все работает, создал пост а он не опубликовался

скажите получить координаты границ районов Москвы не выходит полностью их получить, неткорые появились, но на многие не выходит. Может у кого есть выгрузка границ всех районов границ городов России, очень нужно.

использовал следующий код.

$sql = '
	SELECT
		*
	FROM
		`hi_district`
	WHERE
		`status` = "1" AND
		`region` != "0" AND
		`name` LIKE "Северное Тушино"
	ORDER BY
		`id` ASC';
	$r = $db->query($sql);
if ($db->numrows($r) > 0) {
	while ($f = $db->fetcharray($r)) {
		$response = json_decode(curl('https://nominatim.openstreetmap.org/search?format=json&q=' . urlencode($f['name'] . ', ' . $f['city']) . '&polygon_geojson=1'), true);
		//print_r (curl('https://nominatim.openstreetmap.org/search?format=json&q=' . urlencode($f['name'] . ' район, ' . $f['city']) . '&polygon_geojson=1'));
		print_r ($response);
		$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);
			}
		}
		if ($result) {
			if(get_lvl($result) >= 3) {
				$f['boundary'] = $result[0];
			}
			else {
				$f['boundary'] = $result;	
			}
			$sql = '
				UPDATE
					`hi_district`
				SET
					`boundary` = "' . serialize($f['boundary']) . '"
				WHERE
					`id`	= "' . $f['id'] . '"';
			$db->query($sql);
			print_r($f['boundary']);
		}
	}
    //echo '<meta http-equiv="refresh" content="1; url=' . URL . '/service/get_district.php?page=' . $_GET['page'] . '">';
    exit();
}
else {
    echo '<br />Done';
}

Напримерно не могу получить границы “Северное Тушино, Москва”

может быть изза того что Северное Тушино не фоормлено как city если судить по запросу в номинатим ??
https://www.openstreetmap.org/relation/445279
и запрос “Северное тушино city”
https://nominatim.openstreetmap.org/search.php?q=%D0%A1%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5+%D0%A2%D1%83%D1%88%D0%B8%D0%BD%D0%BE+city&polygon_geojson=1&viewbox=
не находит площадного объекта.

вам бы в апи номинатима немного разобраться.

и почему когда я захожу сюда не вижу координат границ, я бы мог руками все вытащить, прям так обидно, что не делают сервис не удобным, по идее должен быть поиск по городам по районам и тп. Может есть укого нормальная истрация как развернуть все это дело локально может от туда смогу вытащить. 3 день мучаюсь.

https://nominatim.openstreetmap.org/details.php?osmtype=R&osmid=445279&class=boundary

https://nominatim.org/release-docs/develop/api/Search/

вот с таким параметром тоже не работает границы не получает, а точка мне нужна

city=Москва

Это геокодер, он не выдаёт наружу границы. Он работает в адресом или точечной координатой.
Скачайте дамп ОСМ и извлекайте границу самостоятельное.
https://download.geofabrik.de/russia.html

есть такая подборка
https://osm-boundaries.com/
или так
http://atd.openstreetmap.ru/r446092.html

Там все не рабочее, не понятно зачем и почему они это создали(( хрень какая-то границ то нету

Объясните как вот это работает

https://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

Я таким образом на часть большую часть районов смог получить координаты границы, но другую часть не смог. Проблема явно не во мне.

У меня получилось скачать набор границ с сайта https://osm-boundaries.com/.

Также для отдельного города можно посмотреть/скачать границы районов через overpass-api, например для Москвы:


[out:json][timeout:600];
area(id:3600102269) ->.a;  // 102269 - это OSM id отношения границы Москвы
rel[boundary=administrative][admin_level=5](area.a);
out geom;

Для всей страны не потянет, да и admin_level у районов разных городов разный. Но так можно вытащить id-шники (в конце не “out geom;”, а просто “out;” или “out id;”), а геометрию каким-то другим методом (“osmconvert -B” + osmfilter, http://polygons.openstreetmap.fr/)).

Но, кажется, в масштабах страны более перспективно osmfilter+osm2pgsql и работа напрямую с базой.

Как все сложно, блин я даже купить не могу готовые данные, так все хреново. Пожалуйста продайте мне кто нибудь готовые данные. Или предоставьте платный доступ где данные можно на постоянной основе извлекать, заибало. Ни для людей все делают. Я хоть и программист, но у меня уже руки опускаются.

дык, осм не готовый сервис, а универсальный набор данных…
nexgis.ru наверное тогда

https://data.nextgis.com/ru/region/RU/#region-layers

Papuas, Мат запрещён. Это предупреждение.

там нету данных я звонил им 30 минут, они просят 100 000 руб. да и то без гарантии результатов.

  1. данные есть, 25913 единиц АТД по РФ
  2. они просят не 100тр, а 12тр (вся РФ, АТД Москвы - 150р)
  3. звонить не обязательно, все можно купить через сайт

https://data.nextgis.com/ru/region/RU/

1 Like

12 000 это же кот в мешке, проверить нет возможности

  1. проверить есть большое количество возможностей

За select из postgis ?
охренеть.
впрочем если лузеры платят …

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