HERE Maps API - Create map markers from XML data
m (Maveric -) |
hamishwillee
(Talk | contribs) m (Hamishwillee - Update categories) |
||
| Line 1: | Line 1: | ||
| − | [[Category: | + | [[Category:Browser]][[Category:Ovi Maps]][[Category:Location]] |
{{Abstract|This article explains how to read a structured XML file and create map markers based on the data }} | {{Abstract|This article explains how to read a structured XML file and create map markers based on the data }} | ||
Revision as of 02:27, 19 August 2011
This article explains how to read a structured XML file and create map markers based on the data
Contents |
Introduction
Sometimes it would be useful to have the data for map, e.g. for markers, to reside on a separate file. In this article an example is presented, using which you can yourself utilize a separate XML file for creating map content. The example will use Javascript and jQuery.
Prerequisites
Ovi Maps API supported web browser (basically any modern web browser).
JQuery downloaded and installed.
Change the directory names for your own version of the example, if needed.
Example code
Note that the example code leaves you room to implement your own infoBubbles and some other functionality is there if you need it, otherwise you can remove it; e.g. the behaviour of the map and availability of components. Feel free to copy and modify for your own purposes!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>Ovi Maps API example - Multiple markers created from XML data</title>
</head>
<p>
<body onLoad="init();">
<p style="text-align: center;">- OVI MAPS API EXAMPLE -</p>
<p style="text-align: center;">READ DATA OF MULTIPLE MARKERS FROM XML FILE AND PUT THE MARKERS ON THE MAP</p>
<center>
<div id="map" style="width:600px; height:400px; position: relative"></div>
</center>
<p>
<script src="http://api.maps.ovi.com/jsl.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="js/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="js/markers.js"></script>
</p>
<p> </p>
</body>
</html>
var markerCoords;
var mapContainer;
var container;
var myMap;
var bubbles=new Array();
// When the HTML page body section is loaded this function will be called.
function init(){
// Here we create an Ovi Maps within a Container.
mapContainer = document.getElementById("map");
myInfoBubbles = new ovi.mapsapi.map.component.InfoBubbles();
myMap = ovi.mapsapi.map,
map = new myMap.Display(mapContainer, {
center: [52.59, 13.3], zoomLevel: 10,
components: [ new myMap.component.Behavior(),
new ovi.mapsapi.map.component.ZoomBar(),
new ovi.mapsapi.map.component.Overview(),
new ovi.mapsapi.map.component.TypeSelector(),
new ovi.mapsapi.map.component.ScaleBar(),
myInfoBubbles ]
});
container = new ovi.mapsapi.map.Container();
// Define the XML filename to read that contains the marker data
placeMarkersOnMaps('uploads/markers.xml');
}
// This function gets passed the marker XML data file name
function placeMarkersOnMaps(filename)
{
var counter = 0;
$.get(filename, function(xml){
$(xml).find("marker").each(function()
{
//Read the name, address, latitude and longitude for each Marker
var name = $(this).find('name').text();
var address = $(this).find('address').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
//Used for testing:
//alert("Name:"+name+" Address:"+address+" Lat:"+lat+" Lon:"+lng);
//Put each marker on the map as the data has been read.
markerCoords = new ovi.mapsapi.geo.Coordinate(parseFloat(lat), parseFloat(lng));
marker = new ovi.mapsapi.map.StandardMarker(markerCoords,
{text:name, brush:"#FF69B4", pen:"#09F911", textPen:"#00009C", shape: "star"});
container.objects.add(marker);
// Used for testing:
// myInfoBubbles.addBubble(name, markerCoords);
// counter ++ 1;
// alert(counter);
});
// Add the marker container .
map.objects.add(container);
});
// Zoom into the markers.
alert("Markers have been loaded. Hit OK to zoom the map into the area covering the markers.");
map.zoomTo(container.getBoundingBox(), false);
}
Example XML file
<?xml version="1.0"?>
<markers>
<marker>
<name>M1</name>
<address>ADDRESS 1</address>
<lat>52.516617</lat>
<lng>13.377675</lng>
</marker>
<marker>
<name>M2</name>
<address>ADDRESS 2</address>
<lat>52.525286</lat>
<lng>13.369499</lng>
</marker>
<marker>
<name>M3</name>
<address>ADDRESS 3</address>
<lat>52.518506</lat>
<lng>13.375082</lng>
</marker>
<marker>
<name>M4</name>
<address>ADDRESS 4</address>
<lat>52.52446</lat>
<lng>13.381562</lng>
</marker>
<marker>
<name>M5</name>
<address>ADDRESS 5</address>
<lat>52.523572</lat>
<lng>13.378451</lng>
</marker>
<marker>
<name>M6</name>
<address>ADDRESS 6</address>
<lat>52.530386</lat>
<lng>13.385189</lng>
</marker>
<marker>
<name>M7</name>
<address>ADDRESS 7</address>
<lat>52.518545</lat>
<lng>13.363709</lng>
</marker>
<marker>
<name>M8</name>
<address>ADDRESS 8</address>
<lat>52.515738</lat>
<lng>13.378515</lng>
</marker>
</markers>
Summary
Edit the script and file for your own purposes, hope you find this article useful.
Tested with
Microsoft XP Pro and the following browsers:
Opera 5.0.5 & Firefox 5.0
See the example live here
http://mapswidgets.com/markers.html
For more on Ovi Maps API
Please go to http://api.maps.ovi.com

