About | Contact | SUBMIT PRESS | Advertise | FAQ
Spatial Newsletters | Twitter |
HomeNewsArticlesExpertsDataJobsEDULBSSTOREEVENTSDirectoryBLOGPHOTOSSocial Media
Software | Spotlights on Geospatial Data | Web Services | Mashup Zone | IMAGING | Hardware | Social Media  
advertisement

Top Geo News
Put Your News here! 
Social Connect




vimeostumble


Facebook

GISuser Sponsor


Recent Site Additions
Featured Webinar
Featured Video


GISuser TOP 10 Viewed Videos
More Photos and Videos

GIS Job Opportunities
 

Loads of GIS Jobs!

GIS Analyst
Data Processor
Software Developer
Support Analyst - Database
Applications Prototype Specialist–Web Development
Research Assistant for Geographic Information Centre
Academic Associate in Geographic Information Centre
Director of Mobile Product and Technology (Denver)
Subject Matter Expert — Infrastructure Industry - 12WD11118
GIS Analyst Senior
GISuser Sponsor

Directory
Illunis 
Category: Aerial Photography


GISuser Sponsor


AnyGeo - Anything Geospatial

↑ Grab this Headline Animator

GISuser RSS Feed
Home arrow Articles arrow Web Services arrow GIS and mapping in PHP     

Feature - Using QR Codes to Deliver Maps Electronically
HOT JOB
post a GIS job * JOB OPPS * Subject Matter Expert, Autodesk CA / GIS Developer, VA
FEATURE - Using Social Media and Twitter To Land The Perfect Job
Submit Your GIS/Geo News/PR to GISuser
GIS and mapping in PHP  E-mail
Written by Simon Moss   
13 July 2004
This is the first in a series of articles designed to offer the reader a few pointers on how to create your own basic GIS system for free. I do not claim to be a GIS expert, and there may be better ways to do things, but hopefully these articles will give you a start in the right direction.

There are a number of great online GIS (Geographic Information Systems) solutions out there, ranging from Mappoint to Mapquest to some cool PHP projects. However, it is still nice to be able to be able plot you own data and put some basic mapping utilities on your site with a minimum of fuss and bother.

In this article we will start with the absolute basics - plotting a single location on a pre drawn map of the world. Later articles will go into drawing vector maps, drawing roads and rivers and labeling objects all using the principles in this article.

For this article you will need:

PHP with GD installed
A pair of scissors
An adult to help you

Finding your place in this world

To plot an object on any map, be it a house or a herd of caramelized Wombats, the object needs to be geocoded - that is have a map coordinate allocated to it. For all examples we used a standard longitude (long) and latitude (lat) coordinate. There a numerous other coordinate systems out there - some a lot more accurate, but this is the most common, the easiest to plot and suits our needs. The downside of directly plotting long/lat coordinates is that you will get distortion as you near the poles. However, for our uses this doesn't pose a problem.

The two coordinates of a longitude and latitude refer to the angle in degrees from the equatorial plane of the earth, both up and down. Longitude lines extend from pole to pole giving us an "X" coordinate, Latitude lines give us the "Y" coordinate. These can either be written as a decimal value ( ie 23.323232 ) or as degrees, minutes and seconds ( D'M'S ). For storing our coordinates we used the decimal version as it's a lot easier and saves a lot of processing time. There are a number of sites with Javascript utilities which will convert coordinates from D'M'S ( degrees, minutes and seconds ) to the decimal format. I happen to use a Sharp EL-546 scientific calculator which has the function built in.

There are a number of ways to finding the long/lat of a point in the world, however a quick and easy way is to used Microsofts online GIS service Mappoint ( www.mappoint.com ). Find your location using Mappoint search utilities and make sure it is in the center of the map. Right mouse click on the map, and you will find long/lat coordinates embedded in the URL of the map image. It is also worth looking at www.geogratis.com, plus a number of government operated environmental sites will have map data which you can download for free. Those of you who have Mapinfo will also find very useful geocoded data on the sample discs which come with it.

The point we are plotting for this article is my 64 bedroom mansion, located in the bustling urban metropolis which is Prince Edward Island, Canada. Using Mappoint I have discovered my location is:

Longitude: -63.10774861954596
Latitude: 46.2899306519141

We now need a base map to plot our point on. In future articles we will generate this ourselves, however to start we will use a simple pre drawn JPG file. The base map we are using is called earth_310.jpg, and is and view of the earth in what is called a Cylindrical projection.

The original of this image can be found in various forms all over the web in various sizes and scales. A cylindrical projection is the simplest projection to plot long/lat coordinates onto, again with a minimum of conversion needed reducing processor overhead. For our purposes you can simply right click the image and "Save picture as ..." to your hard drive.

The base map is scaled to 310x155 for ease of use, but you can rescale this map to any size.

We are now ready to generate the code to plot our point.

Plots and schemes

The basic steps for generating the map are:

Load the background map.
Convert and scale the long/lat coordinates to screen coordinates.
Plot the point.
Return the finished map as an image.

To convert the long/lat to screen coordinate we have a created a function called getlocationcoords. This takes the longitude and latitude coordinates plus the size of the base map and return the screen coordinates in an associative array. $width and $height are calculated from the size of the background image. In future projects these variables are used scale the map and set the zoom level.

<?php
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));
}
?>

Once the coordinates have been converted it's as simple as drawing a rectangle on the base map using the returned array to mark our location.

So, the code to create the map:

<?php

// These are the coordinates the location we wish to plot.
// These are being passed in the URL, but we will set them to a default if nothing is passed.

if(empty($long))$long = -63.10774861954596;
if(empty($lat)) $lat = 46.2899306519141;

// First we load the background/base map. We assume it's located in same dir as the script.
// This can be any format but we are using JPG in this example
// We will also allocate the color for the marker

$im = imagecreatefromjpeg("earth_310.jpg");
$red = imagecolorallocate ($im, 255,0,0);

// Next need to find the base image size.
// We need these variables to be able scale the long/lat coordinates.

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

// Now we convert the long/lat coordinates into screen coordinates

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

// Now mark the point on the map using a red 4 pixel rectangle

imagefilledrectangle($im,$pt["x"]-2,$pt["y"]-2,$pt["x"]+2,$pt["y"]+2,$red);

// Return the map image. We are using a PNG format as it gives better final image quality than a JPG

header ("Content-type: image/png");
imagepng($im);
imagedestroy($im);

?>

To load the map call the PHP code from an IMG tag, passing the longitude and latitude in the long and lat variables:

<IMG SRC="map_code.php?long=long&lat=lat">

You could easily modify this code to read long/lat coordinates from a database or a delimited text file and plot multiple points.

Summary

This is a very basic script. However the basic principle will allow you to draw very complicated maps.

The important part is the getlocationcoords function - once you have geocoded your data and have the routines to plot the points on the screen, the sky's the limit!

About the Author

The author, Simon Moss,  has published a series of articles on GIS/mapping in PHP which can be accessed at www.web-max.ca/PHP . For some fine examples of this technology in use please visit http://www.staycanada.ca

 

Last Updated ( 14 July 2004 )
 
< Prev   Next >

Submit Your GIS/Geo News/PR to GISuser



Search the Spatial Media Web Resources
Developer Tip
PhoneGap - OpenSource Devlopment Framework; Deploy to 7 Major Mobile Platforms
 
HOT Devices
Introducing the RAMPAGE 6 Rugged Notepad with Android 
Social Media Tips
Using Social Media and Twitter To Land The Perfect Job - Tips, Tricks, Trends - Finding a job can be a daunting task but it doesn't have to be. Many are turning to social media, in particular Twitter, to help score a new gig.
 

deliciousrssnewsletterlinkedinfacebooktwitter

More GISuser Features

feature articlesSee more GISuser Features HERE / See GISuser Spotlights Here

AnyGeo - Geospatial Updates from Glenn

↑ Grab this Headline Animator

Recent Directory Listings
1. SAIC GeoRover Mobile
    Category: GIS for Tablets - iPad and Android Tablet Geo Solutions
    Created: May 22, 2012
2. Arvada Colorado OpenData
    Category: OpenGov and OpenData
    Created: May 21, 2012
3. Colorado OpenData
    Category: OpenGov and OpenData
    Created: May 21, 2012
4. Inlailawatash Forestry...
    Category: Geo Tech Companies & Consultants
    Created: May 15, 2012
5. CSU Fresno
    Category: Distance Learning, Online GIS Education
    Created: May 10, 2012
Show more...
Featured Events

 List Your Event Here 

2X A Week Newsletter

See Recent edition
newsletter

subscribe GISuser

We won't share your address!
Sponsor

Popular Stuff!


RSS and Feeds

Software

software reviews
Geo Technology Software

GISuser Site Sponsor


Most Popular
GISuser HOT Spots!

Google Mashup Zone
GISuser WebMaps
Free Data Articles
Spotlights & Tips
GISuser Resumes
Data Links
10 Cool Things
The LBS Zone!

Partner Sites


lbszone.com


symbianone

A Spatial Media LLC property

 




Spatial Media, LLC ©2003 - 2011 All rights reserved / Privacy Statement