Rumah >hujung hadapan web >tutorial js >Pemetaan dengan PHP Geocoder dan Leaflet.js
Bahagian paling sukar, bagaimanapun, menukarkan data itu ke dalam koordinat yang dapat difahami oleh peta. Nasib baik, Geocoder PHP membolehkan kami menyambung ke penyedia geo-pengekodan yang berbeza. Digabungkan dengan leaflet.js, perpustakaan JavaScript yang mudah, membuat peta adalah angin.
Takeaways Key
mari juga tambahkan beberapa HTML ke fail index.php mudah untuk memasukkan bootstrap supaya kami mempunyai persekitaran yang bagus untuk memaparkan peta kami di:
{ "require": { "willdurand/geocoder": "*" } }
Menyediakan 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></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> </body> </html>
Daftar penyesuai
Keindahan Perpustakaan Geocoder adalah abstraksi langkah penyesuai ini. Ia membolehkan anda menukar penyesuai anda jika keperluan anda berubah tanpa memerlukan anda menulis semula bagaimana aplikasi anda menerima data.
Untuk contoh ini, kami akan menggunakan curl dan kelas curlhttpadapter yang disertakan di dalam perpustakaan php geocoder.
Dalam fail index.php kami, mari tambahkan penyesuai:
Daftar pembekal
// Setup geocoder adapter. $adapter = new \Geocoder\HttpAdapter\CurlHttpAdapter();
Senarai penuh boleh didapati di readme repositori Geocoder PHP.
Setiap pembekal, seperti yang diwakili oleh kelas masing -masing, mempunyai pilihan tersendiri. Bergantung pada keperluan anda, anda boleh mendaftarkan beberapa penyedia untuk pelbagai keadaan. Ini mungkin berguna jika aplikasi anda perlu memetakan jalan -jalan tertentu di San Jose, Costa Rica menggunakan OpenStreetMap dan mencari laluan cepat di Beijing, China menggunakan Baidu.
3Geocode
{ "require": { "willdurand/geocoder": "*" } }
Mengintegrasikan dengan leaflet.js
<?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>
Peta terdiri daripada tiga bahagian:
jubin
Lapisan interaksi dikendalikan oleh leaflet.js. Saya hanya menyertakan Perpustakaan JavaScript dan CSS Risalah ke dalam templat HTML starter kami:
titik data telah dibuat lebih awal dengan kod geokoder saya. Saya hanya perlu memformat pelbagai data dengan cara risalah yang diharapkan.
// Setup geocoder adapter. $adapter = new \Geocoder\HttpAdapter\CurlHttpAdapter();
Dalam contoh mudah ini, saya hanya akan membuat penanda individu sebagai pembolehubah JavaScript yang akan dimasukkan ke dalam peta saya melalui rentetan yang dihasilkan oleh PHP.
Risalah mempunyai pilihan untuk data ini juga akan diluluskan melalui format geojson untuk dataset yang lebih besar dan lebih dinamik.
Kerana risalah menyuntik kod peta ke dalam elemen DOM yang sedia ada, kita perlu menentukan elemen tersebut di dalam HTML kami. Kita boleh melakukan ini dengan hanya membuat div dengan ID yang unik:
// 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);
kita kemudian dapat menargetkan id itu dalam risalah dengan memanggil kaedah JavaScript Peta () JavaScript dan lulus dalam ID kami di Footer:
Sekarang, kami membina tiga bahagian peta kami. Untuk mendaftarkan jubin, kami hanya memanggil kaedah TileLayer () terbina dalam, menentukan atribut dan tahap zum jika dikehendaki, kemudian memajukan kaedah addTo ():
// 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(); } }
Akhirnya, kami mencetak data peta kami menggunakan array PHP yang kami tentukan sebelum ini, dan pastikan peta itu memusatkan diri pada titik data tersebut dengan mendefinisikannya bersama sebagai kumpulan. Semua dalam semua, JavaScript di footer akan menjadi:
<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>
Jika anda mendapat sejauh ini, anda akan melihat bahawa tiada apa yang berlaku.
$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}\");"; }
Ini kerana risalah tidak menyuntik sifat pada ketinggian atau lebar div peta, yang membolehkan anda menggayakannya dan mengubah saiznya seperti yang anda suka. Cukup berikan div anda ketinggian dan lebar, dan peta anda sepatutnya muncul!
Anda boleh membuat peta yang indah dan interaktif dengan perpustakaan php geocoder dan leaflet.js. Pastikan anda menyemak dokumentasi masing -masing projek kerana terdapat banyak penyesuaian yang lebih maju yang mungkin.
lihat demo untuk artikel ini atau garpu di GitHub.
Mengintegrasikan risalah JS dengan PHP melibatkan beberapa langkah. Pertama, anda perlu memasukkan Perpustakaan JS Leaflet dalam fail PHP anda. Ini boleh dilakukan dengan memuat turun perpustakaan dan menghubungkannya dalam fail PHP anda atau dengan menggunakan CDN. Sebaik sahaja perpustakaan dimasukkan, anda boleh memulakan peta menggunakan fungsi l.map (). Anda kemudian boleh menambah lapisan, penanda, dan ciri -ciri lain ke peta menggunakan pelbagai fungsi JS risalah. Data untuk ciri -ciri ini boleh diambil dari pangkalan data menggunakan PHP dan kemudian diserahkan kepada fungsi JS risalah. daripada menukar alamat ke dalam koordinat geografi, yang boleh anda gunakan untuk meletakkan penanda pada peta, atau meletakkan peta. Dalam risalah JS, anda boleh menggunakan perkhidmatan geokod seperti API Nominatim atau Google Geocoding untuk menukar alamat ke dalam koordinat. Sebaik sahaja anda mempunyai koordinat, anda boleh menggunakan fungsi l.marker () untuk meletakkan penanda pada peta pada koordinat yang ditentukan. 🎜>
php boleh digunakan untuk mengambil data dari pangkalan data dengan menggunakan fungsi terbina dalam untuk interaksi pangkalan data. Sebagai contoh, jika anda menggunakan pangkalan data MySQL, anda boleh menggunakan fungsi mysqli_connect () untuk menyambung ke pangkalan data, dan kemudian gunakan fungsi mysqli_query () untuk melaksanakan pertanyaan dan mengambil data SQL. Data yang diambil kemudiannya boleh dihantar ke fungsi JS risalah untuk menambah ciri ke peta.Penampilan peta anda boleh disesuaikan dengan menggunakan pelbagai pilihan dan fungsi JS risalah. Sebagai contoh, anda boleh menggunakan fungsi setView () untuk menetapkan pusat geografi awal dan tahap zum peta. Anda juga boleh menggunakan fungsi L.TileLayer () untuk menambah lapisan jubin ke peta, yang menentukan penampilan visual lapisan asas peta. Parameter pilihan fungsi l.map () boleh digunakan untuk menetapkan pelbagai pilihan lain, seperti tahap zum maksimum peta, sama ada untuk memaparkan kawalan atribusi, dan sebagainya. Menggunakan perkhidmatan geocoding?
Bagaimana saya boleh menggunakan risalah JS untuk memaparkan data dari fail geojson?
Atas ialah kandungan terperinci Pemetaan dengan PHP Geocoder dan Leaflet.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!