Tag: geocoding’

[Google Maps Geocoding] ลอง Parse Json ด้วย Groovy + Java (Netbeans)

 - by Nat

โปรเจ็คตลกๆมาอีกแล้ว  เพราะโปรเจ็คนี้ผมใช้  Json Lib + + Java

แต่ผมใช้ Groovy ดึง json (URL.text) แล้วใช้ Java เป็นตัวแกะ jsonObject เป็น jsonArray

หลังจากนั้นเอาข้อมูลโยนกลับไปให้ Groovy ถอดเอาเฉพาะส่วนที่ต้องการออกมา (ในที่นี้คือ coordinates — latitude ,longitude นั่นแหละ)

ดูวุ่นวายมาก ทั้งๆที่ เขียน Groovy อย่างเดียวก็ได้ เพราะ Json Lib ก็ลองรับ groovy  หรือจะเขียน Java เพียวๆ เลยก็ได้ 

 

เรื่องของเรื่องคืออยากเขียน Java ร่วมกับ Groovy อีกครั้ง เพราะไม่ค่อยถูกกับ Java จริงๆ

มันดูเวื่นเว้อ  มันเขียนเวิ่นเว้อด้วย ยาวๆ งงๆ (อาจเป็นเพราะไม่ได้ศึกษาอย่างลึกซึ้ง)

groovy มันสั้น เข้าใจง่าย ไม่เวิ้นเว้อ (อาจจะใช้ได้ไม่เต็มประสิทธิภาพ แต่ผมชอบ พวก Closures )

 

เหตุผลที่ไม่เขียน Groovy เพียวๆไปเลยก็เพราะว่า 

code ตัวอย่างที่เค้ามีให้ดู มันพิมพ์ผิด 

def fromList = [1,true,'json'as JSONarray  

มันควรจะต้องเป็น JSONArray  เมื่อแก้และเอาอันอื่นมาลองดู มัน cast เป็น Type พวก net.sf.json.* ไม่ได้ อาการประมาณนี้ 

ก็เลยลองซัด Java + Groovy ไปเลย

มันก็เจอปัญหานิดหน่อยเพราะ ไม่ได้อ่าน Dependency List เลยค่อยๆตามหา พอได้ครบแล้วเพิ่งจะเห็นว่ามันมีบอกไว้ว่า 

Json-lib requires (at least) the following dependencies in your classpath:

  • jakarta commons-lang 2.4
  • jakarta commons-beanutils 1.7.0
  • jakarta commons-collections 3.2
  • jakarta commons-logging 1.1.1
  • ezmorph 1.0.6

น่าเขกกะโหลกจริงๆ Read this article »

ลองถอดข้อมูลจาก JSON Format ด้วย Grails

 - by Nat

จากตอนที่แล้ว   Reverse Geocoding (Address Lookup) ผ่าน http


เรื่องวันนี้  ! ให้สังเกตว่า

 เมื่อเรา Request ไปข้อข้อมูลของ Thammasat Rangsit เราจะได้ ข้อมูลหน้าตาประมาณนี้

{
  "name": " Rangsit",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "": "Thammasat Rangsit Sport Center, Khlong Nueng, Khlong Luang, Pathum Thani 12110, Thailand",
    "AddressDetails": {
   "Accuracy" : 9,
   "AddressLine" : [ "Thammasat Rangsit Sport Center" ]
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 14.0785781,
        "south": 14.0569314,
        "east": 100.6173654,
        "west": 100.5853506
      }
Read this article »

Reverse Geocoding (Address Lookup) ผ่าน http

 - by Nat

ลองเล่น Reverse ของ google map api ซักกะหน่อย  

 

Reverse Geocoding คือการ เปลี่ยนชื่อสถานที่เป็นพิกัด (latitude , longitude) นั่นเอง  (ความจริงมันได้ข้อมูลอื่นๆมาด้วยอีกเยอะ)

 

วิธีทำก็ไปอ่านดูได้ที่ Reverse Geocoding (Address Lookup)  

หรือจะลองทำเลย  ก็แค่  Request ไปที่ http://maps.google.co.th/maps/geo?q=Thammasat&output=json&sensor=falsegl=th

ก็จะได้ข้อมูลมาประมาณนี้

{
  "name": " Rangsit",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "": " Rangsit Sport Center, Khlong Nueng, Khlong Luang, Pathum Thani 12110, Thailand",
    "AddressDetails": {
   "Accuracy" : 9,
   "AddressLine" : [ " Rangsit Sport Center" ]
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 14.0785781,
        "south": 14.0569314,
        "east": 100.6173654,
        "west": 100.5853506
      }
    },
    "Point": {
      "coordinates": [ 100.6013580, 14.0677550, 0 ]
    }
  }, 

ถ้าต้องการ output แบบ xml ก็ใส่ parameter ตรง output ไปว่า  &output=xml 

 

หลังจากนั้นก็เอาไป parse แล้ว ใช้ต่อได้เลย !! 

Related Blogs

เทคโนโลยีด้านการระบุตำแหน่งของผู้ส่งข้อมูล (ใช้ Geolocation API )

 - by Nat

ขอ blog จากเอกสารบางส่วนที่ส่ง NSC ไปหน่อย เผื่อมีประโยชน์กับท่านอื่นด้วย

ว่าด้วยเรื่องของการดึงข้อมูลพิกัดผ่านทาง Browser  (ดึงพิกัดออกมาจากมือถือนั่นแล)

 

การดึงพิกัดจากมือถือ ทำได้โยการใช้ API   ซึ่งส่วนสำคัญที่ใช้ในโครงงานนี้คือ Coordinates interface

ซึ่งมีรายละเอียดดังนี้


  interface Coordinates {
    readonly attribute double latitude;
    readonly attribute double longitude;
    readonly attribute double? altitude;
    readonly attribute double accuracy;
    readonly attribute double? altitudeAccuracy;
    readonly attribute double? heading;
    readonly attribute double? speed;
  };

 

แอตทริบิวต์ latitude , longitude เป็นค่าตำแหน่งในภูมิศาสตร์เก็บอยู่ในรูปทศนิยม

แอตทริบิวต์  altitude เป็นค่าความสูงของตำแหน่ง
แอตทริบิวต์  accuracy และ altitudeAccuracy เป็นค่าความแม่นยำของพิกัด
แอตทริบิวต์ heading เป็นทิศทางของการเคลื่อนที่
แอตทริบิวต์ speed เป็นความเร็วของการเคลื่อนที่

โดยมีวิธีการเรียกใช้ได้ดังนี้ 

ตัวอย่างการ ดึงค่าพิกัด

 

เมื่อเรียกฟังก์ชั่น displayLocation จะได้ดังนี้