Google Map that uses an XML file to create markers

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • TrevRex
    New Member
    • Aug 2008
    • 2

    Google Map that uses an XML file to create markers

    Hello,

    I work for a non-profit in San Diego as a GIS Specialist. I have had to teach myself about some scripting to create some dynamic maps, but I am still very limited in my skills, so I have had to explore the internet in order to discover various tutorials and examples that have led me on a positive path.

    Right now I am working on a Google Mash-Up that will incorporate over 14,000 records, which will appear as separate markers that will have pop-up info bubbles with additional info inside (using html), once the marker is clicked.

    Here is the XML script example that is used in the tutorial I am following:

    <markers>
    <marker lat="43.65654" lng="-79.90138" html="Some stuff to display in the&lt;br&gt;Fi rst Info Window"
    label="Marker One" />
    <marker lat="43.91892" lng="-78.89231" html="Some stuff to display in the&lt;br&gt;Se cond Info Window"
    label="Marker Two" />
    <marker lat="43.82589" lng="-79.10040" html="Some stuff to display in the&lt;br&gt;Th ird Info Window"
    label="Marker Three" />
    </markers>

    ...and this is how it looks when the file is retrieved by the java script and mapped: http://econym.googlepa ges.com/example_map3.ht m

    This is the java script that creates the Google Map. I have emboldened the section of the script that retrieves the data and parses it to create the markers:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Google Maps</title>
    <script src="http://maps.google.com/maps?file=api&a mp;v=2&amp;key= ABQIAAAA6GoL8P5 zqjQlG5A5uM1ETB SUPozAscB0cY3RG 8xEGnZyeom4axRy Sak889rVpvHYRsV 4f9OZZzbboA"
    type="text/javascript"></script>
    </head>
    <body onunload="GUnlo ad()">

    <!-- you can use tables or divs for the overall layout -->
    <table border=1>
    <tr>
    <td>
    <div id="map" style="width: 800px; height: 1200px"></div>
    </td>
    <td width = 200 valign="top" style="text-decoration: underline; color: #4444ff;">
    <div id="side_bar"> </div>
    </td>
    </tr>
    </table>


    <noscript><b>Ja vaScript must be enabled in order for you to use Google Maps.</b>
    However, it seems JavaScript is either disabled or not supported by your browser.
    To view Google Maps, enable JavaScript by changing your browser options, and then
    try again.
    </noscript>


    <script type="text/javascript">
    //<![CDATA[

    if (GBrowserIsComp atible()) {
    // this variable will collect the html which will eventualkly be placed in the side_bar
    var side_bar_html = "";

    // arrays to hold copies of the markers used by the side_bar
    // because the function closure trick doesnt work there
    var gmarkers = [];
    var i = 0;


    // A function to create the marker and set up the event window
    function createMarker(po int,name,html) {
    var marker = new GMarker(point);
    GEvent.addListe ner(marker, "click", function() {
    marker.openInfo WindowHtml(html );
    });
    // save the info we need to use later for the side_bar
    gmarkers[i] = marker;
    // add a line to the side_bar html
    side_bar_html += '<a href="javascrip t:myclick(' + i + ')">' + name + '</a><br>';
    i++;
    return marker;
    }


    // This function picks up the click and opens the corresponding info window
    function myclick(i) {
    GEvent.trigger( gmarkers[i], "click");
    }


    // create the map
    var map = new GMap2(document. getElementById( "map"));
    map.addControl( new GLargeMapContro l());
    map.addControl( new GMapTypeControl ());
    map.setCenter(n ew GLatLng( 37.251699,-119.604315), 7);


    *// Read the data from testXML2blackpo olformat.xml*
    *var request = GXmlHttp.create ();*
    *request.open(" GET", "testXML2blackp oolformat.xml", true);*
    *request.onread ystatechange = function() {*
    *if (request.readyS tate == 4) {*
    *var xmlDoc = GXml.parse(requ est.responseTex t);*
    *// obtain the array of markers and loop through it*
    *var markers = xmlDoc.document Element.getElem entsByTagName(" ConnectoryRecor d");*

    for (var i = 0; i < markers.length; i++) {
    // obtain the attribues of each marker
    var lat = parseFloat(mark ers[i].getAttribute(" lat"));
    var lng = parseFloat(mark ers[i].getAttribute(" lng"));
    var point = new GLatLng(lat,lng );
    var html = markers[i].getAttribute(" html");
    var label = markers[i].getAttribute(" label");
    // create the marker
    var marker = createMarker(po int,label,html) ;
    map.addOverlay( marker);
    }

    // put the assembled side_bar_html contents into the side_bar div
    document.getEle mentById("side_ bar").innerHTM L = side_bar_html;
    }
    }
    request.send(nu ll);
    }

    else {
    alert("Sorry, the Google Maps API is not compatible with this browser");
    }
    // This Javascript is based on code provided by the
    // Blackpool Community Church Javascript Team
    // http://www.commchurch. freeserve.co.uk/
    // http://econym.googlepa ges.com/index.htm

    //]]>
    </script>
    </body>

    </html>

    Here is my delima--
    This is the xml format that I need to use because it can accept the rest of my excel file and loop it through the 14,000+ records to create a functioning xml file. This is just a sample (2 records) of the larger file:

    <?xml version="1.0" encoding="UTF-8" standalone="yes " ?>
    <ConnectoryAug2 008>
    <ConnectoryReco rd>
    <lng>-117.03683</lng>
    <lat>32.94450 5</lat>
    <ConnectoryID>1 </ConnectoryID>
    <Name>$2.95 Guys</Name>
    <StreetAddress> 13750 Stowe Drive</StreetAddress>
    <City>Poway</City>
    <State>CA</State>
    <Zip>92064</Zip>
    <Marker>White </Marker>
    <IndustryGroup> Technical Services</IndustryGroup>
    <ConnectoryProf ileLink>http://connectory.com/search/profile_view.as px?connectoryId =1</ConnectoryProfi leLink>
    </ConnectoryRecor d>
    <ConnectoryReco rd>
    <lng>-117.272843</lng>
    <lat>33.13337 </lat>
    <ConnectoryID>2 </ConnectoryID>
    <Name>(GLDS) Great Lakes Data Systems</Name>
    <StreetAddress> 5954 Priestly Drive</StreetAddress>
    <City>Carlsba d</City>
    <State>CA</State>
    <Zip>92008</Zip>
    <Marker>Orang e</Marker>
    <IndustryGroup> Technology</IndustryGroup>
    <ConnectoryProf ileLink>http://connectory.com/search/profile_view.as px?connectoryId =2</ConnectoryProfi leLink>
    </ConnectoryRecor d>
    </ConnectoryAug20 08>

    This is the tutorial where I found the formatting techniques to successfully create the large xml file that will format/convert my excel file properly: http://www.mrexcel.com/tip064.shtml

    These variables should appear as html in the info bubble:

    <ConnectoryID>2 </ConnectoryID>
    <Name>(GLDS) Great Lakes Data Systems</Name>
    <StreetAddress> 5954 Priestly Drive</StreetAddress>
    <City>Carlsba d</City>
    <State>CA</State>
    <Zip>92008</Zip>
    <IndustryGroup> Technology</IndustryGroup>
    <ConnectoryProf ileLink>http://connectory.com/search/profile_view.as px?connectoryId =2</ConnectoryProfi leLink>

    The "Marker" variable instructs Google Maps to label the marker with a particular color. I will be so grateful to the person(s) that helps me get through this wall that I have been hitting for a long time. It's very difficult without having the luxury of peers who know about these types of issues.

    Thank you!!
Working...