Я использую Overpass Turbo для отображения информации на карте.
Часть моего кода (я использую PHP) выглядит следующим образом:
//overpass query
$overpass = 'http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)->.searchArea;(node["amenity"="drinking_water"](area.searchArea););out;';
// collecting results in JSON format
$html = file_get_contents($overpass);
$jsonout = json_decode($html);
// this line just checks what the query would give as output
var_dump($jsonout);
Результаты запроса в формате JSON (вот что var_dump
показывает) выглядит так:
version: 0.6
generator: "Overpass API"osm3s:
timestamp_osm_base: "2017-11-03T06:25:02Z"timestamp_areas_base: "2017-11-03T05:45:02Z"copyright: "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."elements:
0:
type: "node"id: 254917402
lat: 46.0672187
lon: 11.1379545
tags:
amenity: "drinking_water"1:
type: "node"id: 257481472
lat: 46.0687113
lon: 11.1201097
tags:
amenity: "drinking_water"
и так далее.
Вы можете увидеть это самостоятельно, скопировав / вставив URL-адрес запроса в вашем браузере: http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)-%3E.searchArea;(node[%22amenity%22=%22drinking_water%22](area.searchArea) ;);из;
Как видите, каждый element
в массиве выше есть широта а также долгота Информация. Мне нужны те, чтобы показать маркеры на карте.
я не способен изолировать lat
а также lon
информация от каждого элемента в массиве. Как я могу это сделать?
Ну вот:
<?php
// overpass query
$overpass = 'http://overpass-api.de/api/interpreter?data=[out:json];area(3600046663)->.searchArea;(node["amenity"="drinking_water"](area.searchArea););out;';
// collecting results in JSON format
$html = file_get_contents($overpass);
$result = json_decode($html, true); // "true" to get PHP array instead of an object
// elements key contains the array of all required elements
$data = $result['elements'];
foreach($data as $key => $row) {
// latitude
$lat = $row['lat'];
// longitude
$lng = $row['lon'];
}
?>
Других решений пока нет …