PHPBuilder - GIS Mapping with PHP; Part Two Page 6



RSS Twitter
Articles Tricks And Hacks

GIS Mapping with PHP; Part Two - Page 6

by: Simon Moss
|
February 9, 2004


<?php
// Lets load the MIF file into our array
  
$polygons LoadMIF(&quot;1.mif&quot;); 
// This is the width of our final image
  
$image_sx 400
// This is the height of our final image
  
$image_sy 400;
  
//This is the scale/zoom level if not parsed.
 
if(empty($scale))$scale 35000;
  
// Next we set our base object we want to plot and center on
  
$my_long = -63.10774861954596
$my_lat 46.2899306519141;
  
// Set the correct scale for use in getlocationcoords
  
$sx $scale
$sy $scale;
  
// Now we find out what screen coordinates the long/lat
//coordinates are at based on a complete map of the world
  
$center getlocationcoords($my_lat$my_long$sx,$sy) ;
  
// Based on the size of the final image, we work out the 
// amount we will need to add/subtract from the screen
// coordinate that will be calculated later to center our point
// on the final image.<br>
  
$min_x $center[&quot;x&quot;] - ($image_sx 2); 
$min_y $center[&quot;y&quot;] - ($image_sy 2);
  
// So lets create our image, and also allocate some colors to
// make everything look purdy. 
  
$im imagecreate($image_sx,$image_sy);
$land imagecolorallocate ($im0xF7,0xEF,0xDE); 
$sea imagecolorallocate ($im0xB5,0xC7,0xD6);
$red imagecolorallocate ($im,0xff,0x00,0x00);
  
// Lets now draw out inital background .. the mighty ocean.
// You could also use a drawn &quot;sea scape&quot; image if you 
// wanted things to look a little different.
 
imagefilledrectangle($im,0,0,$image_sx,$image_sy,$sea);
  
// Now we loop through the array of arrays getting each polygon
// in turn
  
foreach($polygons as $poly

    
$converted_points = array();
  
    
// Each vector objects is stored as a space delimited string
    // {long} {lat} {long} {lat} etc etc.
    // So we explode these points into a temporary array for
    // easy conversion to screen coordinates.
  
      
$points explode(&quot; &quot;,$poly[&quot;poly_string&quot;]); 
      
$number_points count($points); 
      
$i 0
      while(
$i&lt;$number_points
    {
  
        
// Get each long/lat in turn. Convert it to screen coordinates
        // Then subtract the &quot;world screen&quot; coordindate of our base object 
          // ( our house ) so the polygon will be centered around it.
  
        
$lon $points[$i]; 
        
$lat $points[$i+1]; 
        
$pt getlocationcoords($lat$lon$sx$sy); 
        
$converted_points[] = $pt[&quot;x&quot;] - $min_x
        
$converted_points[] = $pt[&quot;y&quot;] - $min_y
        
$i+=2
    } 
  
    
// Then use GD to draw the polygon. We divide the number of points by
    // 2 as this is the actually true number of points in the array
  
    
imagefilledpolygon($im,$converted_points,$number_points/2,$land);

  
// Next center our base object 
  
$pt[&quot;x&quot;] = $center[&quot;x&quot;] - $min_x
$pt[&quot;y&quot;] = $center[&quot;y&quot;] - $min_y
 
// And plot it in the middle of the map
  
imagefilledrectangle($im,$pt[&quot;x&quot;]-2,$pt[&quot;y&quot;]-2,$pt[&quot;x&quot;]+2,$pt[&quot;y&quot;]+2,$red); 
  
// Set the headers and return the image header(&quot;Content-type: image/png&quot;); 
  
imagepng($im); 
imagedestroy($im); 
  
?>

« Previous Page
1
|
2
|
3
|
4
|
5
|
6
|
7
Next Page »

Comment and Contribute

Your comment has been submitted and is pending approval.

Author:
Simon Moss

Comment:



Comment:

(Maximum characters: 1200). You have characters left.