Position von Marker durch Adressen bestimmen

Hallo,

ich habe vor auf meiner Homepage eine Karte einzubetten.
Vorab gesagt, ich habe keine Erfahrung mit dem implementieren solcher Karten.
Ich habe zunächst folgendes Beispiel herangezogen:
http://leafletjs.com/examples/quick-start-example.html

Nun ist es so, dass ich keine statische Karte (wie in dem Beispiel) anlegen möchte, ich habe in einer MySQL Datenbank diverse Adressen (in Form von: Straße,Nr,Plz,Ort,Land) gespeichert und lese diese Daten dann mit Php aus. Ich möchte, dass sich der Marker ändert, sobald man auf einen Link einer Adresse klickt. Also zur Verdeutlichung ich klicke auf den Link, um die Daten der Adresse auszulesen, anschließend soll auf der Karte der Marker auf diese Adresse zeigen.

Mein Problem besteht darin, dass die Position des Markers durch Koordinaten bestimmt werden:


	L.marker([51.5, -0.09]).addTo(map)
			.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();

Ich hätte jetzt gerne gewusst, wie ich den Marker mit Hilfe meiner Daten auf die jeweilige Position setzen kann. Das Ganze soll natürlich dynamisch/automatisch funktionieren, ich möchte also nicht per Hand die Koordinaten in den Quelltext schreiben…

Ich würde mich freuen, wenn mir jemand helfen könnte.

Mfg.

toby_owl

Tag und willkommen im Forum,

Dienste, die das für dich erledigen können, findest du z.B. hier:
http://wiki.openstreetmap.org/wiki/Nominatim
http://developer.mapquest.com/web/products/open/geocoding-service

Die Nutzungsbedingungen, wie viele Abfragen und wie oft erlaubt sind, musst selber nachlesen. Du musst auch überlegen, was du machst, wenn du kein Ergebnis bekommst, es sind ja nicht alle Adressen in OSM erfasst.

Grüße, Max

PS: Für die Bedienung von Suchmaschinen nützlich: “Adresse zu Koordinate umsetzen” heisst “geocoding”

Ist doch ganz klar: Diese in OSM eintragen, was sonst?

Selbst wenn es z.B. Kundenadressen sein sollten, haben die als ganz normale Adressen mit zumindest addr:street & addr:housenumber ihren Platz. Firmennamen wie name=Holzhack AG sollten doch auch ok sein.

Gruss
walter

Okay, ich werde es mal damit versuchen.
Ich bedanke mich schon mal recht herzlich für die Antworten.

Ich werde mich ggf. noch mal melden, falls ich Probleme haben sollte.

Mfg.

toby_owl

Ich bin zu keinem Ergebnis gekommen, da ich zu unerfahren auf diesem Gebiet bin.
Gibt es denn keine verfügbaren Quellcodes, die ich direkt einbauen kann? Ich möchte es recht einfach handhaben… :wink:

Mfg.

toby_owl

Nominatim IST einfach.

Du musst “nur” den API-Aufruf mit der Suche in dein Programm einbauen. Das “wie” hängt natürlich von deiner Umgebung ab. Es sollte aber in verschiedenen Sprachen möglich sein.

Gruss
walter

Hallo Toby,

schau auch mal im OSM-Wiki unter http://wiki.openstreetmap.org/wiki/Search_engines

Jetzt habe ich mal zum Test ein kleines Script mit PHP geschrieben und es mal mit Nominatim versucht, hier mal mein Code der xmlread.php Datei:


<!DOCTYPE html>
<html>
    <head>
    
        <title>Leaflet</title>
        <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
		 <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
		 
		 <style type="text/css">

		 #map { height: 180px; }

		</style>
		 
		 
    </head>
    <body>

		<form action='xmlread.php' method='post'>
		Straße<input type='text' name='str'>
		Nr.<input type='text' name='numb'><br>
		PLZ:<input type='text' name='plz'>
		Ort:<input type='text' name='ort'>
		<br><input type='submit' name='ok' value='ok'>
		</form>


		<?php
		if(isset($_POST['ok'])){

		$_POST['ort'] = str_replace("ü", "%C3%BC", $_POST['ort']);
		$_POST['str'] = str_replace("ß", "ss", $_POST['str']);

		$filename = "http://nominatim.openstreetmap.org/search?q=".$_POST['str']."+".$_POST['numb'].",".$_POST['plz']."+".$_POST['ort']."&format=xml&addressdetails=1";
			
		$xml = simplexml_load_file($filename);
			
		
		foreach ( $xml->place as $values )  
		{  
		   
			echo 'Lon: ' . $values['lon'] . '<br>';
			echo 'Lat: ' . $values['lat'] . '<br>'; 		  
		        break;	 //Falls mehre Werte verfügbar sind
		}		  
		}
		?>
		
	<div id="map" style="width: 600px; height: 400px"></div>

	<script>
		//var map = L.map('map').setView([10.68916, 53.86277], 13);
		var map = L.map('map').setView([<?php echo"".$values['lat']."";?>, <?php echo"".$values['lon']."";?>], 17);

		L.tileLayer('https://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png', {
			maxZoom: 18,
			attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
				'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
				'Imagery (c) <a href="http://mapbox.com">Mapbox</a>',
			id: 'examples.map-i86knfo3'
		}).addTo(map);


		L.marker([<?php echo"".$values['lat']."";?>, <?php echo"".$values['lon']."";?>]).addTo(map)
			.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();		

		var popup = L.popup();

		function onMapClick(e) {
			popup
				.setLatLng(e.latlng)
				.setContent("You clicked the map at " + e.latlng.toString())
				.openOn(map);
		}

		map.on('click', onMapClick);
	</script>
    </body>
</html>

Ansich funktioniert es so (Zeichen wie ö,ä,ü,ß müsste ich allerdings noch umwandeln), allerdings weiß ich nicht, ob ich Nominatim richtig angewandt habe…
Wer mag kann ja mal den Code ausführen…

Mfg.

toby_owl