PHPBuilder - GIS Mapping with PHP; Part Two

RSS Twitter

GIS Mapping with PHP; Part Two

by: Simon Moss
February 9, 2004

In my previous article I described a very simple method of plotting longitude and latitude coordinates onto a drawn map of the world. With a very small amount of work modifying the script in the article - adding a FOR loop and some database code ) you could quite easily come up with a system like
The main limitation with this system is that you are restricted as to what background you can use. You have to have a predrawn raster image drawn in the correct scale and projection for the information you want to display. What if all you want to show is the location of a house in Prince Edward Island? Where do you get that raster image? What if the house is on the edge of the island and you want it centered on the screen? What if you want to zoom in and out without a significant loss of quality? What if goats overthrow the goverments of the world and forced us to wear itchy beards?. The answer to these questions is to draw your own background images dynamically. You can then scale, move, center, color to your hearts content. As for the goats .. well .. be nice to them and they will be nice to you.

What's the point of Vector?

So then first step is to get and process the data for the background image. The data we need is called vector data ( as opposed to the Raster image we were viously dealing with ). This is normally stored as a list of points divided into regions which make up complete polygon shape of the state / province / country. These points are normally listed as longitude and latitudes, which is great because we already have a function from the previous article to convert long/lats into screen coordinates - getlocactioncoords. Vector maps allow for easy scaling and movement. You can rotate, stretch and skew with a minimum of fuss and bother.
Now the big problem is finding the vector data in the first place. You can buy this information, or you can find basic vector information around the web. is a good place to start. Also check the US/Canadian Enviromental sites. Remember, normally the purchased products will have a greater level of detail. Most of the world is available for free in 1:1000000 scale, including outline maps for US and Canadian states/provinces ... just give google a try. For those lucky lucky people with access to Mapinfo check the sample disks that come with it. You should find coverage for North America plus a geocoded US Gazeteer. Another good google keyword to keep in mind is DCW - the digital chart of the world. This gives you polygons for every country in the world, plus more detailed information for North America ( states and provinces ). You can also find lakes, rivers, roads and outlines of major population areas.
Ok, so you've downloaded a chunk of data. We now run into our next problem. Most of the vector data on the web is in Arcview format ( .E00 ). We need to load this data into PHP in to variables which we can them read and manipulate. We need to be able to differentiate between the different types of vector information and also ( in later stages ) be able to assign colors and formating to the data.
The E00 format is text based ( in uncompressed form ) and there a few PHP routines out there that will load the various elements of an E00 file and draw it onto an image. However, in this article I will have -converted all my E00 into Mapinfo MIF format. "Why?" you ask. "You swine, we thought you were going to tell us how to load E00 directly" you scream. Well, for starters the MIF format is very easy to read and load in a script, and also allows for various attributes to be associated with the polygon region ( which although we ignore could be usefull to some people ). The other reason is that I use Mapinfo is that if you are serious about GIS, Mapinfo is a very handy tool to have. I'm not on a commission ( though a free mug would be nice ) , but from experience a proper GIS application becomes invaluable when dealing with large amounts of information and will allow you to export a wide variety of GEO vector data into the PHP scripts I've given you. It is great for splitting large vector regions into smaller, more manageable chunks ( think Quebec, a bit map at the best of times ) - the smaller the chunks of data you deal with the faster the processing time and the less work PHP will have to do. The other benefit is being able to align downloaded data and "triming" regions which are out of alignment. Remember free data from different sources will always have different levels of accuracy. Being able to align and trim data to a base map will make your maps look much more professional. Remember PHP will never be able to offer the complete functionality a true GIS application can, so if you are serious about mapping its worth splashing out on a licence on good GIS tool.
For those without access to GIS tools ( c'mon guys, there are some free utilities out there ), the import routine provided in this article could easily be modified to read from E00 files, and if I have time I will add the routine to do this in another article at a later date. If someone wants to do one and let me see it, even better. I will see if I can incorporate it.
Anyho, back to getting our data in.

Next Page »

Comment and Contribute

Your comment has been submitted and is pending approval.

Simon Moss



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