#native_company# #native_desc#
#native_cta#

GIS Mapping with PHP; Part Two Page 6

By Simon Moss
on 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); 

  

?>



1
|
2
|
3
|
4
|
5
|
6
|
7