interaktive Karten in einer Webanwendung haben viele großartige Verwendungen. Von der Visualisierung von Daten bis hin zum Hervorheben von Interessenspunkten wird erwartet, dass Karten Ideen im Kontext des Standorts problemlos kommunizieren.
Der schwierigste Teil ist jedoch, diese Daten in Koordinaten umzuwandeln, die die Karte verstehen kann. Glücklicherweise ermöglicht es uns mit Geocoder PHP eine Verbindung zu verschiedenen Geo-Coding-Anbietern. In Kombination mit bluglet.js ist eine einfache JavaScript -Bibliothek, die Karten erstellt, ein Kinderspiel.
mit Komponist, einschließlich der Geocoder -PHP -Bibliothek ist einfach:
{ "require": { "willdurand/geocoder": "*" } }
Fügen wir auch ein paar HTML zu einer einfachen Index.php-Datei hinzu, um Bootstrap einzuschließen, damit wir eine gut aussehende Umgebung haben, um unsere Karte in:
anzuzeigen<?php require 'vendor/autoload.php'; ?> <!DOCTYPE html> <html> <head> <title>A simple map with Geocoder PHP and Leaflet.js</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> </head> <body> <div > <div > <div > <h1 >A simple map with Geocoder PHP and Leaflet.js</h1> </div> <div > <div > </div> </div> </div><!-- /row --> </div> <!-- /container --> <script></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> </body> </html>
Geocoder bezeichnet sich als die Geocoder -Bibliothek für PHP. Es kann in drei einfachen Schritten verwendet werden:
Der Adapter dient als Mechanismus, um über ihre API zu verbinden und Daten an den ausgewählten Anbieter zu erhalten. Einige Adapter verwenden die integrierte Funktionalität innerhalb von PHP 5.3 wie Locken und Sockeln. Andere verwenden, wie Buzz, Guzzle und Zend HTTP-Client, Open-Source-Bibliotheken von Drittanbietern, nach denen Sie einfach ihre Abhängigkeit zu Ihrer Komponistendatei hinzufügen müssen.
Die Schönheit der Geocoder -Bibliothek ist diese Abstraktion des Adapterschritts. Sie können Ihren Adapter austauschen, wenn sich Ihre Anforderungen ändern, ohne dass Sie die Art und Weise, wie Ihre Anwendung die Daten empfängt, neu schreiben.
Für dieses Beispiel werden wir Curl und die enthaltene Curlhttpadapter -Klasse in der Geocoder -PHP -Bibliothek verwenden.
In unserer Datei index.php fügen wir den Adapter hinzu:
// Setup geocoder adapter. $adapter = new \Geocoder\HttpAdapter\CurlHttpAdapter();
Es gibt viele Geocoding-Anbieter, die von der Geocoder-PHP-Bibliothek außerhalb des Boxs unterstützt werden, einschließlich Google Maps, Bing Maps, Nominatim über OpenStreetmap und TomTom.
Die vollständige Liste finden Sie im Readme des Geocoder -PHP -Repositorys.
Jeder Anbieter, der durch seine jeweiligen Klassen dargestellt wird, hat seine eigenen Optionen. Abhängig von Ihren Anforderungen können Sie mehrere Anbieter für verschiedene Umstände registrieren. Dies kann nützlich sein, wenn Ihre Bewerbung bestimmte Straßen in San Jose, Costa Rica mit OpenStreetmap, abbilden und eine kurze Route in Peking, China, mit Baidu.
finden mussFür dieses Beispiel werde ich einfach Google Maps verwenden, aber registrieren Sie es so, dass ich es einfach einem Array hinzufügen muss, wenn ich in Zukunft einen anderen Anbieter hinzufügen möchte:
{ "require": { "willdurand/geocoder": "*" } }
<?php require 'vendor/autoload.php'; ?> <!DOCTYPE html> <html> <head> <title>A simple map with Geocoder PHP and Leaflet.js</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> </head> <body> <div > <div > <div > <h1 >A simple map with Geocoder PHP and Leaflet.js</h1> </div> <div > <div > </div> </div> </div><!-- /row --> </div> <!-- /container --> <script src="https://img.php.cn/ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> </body> </html>
Karten bestehen aus drei Teilen:
Die Wechselwirkungsschicht wird von blutblättern.js behandelt. Ich füge einfach die Blättchen -JavaScript- und CSS -Bibliothek in unsere Starter HTML -Vorlage ein:
// Setup geocoder adapter. $adapter = new \Geocoder\HttpAdapter\CurlHttpAdapter();
In diesem einfachen Beispiel werde ich einfach einzelne Markierungen als JavaScript -Variablen erstellen, die über von PHP erzeugte Zeichenfolgen in meine Karte aufgenommen werden.
Die Flugblatt hat die Option, dass diese Daten auch über das Geojson -Format für größere und dynamischere Datensätze übergeben werden.
// Create a chain of providers. // Be sure to include my previously created adapter. $chain = new \Geocoder\Provider\ChainProvider( array( new \Geocoder\Provider\GoogleMapsProvider($adapter), ) ); // Instantiate the geocoder. $geocoder = new \Geocoder\Geocoder(); // Register my providers. $geocoder->registerProvider($chain);
Wir können dann diese ID in der Blätterblatt ansprechen, indem wir die integrierte MAP () JavaScript-Methode aufrufen und unsere ID in der Fußzeile übergeben:
// Demo locations $locations = array( array( 'address' => '3324 N California Ave, Chicago, IL, 60618', 'title' => 'Hot Dougs', ), array( 'address' => '11 S White, Frankfort, IL, 60423', 'title' => 'Museum', ), array( 'address' => '1000 Sterling Ave, , Flossmoor, IL, 60422', 'title' => 'Library', ), array( 'address' => '2053 Ridge Rd, Homewood, IL, 60430', 'title' => 'Twisted Q', ) ); foreach ($locations as $key => $value) { // Try to geocode. try { $geocode = $geocoder->geocode($value['address']); $longitude = $geocode->getLongitude(); $latitude = $geocode->getLatitude(); } catch (Exception $e) { echo $e->getMessage(); } }
<link rel="stylesheet" href="//cdn.leafletjs.com/leaflet-0.6.4/leaflet.css" /> <script src="//cdn.leafletjs.com/leaflet-0.6.4/leaflet.js"></script>
$mapdata = $marker_group = array(); foreach ($locations as $key => $value) { // Try to geocode. try { $geocode = $geocoder->geocode($value['address']); $longitude = $geocode->getLongitude(); $latitude = $geocode->getLatitude(); // Create map data array $mapdata[] = markerCreator($latitude, $longitude, $value['title'], $key); // Marker grouping array $marker_group[] = "marker{$key}"; } catch (Exception $e) { echo $e->getMessage(); } } function markerCreator($lat, $long, $label, $key) { return "var marker{$key} = L.marker([{$lat}, {$long}]).addTo(map); marker{$key}.bindPopup(\"{$label}\");"; }
Dies liegt daran, dass die Blättchen keine Eigenschaften in die Höhe oder Breite der Karten -DIV injiziert, sodass Sie sie stylen und die Größe ändern können, wie Sie möchten. Geben Sie einfach Ihrer Div eine Höhe und Breite, und Ihre Karte sollte erscheinen!
Sie können schöne, interaktive Karten mit der Geocoder -PHP -Bibliothek und der Blättchen.js erstellen. Schauen Sie sich unbedingt die jeweilige Dokumentation jedes Projekts an, da es viele weitere erweiterte Anpassungen gibt, die möglich sind.
Schauen Sie sich die Demo für diesen Artikel an oder geben Sie sie bei Github.
aufWie kann ich meiner Karte interaktive Funktionen hinzufügen? auf deine Karte. Sie können beispielsweise die Funktion L.Popup () verwenden, um Ihrer Karte Popups hinzuzufügen, wodurch zusätzliche Informationen angezeigt werden können, wenn ein Marker oder eine andere Funktion geklickt wird. Sie können auch die Funktion L.Control.layers () verwenden, um eine Ebenensteuerung hinzuzufügen, mit der Benutzer zwischen verschiedenen Basisschichten und Overlay -Ebenen wechseln können.
Wie kann ich die Leistung meiner Karte optimieren? Die Leistung Ihrer Karte. Eine Möglichkeit besteht darin, eine Fliesenschicht zu verwenden, die für die Leistung optimiert ist, z. B. eine Vektorfliesenschicht. Eine andere Möglichkeit besteht darin, die Anzahl der auf der Karte gleichzeitig angezeigten Funktionen zu begrenzen, beispielsweise mithilfe von Clustering oder nur durch Anzeigen von Funktionen in der aktuellen Kartenansicht. Sie können auch die Leistung Ihres PHP -Codes optimieren, indem Sie effiziente Datenbankabfragen verwenden und gegebenenfalls Ergebnisse zwischen den Ergebnissen zwischengespeichert werden. Zeigt auf verschiedenen Bildschirmgrößen und -geräten korrekt an. Dies kann durch Verwendung von CSS -Medienabfragen erreicht werden, um die Größe und das Layout des Kartenbehälters basierend auf der Bildschirmgröße anzupassen. Sie können auch die MAP der Blättchen -JS -MAP verwenden. Benutzerdefinierte Markierungen können Ihrer Karte mit der Funktion L.Icon () hinzugefügt werden. Mit dieser Funktion können Sie ein benutzerdefiniertes Bild angeben, das als Markierungssymbol verwendet werden soll. Sie können auch die Größe, den Ankerpunkt und andere Eigenschaften des Symbols angeben. Das benutzerdefinierte Symbol kann dann verwendet werden, wenn ein Marker erstellt wird, indem es als Option an die Funktion L.Marker () übergeben wird. 🎜> Broschüre JS liefert die Funktion L.Geojson (), mit der Daten aus einer Geojson -Datei auf Ihrer Karte angezeigt werden können. Diese Funktion nimmt ein Geojson -Objekt als Eingabe an und erstellt eine Ebene, die die von den Geojson -Daten beschriebenen Funktionen enthält. Die Funktionen können mit verschiedenen Optionen und Methoden, die von der Funktion L.Geojson () bereitgestellt werden, gestylt und interagiert werden. Die Geojson -Daten können mit PHP oder JavaScript aus einer Datei oder einem Server abgerufen werden.
Das obige ist der detaillierte Inhalt vonMapping mit Geocoder PHP und Broschüre.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!