PHPBuilder - GIS Mapping with PHP; Part Two Page 7

RSS Twitter

GIS Mapping with PHP; Part Two - Page 7

by: Simon Moss
February 9, 2004

And thats it ... you have drawn a map of PEI and plotted my house on it. By altering the value of $scale you can zoom in and out. By adding/subtracting variables to $min_x and $min_y you can provide scrolling. You could also just save the image and use it as a base map for other maps or as a server side cache to speed things up. Tidy it up in Photoshop or add custom symbols for even better base maps with no copyright as you made it!!!!. Take it out to dinner and let it meet your parents.
Now althougth this map just shows PEI, there is no reason why you could not have a bunch of MIF files ( or one big one ) containing the whole of North America, or even the world. Then you have a scalable, scrollable map of the freakin' world! But before you go off celebrating, there are a few things to remember.

Don't stress out PHP

First and formost is speed. We love PHP and we know it does its best, but we are not far off doing some major number crunching here. PEI is the smallest province around ( awwww .. cutie!!! )... when you get to a complicated region like Quebec with 30000 polygons in it ( or even the world ) .. things really start to get slow ... very slow. These problems will be addressed in the next article as we let POSTGRESQL do some of the hard work, and we also talk about making a custom PHP module in C to do some of the donkeywork. However, as a work-around, consider the following options/modifications:
Make a bunch of scale dependant MIF/E00 file. You are looking at PEI at a scale of 100000 - you don't need all that coastline detail. So create another MIF file with less details, and load it dependant on a preset scale range ( ie pei_1_to_60000.mif, pei_60000_to_100000.mif and so on ).
We give you the max/min coordinates of a polygon when we load it in LoadMIF ( and you said that code wasn't being used .. shame on you ), feel free to use them. If a polygon is outside your display, don't bother with it. Don't convert it and don't display it! ( this is dealt with in the next article along with a "reverse" getlocationcoords for this purpose ). This is where a GIS tool comes in handy. Calculate the scale/size you use most often and split your map into chunks that just cover that area.
Then comes memory. Be mindfull of PHPs memory usage. The default 8meg allocated to a script on most PHP installations is not enough to handle a large MIF file with thousands of polygons ( like British Columbia ). POSTGRESQL will cure some of this, but try to split large maps into smaller chunks. You can then filter them in the LoadMIF program ( with some tweaking ).


So, there you have it. Next time we learn how to get this data into and out of POSTGRESQL. You want roads? Where we're going we don't need roads, but I show you how to plot them anyway. And maybe we'll do some work on caching ... you never know.
A formatted copy of the source code can be found here. This does work, I've tried it! Please don't email me asking for map data or conversion tools. All the things you need are out there for free, just look for them. Thats how I found them.

« Previous Page

Comment and Contribute

Your comment has been submitted and is pending approval.

Simon Moss



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