Google Map v3 Editing & Saving Markers in Database – II
In previous article I discussed about loading the Google map on a HTML page, adding-removing the markers and displaying info windows. In this article we are moving to the next step, here we are going to load markers from PHP generated XML file, edit and save marker information into the database, finally creating a total custom map for the website.
I suggest you to go through previous post first, because you don’t want to get confused with markers and info windows of the map while reading this article.
Since our code is only going to expand, it’s a good idea to break them into small functions, so that we can just pass the arguments it requires and use them rapidly in our programs. Take a look at the functions below, first function creates the marker with specified parameters, second one simply removes the marker from database and the map, the third function is used to save marker information into the database using jQuery ajax.
As you can see, the create_marker function requires some typical arguments to add a marker on the map. Map coordinates, map title, description, icon path and some boolean variables. The title and description will be used in info window, and then we add the event listeners to the marker object, which will make info window pop-up or delete the marker from the map. The newly created markers are set as draggable, so the user can move the markers to new position before saving the information. It is bit difficult to explain each line from here, I just hope you’ll go through the comment lines to help you understand more clearly.
The remove_marker() function removes the marker from the map using the exact marker coordinates. In the database it looks for longitude and latitude values to delete a marker record. As explained earlier new markers are set to draggable, but the saved markers are not. Here we simply check this marker value and determine whether it should be removed from the map only or from database as well.
The save_marker function is simply used to pass the POST variables to our PHP page using jQuery Ajax, and then the variables will be stored in database. On a successful response, it replaces the HTML content of info window, set marker draggable to false, and also changes the icon. Don’t forget to replace icon URL for the marker.
Putting Functions Together
We now have all the required functions, we can now load the Google map into the page. Whenever required these functions will be called within the code to do the specific task. In previous article the jQuery was included in the page, here too we will be using jQuery to load Google Map and to make Ajax request to PHP page.
To retrieve and save the marker details, I’ve create a table in the MySQL database. It’s exactly the same table from Google Store Locator example page. Just run this SQL query in your phpMyAdmin page to have this table created.
PHP XML Generator & Database Connector
Once our custom map page is created, we can now move on to server side coding with PHP, in other words, we need to create a PHP page that generates XML file for the marker, and also adds and removes the records from the database. The code below is derived from phpsqlajax_genxml.php, but I’ve modified it to implement MySQLi. The code block that saves and deletes markers from database record was added later. Code uses PHP DOMDocument to generate XML file. Saving & deletion of marker will occur only when the form data is sent with the HTTP POST method, else the file will generate XML document for the map using DB records as usual.
At this point, I am sure you are able to clutch few things about Google Map, in this brief article. There are many more things you can do with your own custom map, create local directory, restaurant or the store locator, sky is the limit. I have put everything together in downloadable file, just download it from link below and try it yourself in your local testing environment. Good luck!
Saran Chamling. (He loves the web technology, and enjoys designing, exploring and writing about it @saaraan.com).