GIS Mapping in PHP

Saturday, January 10th, 2009

พอดีผมไปเจอในเว็บต่างประเทศมาสำหรับการทำ GIS Mapping เบื้องต้น เจอมานานแล้ว save ไว้ในเครื่อง ลืมไปแล้วว่าเว็บไหน พอดีมีเพื่อนผมถามขึ้นมาเรื่องการมาร์คจุดบนแผนที่ ก็เลยหาๆในคลังความรู้ของผมที่บ้าน ซึ่งคิดว่าน่าจะมีประโยชน์ในการประยุกต์ใช้งานได้ในอนาคตเลยเอามาเขียนให้อ่านกัน โดยเป็นเบื้องต้นที่ทำได้ง่ายๆจริงๆ คำสั่งต่างๆก็ไม่ได้มีอะไรมากมายนะครับ

สิ่งที่ต้องการก็คืออะไรบ้างครับ

  • แผนที่โลกซึ่งเป็น base map
  • ตำแหน่งละติจูด และ ลองติจูด จำแหน่งที่เราต้องการมาร์คตำแหน่งลงไป
  • GD ในเครื่องของเรา หรือ Server ครับ

มาดูที่รูปแผนที่ ผมก็ได้โหลดมาจาก ตัวอย่าง มาให้ดูนะครับ

earth_310.jpg
รูปนี้เลยครับ หากใครจะหารูปใหญ่ก็ไปหากันเอาเองนะครับ

ตำแหน่งละติจูด(lat) กับ ลองติจูด(lng) ก็สามารถหาได้จากพวก Google map ต่างๆได้นะครับ แต่สำหรับผมเองนั้น มีดาต้าเบสส่วนตัวที่เก็บไว้ทุกจังหวัดอยู่แล้วในดาต้าเบส เลยดึงมาใช้ได้ง่ายหน่อย

province_list.jpg

จากนั้นก็เขียนโค๊ดครับโดยผมจะให้มาร์คจุดลงไปที่ กรุงเทพมหานคร โดยมีค่า lat และ lng คือ 13.75 กับ 100.5166667 ก็เขียนได้ดังนี้

<?php

if(empty($lat)) $lat = 13.75;
if(empty($long))$long = 100.5166667;

$im = imagecreatefromjpeg(”earth_310.jpg“); //รูปแผนที่ที่จะนำมาสร้าง
$red = imagecolorallocate ($im, 255,0,0);

$scale_x = imagesx($im);
$scale_y = imagesy($im);

$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);

// สร้างมาร์คสี่เหลี่ยมสีแดงขนาด 4 pixel 

imagefilledrectangle($im,$pt[”x”]-2,$pt[”y”]-2,$pt[”x”]+2,$pt[”y”]+2,$red);
imagestring($im,2,1,$scale_y-20,”Country of Bangkok Thailand“,$red); //ตัวอักษรที่จะแสดงด้านล่างรูป

header(”Content-Type: image/png”);
imagepng($im);
imagedestroy($im);

function getlocationcoords($lat, $lon, $width, $height)

    $x = (($lon + 180) * ($width / 360));
    $y = ((($lat * -1) + 90) * ($height / 180));
    return array(”x”=>round($x),”y”=>round($y));
}
?>

โดยแก้ไขค่าต่างๆแล้วลองรันดูนะครับ ก็จะได้ผลดังนี้

gis_run.jpg

ผมก็เลยลองหา map ใหม่จากใน Google แล้วก็นำมาย่อขยายให้ได้สัดส่วน แล้วลองทดสอบอีกครั้งก็ได้ผลดังนี้

gis_run2.jpg
แสดงผลได้ถูกต้อง หรือ ไม่ก็เกือบใกล้เคียงความจริงมากๆ

คำสั่งของการใช้งานก็ไม่ยากอะไร หวังว่าคงพอเอาไปใช้ประโยชน์กันได้ไม่มากก็น้อยนะครับ

Editor's Talk!

สวัสดีคนที่หลงเดินทางเข้ามายัง Blog ของผม อาจจะด้วยความไม่ตั้งใจ หรือ ตั้งใจเข้ามาก็ตาม ก่อนอื่นผมก็ต้องขอออกตัวก่อนว่า Blog ของผมมันจะมีสาระบ้าง หรือ ไม่มีสาระเลย ก็แล้วแต่อารมณ์ช่วงไหนอยากเขียนอะไร อย่าเหมาว่า Blog ผมจะต้องมีแต่ความรู้เหมือน Blog ของคนอื่นๆ นะครับ
สำหรับ Blog นี้ ผมสามารถใช้คำพูดใดๆก็ได้ตามที่ผมเห็นสมควร เพราะมันคือ Blog ของกู(ผม) บางครั้งผมเขียนไปกระทบใครก็ขออภัยไว้ ณ. ที่นี้ด้วย ก็ไม่มีอะไรมากครับ ขอบคุณที่เข้ามาอ่าน Blog ของผมนะครับ

นายแม็ค

ค้นหา :