- 0
OSM Overpass API with PHP-SimpleXML :: workin with the the OSM-Endpoint
-
Recently Browsing 0 members
- No registered users viewing this page.
-
Posts
-
By Coat Hat · Posted
Since I watch on a lot of devices and use the music service, I enjoy it. Like if I was just on PC then yeah use adblock. But I'm on watching on my phone, iPad, and TV and not always on my WiFi. The price is getting a little nuts at this point though. -
By Southern Patriot · Posted
Happens EVERY TIME a new version of WMP-HC comes out and you download it in the first few days of release. Happens a lot with other program updates that get listed in the software section here as well. -
By LoneWolfSL · Posted
Hitman maker's first showcase will reveal its new James Bond game this week by Pulasthi Ariyasinghe IO Interactive is well known for its development of the Hitman series of stealth and assassination games. In a fitting twist, it was revealed back in 2020 that the studio has begun work on a James Bond game, and after years in development, it seems fans are finally getting a look at the project. Announced today, the project now has a title: 007 First Light. The brand-new game will be revealed in an exclusive showcase event. Coming in as the first ever IOI Showcase, it will be held on June 6 at 6pm PDT on the studio's own YouTube channel. "Join us for the first ever IOI SHOWCASE," said the studio in a social media post today. "Set your reminders and don't miss out on the exclusive reveals and information straight from the team!" Aside from 007 First Light information, the showcase will feature new content reveals for Hitman World of Assassination, the IO Interactive-published title MindsEye developed by Build a Rocket Boy, and more. The game is set to follow James Bond in his start as the MI6 special operative that everyone now knows him as. The origin story is said to be inspired by novels of Ian Fleming as well as the movie franchise, but it will be an original narrative by the developer. While we haven't even seen the game in action yet, IO Interactive CEO Hakan Abrak has already said that he hopes the game is successful enough to spawn a trilogy. "I don't want to speak too big about it, but I just hope we'll do a thing that will define James Bond in gaming for years to come," said Abrak last year. "And that is not only one game, but that we create a universe for gamers to own for many years to come that we can grow with that next to the Bond on the movies." While the studio hasn't revealed much more about 007 First Light since its original announcement, it has already been confirmed as coming for the Nintendo Switch 2 console. Other platforms have not been announced just yet, but it should land for PC, Xbox Series X|S, and PlayStation 5 consoles like the studio's other projects. -
By neufuse · Posted
good grief .... first brittney murphy in the first run now him -
By Bern@rd · Posted
I do not think that Windows 11 will pick up pace as October 2025 draws near. Even though I was a Windows Vista fan back in the day, this really reminds me of the (lack of) transition between Windows XP to Windows Vista. In the end, Microsoft had to backtrack and extend Windows XP support until Windows 7 was adopted.
-
-
Recent Achievements
-
Nullun earned a badge
Week One Done
-
sultangris earned a badge
First Post
-
sultangris earned a badge
Reacting Well
-
ClarkB earned a badge
First Post
-
Epaminombas earned a badge
Week One Done
-
-
Popular Contributors
-
Tell a friend
Question
tarifa
good day dear programmers, dear experts here at Neowin,
i am currently working on a parser that gets data via OSM Overpass API with PHP-SimpleXML. I am workin with the pretty new to the work with PHPSimpleXML so do not bear with me for askin newby questions. I am tryin to get data using Open Street Maps. I want to write a code that works with the endpoint of openstreetmap - and the given data is the starting point for further explorations. My tactic is as follows:
I fetch data from the openstreetmap-endpoint
1. i run requests to the openstreetmap-endpoint- (see below) and i try three different APIs per request isn't that easy on ressources and
2. I don't know how to work with the results that i gather from the OpenStreetmap-Endpoint
see the request:
This is derived from here: http://stackoverflow.com/questions/16129184/osm-data-parsing-to-get-the-nodes-with-child
I want to filter the data to get the nodes with special category. Here is sample of the OSM data I want to get the whole schools within an area. The first script runs well - but now i want to refine the search and add more tags. Finally i want to store all into the MySQL-db
So we need to make some XML parsing with PHP:
The following is a little OSM Overpass API example with PHP SimpleXML
The second part is more interesting. That is querying the XML data you have already. This is most easily done with xpath, the used PHP XML library is based on libxml which supports XPath 1.0 which covers the various querying needs very well. The following example lists all schools and tries to obtain their names as well. I have not covered translations yet because my sample data didn't have those, but you can also look for all kind of names including translations and just prefer a specific one):
The key point here are the xpath queries. Two are used, the first one to get the nodes that have certain tags. I think this is the most interesting one for you:
//node[tag[@k = "amenity" and @v = "school"]]
This line says: Give me all node elements that have a tag element inside which has the k attribute value "amenity" and the v attribute value "school". This is the condition you have to filter out those nodes that are tagged with amenity school. Further on xpath is used again, now relative to those school nodes to see if there is a name and if so to fetch it:
tag[@k = "name"]/@v'
This line says: Relative to the current node, give me the v attribute from a tag element that as the k attribute value "name". As you can see, some parts are again similar to the line before. I think you can both adopt them to your needs. Because not all school nodes have a name, a default string is provided for display purposes by adding it to the (then empty) result array:
list($name) = $school->xpath('tag[@k = "name"]/@v') + ['(unnamed)']; ^^^^^^^^^^^^^^^ Provide Default Value
so far so good: note. i need to have the adress-data, of the school with
cf http://wiki.openstreetmap.org/wiki/Key:addr
and even more important
cf http://wiki.openstreetmap.org/wiki/Key:contact
btw. here my results for that code-example:
martin@linux-70ce:~/php> martin@linux-70ce:~/php> php osm1.php Query returned 1691 node(s) and took 3.34569 seconds. 23 School(s) found: #00: ID:332534486 [39.5017565,16.2721899] Scuola Primaria #01: ID:1428094278 [39.3320912,16.1862820] (unnamed) #02: ID:1822746784 [38.9075566,16.5776597] (unnamed) #03: ID:1822755951 [38.9120272,16.5713431] (unnamed) #04: ID:1903859699 [38.6830409,16.5522243] Liceo Scientifico Statale A. Guarasci #05: ID:2002566438 [39.1349460,16.0736446] (unnamed) #06: ID:2056891127 [39.4106679,16.8254844] (unnamed) #07: ID:2056892999 [39.4124687,16.8286119] (unnamed) #08: ID:2272010226 [39.4481717,16.2894353] SCUOLA DELL'INFANZIA SAN FRANCESCO #09: ID:2272017152 [39.4502366,16.2807664] Scuola Media #10: ID:2358307794 [39.5015031,16.3905965] I.I.S.S. Liceo Statale V. Iulia #11: ID:2358307796 [39.4926280,16.3853662] Liceo Classico #12: ID:2358307797 [39.4973761,16.3858275] Scuola Media #13: ID:2358307800 [39.5015527,16.3941156] I.T.C. e per Geometri #14: ID:2358307801 [39.4983862,16.3807796] Istituto Professionale #15: ID:2358344885 [39.4854617,16.3832419] Istituto Tecnico Statale Commerciale G. Falcone martin@linux-70ce:~/php>
note. i need to have the adress-data, of the shool with
and even more important http://wiki.openstreetmap.org/wiki/Key:contact
How to add this .. into the query? and how to finally store all into the MySQL-db?
update: can i rework like so:
$xml = file_get_contents($url); $data = new SimpleXMLElement($xml); $data variable contains the following: SimpleXMLElement Object ( [@attributes] => Array ( [timestamp] => Sat, 15 Jun 13 20:02:13 +0000 [attribution] => Data Š OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright [querystring] => Bucharest-Romania [polygon] => false [exclude_place_ids] => 331526 [more_url] => http://nominatim.openstreetmap.org/search?format=xml&exclude_place_ids=331526&q=Bucharest-Romania ) [place] => SimpleXMLElement Object ( [@attributes] => Array ( [place_id] => 331526 [osm_type] => node [osm_id] => 96209423 [place_rank] => 15 [boundingbox] => 44.4361381530762,44.4361419677734,26.1027431488037,26.1027450561523 [lat] => 44.436139 [lon] => 26.1027436 [display_name] => BucureČti, Sector 2, Bucuresti, România, European Union [class] => place [type] => city [importance] => 0.73231672860554 [icon] => http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png ) ) )
dear friends, look forward to hear from you
Link to comment
https://www.neowin.net/forum/topic/1389708-osm-overpass-api-with-php-simplexml-workin-with-the-the-osm-endpoint/Share on other sites
3 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now