Steve Sperber
asked on
Upload a list of contact address to Google Map
how to import an excel file containing list of friends name and addresses into my map created in Google maps?
You can usually save an Excel file with a ".csv" suffix. It will produce a comma-separated values file, giving one line for each row of the spreadsheet. PHP has the fgetcsv() function that makes reading the names and addresses easy. Store them in a data base table. Then you can feed the rows to a geocoder or to a Google Static mapper to draw the maps.
Here's an article about how to use the mapper:
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_3350-Using-the-Google-Maps-API-in-PHP.html
Here's an article about how to use the mapper:
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_3350-Using-the-Google-Maps-API-in-PHP.html
<?php // RAY_google_static_map_class.php
error_reporting(E_ALL);
// DEMONSTRATE HOW TO USE THE GOOGLE MAPS API
// FOR A STATIC MAP OF SPECIFIC SIZE
// OPTIONAL CENTERED PUSHPIN
// OPTIONAL OTHER PUSHPIN(S) OR ICONS
// MAN PAGE: http://code.google.com/apis/maps/documentation/staticmaps/
// DEFINE THE GOOGLE STATIC MAPPING CLASS
class GSM
{
// THE MAP CENTER GEOCODE, ADDRESS OR LANDMARK
protected $center;
// MARKER DATA ARRAY
protected $markers;
protected $default_icon;
// OUR VARIABLES FOR THE MAP DISPLAY
protected $maptype;
protected $width;
protected $height;
protected $zoom;
protected $format;
// OUR VARIABLES FOR THE GOOGLE URL AND IMAGE TAG
protected $alt;
protected $title;
protected $class;
protected $id;
protected $usemap;
protected $sensor;
protected $url;
private $img;
// A CONSTRUCTOR TO SET THE DEFAULT VALUES
public function __construct()
{
// THE URL AND IMG TAG PARAMETERS
$this->alt = FALSE;
$this->class = FALSE;
$this->id = FALSE;
$this->usemap = FALSE;
$this->sensor = FALSE;
$this->title = TRUE;
$this->url = '';
$this->img = '';
// THE CENTER AND ZOOM SCALE OF THE MAP (IF OMITTED, GOOGLE WILL CALCULATE)
$this->center = NULL;
$this->zoom = NULL;
// THE CHARACTERISTICS OF THE MAP IMAGE
$this->maptype = 'hybrid'; // CHOOSE
$this->maptype = 'terrain'; // AMONG
$this->maptype = 'satellite'; // THESE
$this->maptype = 'roadmap'; // OPTIONS
$this->width = '640';
$this->height = '640';
$this->format = 'png';
// THE DEFAULT ICON
$this->default_icon = 'http://maps.google.com/mapfiles/ms/micons/question.png';
// AN ARRAY OF MARKER ARRAYS
$this->clearMarkers();
} // END CONSTRUCTOR
// A METHOD TO CLEAR THE MARKERS
public function clearMarkers()
{
$this->markers = array();
}
// A SETTER TO ADD MARKERS TO THE MAP
public function setMarker($geocode, $color='blue', $label='X')
{
// NOTE THAT THIS WILL WORK CORRECTLY MOST OF THE TIME
$geocode = urlencode(urldecode($geocode));
$this->markers[]
= array
( 'color' => $color
, 'label' => $label
, 'geocode' => $geocode
, 'icon' => FALSE
)
;
}
// A SETTER TO ADD ICONS TO THE MAP - VIEW SOURCE HERE: http://www.visual-case.it/cgi-bin/vc/GMapsIcons.pl
public function setIcon($geocode, $icon=FALSE)
{
// NOTE THAT THIS WILL WORK CORRECTLY MOST OF THE TIME
$geocode = urlencode(urldecode($geocode));
if (!$icon) $icon = $this->default_icon;
$this->markers[]
= array
( 'color' => FALSE
, 'label' => FALSE
, 'geocode' => $geocode
, 'icon' => $icon
)
;
}
// A SETTER TO OVERRIDE EACH OF THE DEFAULT VALUES
public function setCenter($geocode=NULL)
{
// NOTE THAT THIS WILL WORK CORRECTLY MOST OF THE TIME
$geocode = urlencode(urldecode($geocode));
$this->center = $geocode;
}
public function setMaptype($x)
{
$this->maptype = $x;
}
public function setFormat($x)
{
$this->format = $x;
}
public function setWidth($x)
{
$this->width = $x;
}
public function setHeight($x)
{
$this->height = $x;
}
public function setZoom($x=NULL)
{
$this->zoom = $x;
}
public function setAlt($x=FALSE)
{
$this->alt = $x;
}
public function setTitle($x=TRUE)
{
$this->title = $x;
}
public function setClass($x=FALSE)
{
$this->class = $x;
}
public function setId($x=FALSE)
{
$this->id = $x;
}
public function setUsemap($x=FALSE)
{
$this->usemap = $x;
}
public function setSensor($x=FALSE)
{
$this->sensor = $x;
}
// A METHOD TO PREPARE AND RETRIEVE THE MAPPING URL
public function asURL()
{
$s = 'false'; // SEE http://code.google.com/apis/maps/documentation/staticmaps/#Sensor
if ($this->sensor) $s = 'true';
// IF ICONS OR MARKERS ARE ON THE MAP, 'IMPLODE' THE DATA INTO THE URL
$marker_string = '';
foreach ($this->markers as $marker)
{
// PROCESS FOR CUSTOM ICONS
if ($marker['icon'])
{
$marker_string
= $marker_string
. '&markers='
. 'icon:'
. urlencode($marker['icon'])
. '|'
. $marker['geocode']
;
continue;
}
// PROCESS FOR STANDARD MARKERS
$marker_string
= $marker_string
. '&markers='
. 'color:'
. $marker['color']
. '|'
. 'label:'
. $marker['label']
. '|'
. $marker['geocode']
;
}
// SET CENTER AND ZOOM, IF PRESENT
$c = '';
if ($this->center) $c = "¢er=$this->center";
$z = '';
if ($this->zoom) $z = "&zoom=$this->zoom";
// MAKE THE URL
$this->url
= "http://maps.google.com/maps/api/staticmap?sensor=$s"
. $c
. $z
. "&size=$this->width" . 'x' . "$this->height"
. "&format=$this->format"
. "&maptype=$this->maptype"
. "$marker_string"
;
return $this->url;
}
// A METHOD TO PREPARE AND RETRIEVE THE HTML IMAGE TAG
public function asIMG()
{
// GET THE URL
if (!$this->url) $this->url = $this->asURL();
// GET THE ALT TEXT
$a = "$this->maptype" . ' centered ' . "$this->center";
if ($this->alt !== FALSE) $a = $this->alt;
// REQUIRED FIELDS
$this->img = '<img src="' . $this->url . '" alt="' . $a . '"';
// OPTIONAL FIELDS - PROVIDE A DEFAULT TITLE
$t = "$this->maptype" . ' centered ' . "$this->center";
if ($this->title === TRUE ) { $this->img .= ' title="' . $t . '"'; }
elseif ($this->title !== FALSE) { $this->img .= ' title="' . $this->title . '"'; }
// OPTIONAL FIELDS MAY BE OMITTED
if ($this->class !== FALSE) { $this->img .= ' class="' . $this->class . '"'; }
if ($this->id !== FALSE) { $this->img .= ' id="' . $this->id . '"'; }
if ($this->usemap !== FALSE) { $this->img .= ' usemap="' . $this->usemap . '"'; }
// CLOSE THE IMAGE TAG AND CLEAR THE CONSUMED URL
$this->img .= ' />';
$this->url = FALSE;
return $this->img;
}
// A METHOD TO RETRIEVE THE IMAGE DATA (STORING DATA MAY VIOLATE GOOGLE TOS!)
public function asData()
{
// GET THE URL
if (!$this->url) $this->url = $this->asURL();
// READ AND RETURN THE URL
return file_get_contents($this->url);
}
} // END CLASS
// MAKE A GOOGLE STATIC MAP OBJECT AND TEST IT OUT
$x = new GSM;
$x->setWidth(620);
$x->setHeight(620);
$x->setZoom(12);
// SET A CENTER POINT (BUT NO MARKER) BY LANDMARK NAME ALONE
// $x->setCenter("THE WHITE HOUSE");
// SET A MARKER BY GEOCODE (LAT/LON PAIR)
$x->setMarker("38.930387,-77.147777", 'green', 'H');
// SET A MARKER BY PLACE NAME, CITY, STATE
$x->setMarker("Landon School, Bethesda, MD", 'brown', 'L');
// SET A MARKER BY STREET ADDRESS AND ZIP CODE
$x->setMarker("6327 Everglades Drive 22312", 'orange', 'P');
// ECHO THE <img /> TAG INTO OUR HTML TO DRAW THE MAP
echo $x->asIMG();
echo PHP_EOL . '<br clear="all" />';
// SHOW THE OBJECT
echo "<pre>" . PHP_EOL;
print_rr($x);
echo"</pre>" . PHP_EOL;
// USE THE GSM OBJECT TO DRAW ANOTHER MAP WITH A SWIMMER IN THE TIDAL BASIN
$x->clearMarkers();
$x->setZoom();
$x->setWidth(500);
$x->setHeight(400);
$x->setCenter("THE US CAPITOL, WASHINGTON DC");
$x->setMarker("THE WHITE HOUSE", 'red', 'W');
$x->setMarker("THE US CAPITOL, WASHINGTON DC", 'blue', 'C');
$x->setIcon("THE TIDAL BASIN, WASHINGTON DC", 'http://maps.google.com/mapfiles/ms/micons/swimming.png', 'false'); // NO SHADOW
echo $x->asIMG();
// SHOW THE OBJECT
echo "<pre>" . PHP_EOL;
print_rr($x);
echo"</pre>" . PHP_EOL;
// UNRELATED FUNCTION TO MAKE THE OUTPUT OMIT THE PRIVATE PROPERTIES
function print_rr($thing)
{
$str = print_r($thing, TRUE);
$arr = explode(PHP_EOL, $str);
$num = count($arr) - 1;
foreach ($arr as $ptr => $txt)
{
if (preg_match('/:private]/', $txt))
{
unset($arr[$ptr]);
}
}
echo implode(PHP_EOL, $arr);
}
ASKER
For the attached code how. can you pl attach the Excel(or XML file) for sample. so that i will attach to different maps and get the same result.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
@jgdvishnu: You seem to be giving out a lot of marked down grades today. I'd like you to read the grading guidelines and then explain why you left this question without comment for several weeks, only to close it with a bad grade. What did you expect me to do? Please explain.
https://www.experts-exchange.com/help/viewHelpPage.jsp?helpPageID=26
Looking forward to your response about why you gave a bad grade to this answer. ~Ray
https://www.experts-exchange.com/help/viewHelpPage.jsp?helpPageID=26
Looking forward to your response about why you gave a bad grade to this answer. ~Ray
but you can create an xml file and use that file with google maps to display data:
http://econym.org.uk/gmap/basic3.htm
hope it helps