creating a osm newby-search within a plugin – find x near x
-
can we create a wordpress-plugin that offers the output of the following data …:the data of a a Neaby-search:
Can we create a quewry that shows up all the schools that are in the near – in other words
- (it is a area search) how to perform a search – for https://www.overpass-turbo.eu :
example: what i am after. how to create a request to find all the schools – in the area of – let us say munich -in a radius of 10 km for example!?
eg like so: first of all see the intened osm – nearby-search that runs against the overpass-Turbo.eu -API – the idea of a “Nearby Schools Widget”
a output that shows all the schools around a certain point – or in other words; all in Munich – in a area /(radius) of let us say 10 kilometers can we create a query that works on Overpass-turbo.eu
[out:csv(::id,::type,::lon,::lat,amenity,name,"addr:postcode","addr:city","addr:street","addr:housenumber","contact:website",website,"contact:email")] [timeout:600]; area[name="München"]; nwr(area)[name="Marienplatz"]; nwr"amenity"="school"; out center;
it gives back the results
@id @type @lon @lat amenity name addr:postcode addr:city addr:street addr:housenumber contact:website website contact:email 312793352 node 11.5815046 48.1322045 school Schulverbund München 80469 München Kohlstra?e 5 https://www.schulverbund.de/ 703266518 node 11.5746643 48.1387135 school EAM School of International Business https://eam-muenchen.com/ 1096318121 node 11.5827303 48.1368214 school Otto-Falckenberg-Schule 80539 München Stollbergstra?e 7a https://www.otto-falckenberg-schule.de/ 1096318127 node 11.5822067 48.1376239 school Otto-Falckenberg-Schule 80539 München Falckenbergstra?e 2 https://www.otto-falckenberg-schule.de/ 1142514805 node 11.5665710 48.1353750 school Evangelisches Bildungszentrum 80331 München Herzog-Wilhelm-Stra?e 24 https://www.stadtakademie-muenchen.de/ [email protected] 1576527684 node 11.5728245 48.1336093 school Theresia-Gerhardinger-Grundschule am Anger https://gs-am-anger.de/ 1576528339 node 11.5721671 48.1333479 school Theresia-Gerhardinger-Gymnasium am Anger https://www.tggaa.de/ 2493656150 node 11.5814603 48.1366835 school F?rderschule an der Herrnstra?e 80539 München Herrnstra?e 21 https://stadt.muenchen.de/service/info/sonderpaedagogisches-foerderzentrum-muenchen-mitte-2-herrnstr-21/1060084/ 2654727020 node 11.5812823 48.1365482 school Grundschule an der Herrnstra?e
Create the WordPress Plugin Structure: Set up the basic structure of your WordPress plugin, including a main PHP file and any additional files or folders you may need.
Register the Widget: Define a custom widget class that extends the WP_Widget class provided by WordPress.
Implement the Widget Logic: Within your custom widget class, implement the logic to retrieve data from the Overpass API and format it for display.
Display the Widget: Register a callback function to output the widget content, including any HTML markup necessary to display the data.
Here’s a basic approach of the intended steps:
<??php /* Plugin Name: osm Nearby Schools Widget Description: Widget to display nearby schools using Overpass API. Version: 0.9 Author: osm-fan */ // Step 2: well - first of all - we ought to register the Widget propperly class Nearby_Schools_Widget extends WP_Widget { // Constructor public function __construct() { parent::__construct( 'nearby_schools_widget', // Base ID 'Nearby Schools Widget', // Name array( 'description' => 'Displays nearby schools using Overpass API' ) // Args ); } // Step 4: we ought to display the Widget public function widget( $args, $instance ) { // Widget output echo $args['before_widget']; echo $args['before_title'] . 'Nearby Schools' . $args['after_title']; echo '<ul>'; // Step 3: Implement the Widget Logic $schools = $this->get_nearby_schools(); foreach ($schools as $school) { echo '<li>' . $school->name . '</li>'; } echo '</ul>'; echo $args['after_widget']; } // Step 3: here we implement the Widget Logic private function get_nearby_schools() { $url = 'https://overpass-api.de/api/interpreter'; $data = array( 'data' => '[out:json][timeout:25];(node["amenity"="school"](around:10000,48.1351,11.5820););out;', ); $response = wp_remote_post( $url, array( 'body' => $data, ) ); if ( is_wp_error( $response ) ) { return array(); } $body = wp_remote_retrieve_body( $response ); $schools = json_decode( $body ); return $schools->elements; } <??php /* Plugin Name: osm Nearby Schools Widget Description: Widget to display nearby schools using Overpass API. Version: 0.9 Author: osm-fan */ // Step 2: well - first of all - we ought to register the Widget propperly class Nearby_Schools_Widget extends WP_Widget { // Constructor public function __construct() { parent::__construct( 'nearby_schools_widget', // Base ID 'Nearby Schools Widget', // Name array( 'description' => 'Displays nearby schools using Overpass API' ) // Args ); } // Step 4: we ought to display the Widget public function widget( $args, $instance ) { // Widget output echo $args['before_widget']; echo $args['before_title'] . 'Nearby Schools' . $args['after_title']; echo '<ul>'; // Step 3: Implement the Widget Logic $schools = $this->get_nearby_schools(); foreach ($schools as $school) { echo '<li>' . $school->name . '</li>'; } echo '</ul>'; echo $args['after_widget']; } // Step 3: here we implement the Widget Logic private function get_nearby_schools() { $url = 'https://overpass-api.de/api/interpreter'; $data = array( 'data' => '[out:json][timeout:25];(node["amenity"="school"](around:10000,48.1351,11.5820););out;', ); $response = wp_remote_post( $url, array( 'body' => $data, ) ); if ( is_wp_error( $response ) ) { return array(); } $body = wp_remote_retrieve_body( $response ); $schools = json_decode( $body ); return $schools->elements; }
}// Step 2: Register the Widgetfunction register_nearby_schools_widget() {register_widget( 'Nearby_Schools_Widget' );}add_action( 'widgets_init', 'register_nearby_schools_widget' );
This code sets up a WordPress plugin that creates a widget called “OSM-Nearby Schools Widget”. Well the widget retrieves nearby schools using Overpass API within a 10km radius of Munich’s coordinates (48.1351 latitude, 11.5820 longitude), and displays them in an unordered list.
Well we may need to adjust the coordinates and then run it against the Overpass API query to fit even more specific requirements. What do you say!? Do you think that wen need to have to add even more osm-specific things and ideas !?
- The topic ‘creating a osm newby-search within a plugin – find x near x’ is closed to new replies.