Welcome to the fourth post in our series on creating your own store locator map. In this post we are going to create an XML file which will process the calls to the database in a browser.
Copy and paste this code into a blank text file:
<?php
require("databaseconnect.php");
// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("Sheet1");
$parnode = $dom->appendChild($node);
// Opens a connection to a mySQL server
$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {
die("Not connected : " . mysql_error());
}
// Set the active mySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ("Can\'t use db : " . mysql_error());
}
// Search the rows in the Sheet1 table
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);
$result = mysql_query($query);
if (!$result) {
die("Invalid query: " . mysql_error());
}
header("Content-type: text/xml");
// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
$node = $dom->createElement("Sheet1");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name", $row['name']);
$newnode->setAttribute("address", $row['address']);
$newnode->setAttribute("lat", $row['lat']);
$newnode->setAttribute("lng", $row['lng']);
$newnode->setAttribute("distance", $row['distance']);
}
echo $dom->saveXML();
?>
Save it as getoutput.php. Upload the file to your server. To make sure that the XML is outputting correctly, go to www.yourwebsite.com/getoutput.php?lat=37&lng=-122&radius=25. You should see output like this:
<?xml version="1.0"?> <Sheet1><marker name="Location #1" address="Address 1" lat="37.402653" lng="-122.079353" distance="0.38091455044131"/> <marker name="Location #2" address="Address 2" lat="37.393887" lng="-122.078918" distance="0.5596115438175"/> <marker name="Location #3" address="Address 3" lat="37.387138" lng="-122.083237" distance="1.0796074495809"/> ... </Sheet1>
Once we have the XML working in the browser, we are ready to move on to creating the actual map.
Here are links to all of the posts in this series on how to create your own store locator map:
Create a spreadsheet of your store locations
Create and populate the MySQL table
Create a PHP file which will be used to connect to the database
Create a PHP file which will output the XML file results of a search
Create the HTML page which contains the store locator map
And here are some hints and tips to help create and customize your store locator map:
Using your own custom markers for the locations in place of Google’s default markers
How to prevent the map from zooming in to close on a single location
