เนื้อหาในวันนี้เป็นการเขียนโค๊ด PHP ง่าย ๆ สำหรับแปลงค่าจากพิกัดเป็นชื่อตำแหน่ง reversed geocoder โดยใช้ OpenStreetMap ขอบระบบ gps tracking ปัญหาที่ผู้เขียนพบเจอของการใช้การแปลงพิกัดโดยใช้ google map ก็คือจำกัดการค้นหาชื่อตำแหน่งมีค่าใช้จ่าย 5 USD ต่อ 1000 ครั้ง และต้องสมัครขอรับคีย์สำหรับการใช้งาน เพื่อให้การดำเนินการแปลงค่าจากพิกัดเป็นชื่อตำแหน่ง reversed geocoding ทำได้โดยใช้แผนที่โอเพนซอร์สได้เหมือนกัน
Input Agent (lat/lon)---|--- PHP reversegeocoder.php(get/post) ---|--- Output XML
รูปที่ 1 การทำงานของระบบ reverse geocoding
เมื่อมีการส่งค่าอินพุทตำแหน่ง ละติจูดและลองกิจูด ผ่านทางเวบบราวเซอร์หรือเอเจนท์เพื่อทำการเปิดไฟล์ reversegeocoder.php จากนั้นโปรแกรม reversegeocoder.php จะส่งค่าพิกัดดังกล่าวไปค้นหาชื่อตำแหน่งจาก OpenStreetMap เมื่อได้ค่าตำแหน่งมาแล้วก็แสดงผลเป็นแบบ XML จากตัวอย่างโค๊ดนี้จะใช้จุดเด่นของฟังก์ชั่น file_get_contents ของ PHP ที่จะอ่านค่าจะต้นทางเปลี่ยนเป็นสตริงค์
ทดสอบการทำงานสคริปออนไลน์
http://www.thaimdvr.com/geocoder.php?longitude=100.478607&latitude=13.887050
ทดสอบการทำงานสคริปออนไลน์
http://www.thaimdvr.com/geocoder.php?longitude=100.478607&latitude=13.887050
ลองหรือยังแต่ที่ผู้เขียนทดลองใช้งานมาครบปี มันก็ไม่เคยมีปัญหาใดๆ ใช้งานจริงได้ดั่งใจ ระบบ GPS TRACKING ที่ดีมีมาตรฐาน รู้ลึกรู้จริงเรื่องอุปกรณ์ และงานบริการหลังการงาน แวะไปเยี่ยมชมเวบไซต์จีพีเอสไทยได้
<?php // get op, longitude and latitude from the method get/post url $op = isset($_GET['op']) ? $_GET['op'] : 0; $lon = isset($_GET['longitude']) ? $_GET['longitude'] : 0; $lat = isset($_GET['latitude']) ? $_GET['latitude'] : 0; $geo_array = array ( 'Address' => 'Perfect Place Rattanathibet', 'AdministrativeAreaName' => 'Nonthaburi', 'SubAdministrativeAreaName' => 'Muang Nonthaburi', 'CityName' => 'Saima', 'StreetName' => 'Rattanathibet Road', 'CountryName' => 'Thailand', 'PostalCodeNumber' => '11000' ); //set option for usign openstreetmap by using file_get_contents $opts = array('http'=>array('header'=>"User-Agent: StevesCleverAddressScript 3.7.6\r\n")); $context = stream_context_create($opts); //url for the openstreetmap $homepage = file_get_contents("https://nominatim.openstreetmap.org/reverse?format=json&lat=".$lat."&lon=".$lon."&zoom=27&addressdetails=1",false,$context); $homepage_json = json_decode($homepage,1); //assigned data from the openstreetmap to array $geo_array['Address']=$homepage_json['display_name']; $geo_array['AdministrativeAreaName']=$homepage_json['address']['state']; $geo_array['SubAdministrativeAreaName']=$homepage_json['address']['suburb']; $geo_array['CityName']=$homepage_json['address']['city']; $geo_array['StreetName']=$homepage_json['address']['road']; $geo_array['PostalCodeNumber']=$homepage_json['address']['postcode']; $geo_array['CountryName']=$homepage_json['address']['country']; //convert to xml $xml = new SimpleXMLElement('<Location/>'); array_walk_recursive($geo_array, function ($value, $key) use ($xml) { $xml->addChild($key,$value);}); echo $xml->asXML(); ?>