×
Namespaces

Variants
Actions
(Difference between revisions)

HERE Maps API - How to create a custom overlay

From Nokia Developer Wiki
Jump to: navigation, search
jasfox (Talk | contribs)
(Jasfox - - Summary)
jasfox (Talk | contribs)
m (Jasfox - links)
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:Draft]][[Category:Nokia Maps]][[Category:Code Examples]][[Category:JavaScript]]
+
[[Category:Nokia Maps]][[Category:Code Examples]][[Category:JavaScript]]
{{UnderConstruction|timestamp=20120615112503 }}
+
{{Tip | Although the background information here is still correct, the code in the article refers to an outdated version of the API. Much of the code  has been superseded as it  is now possible create custom overlays '''directly''' using the technique described here: http://developer.here.net/apiexplorer/examples/api-for-js/demos/overlay.html The code may still prove useful when creating and attempting to align '''your own''' custom overlay over a the map however.}}
  
 
{{Abstract|This article explains how to create a custom overlay and add data from your own tile server to the map. }}
 
{{Abstract|This article explains how to create a custom overlay and add data from your own tile server to the map. }}
 
{{ArticleMetaData <!-- v1.2 -->
 
{{ArticleMetaData <!-- v1.2 -->
|sourcecode= [[Media:nm_overlay.zip]]
+
|sourcecode= [[Media:nm overlay.zip]]
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 
|devices= Internet Explorer, Google Chrome, Firefox
 
|devices= Internet Explorer, Google Chrome, Firefox
Line 10: Line 10:
 
|platform= Web
 
|platform= Web
 
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
 
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
|dependencies= Nokia Maps 2.2.0
+
|dependencies= Nokia Maps 2.2.3
 
|signing= <!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 
|signing= <!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
Line 26: Line 26:
 
}}
 
}}
 
{{SeeAlso|
 
{{SeeAlso|
*   [http://api.maps.nokia.com/ Nokia Maps API]  
+
* [http://developer.here.net/javascript_api Nokia Maps API]
* [[Nokia Maps API - How to cluster map markers| How to cluster map markers]]
+
* [http://developer.here.net/apiexplorer/examples/api-for-js/demos/overlay.htmll Custom overlay tile provider example]
* [[Implementing a custom MapUrlProvider overlay with Maps API for Java ME]]
+
* [http://developer.here.net/apiexplorer/examples/api-for-js/data-visualization/map-with-value-heat-map.html Rendering a value based heat map]
* [http://api.maps.nokia.com/en/playground/examples/maps/heatmap/valueheatmap.html Rendering a value based heat map]
+
* [[Nokia Maps API - How to cluster map markers| How to cluster map markers]]
 +
* [[Implementing a custom MapUrlProvider overlay with Maps API for Java ME|Custom overlay tile provider with Maps API for Java ME]]
 
  }}
 
  }}
  
Line 37: Line 38:
 
For extremely large data sets, it no longer makes sense to add each data point as an individual {{Icode|marker}}, {{Icode|image}} or {{Icode|polyline}}. In situations such as displaying weather or traffic conditions over a map,  it would be less processor intensive to retrieve pre-built images from a tiler server rather than re-calculating and adding a large number of {{Icode| mapObjects}} on to the map {{Icode|display}}.  The cost of making a few extra round trips to retrieve data from a server will be much smaller than the equivalent client side processing of adding hundreds of thousands of objects onto the map.
 
For extremely large data sets, it no longer makes sense to add each data point as an individual {{Icode|marker}}, {{Icode|image}} or {{Icode|polyline}}. In situations such as displaying weather or traffic conditions over a map,  it would be less processor intensive to retrieve pre-built images from a tiler server rather than re-calculating and adding a large number of {{Icode| mapObjects}} on to the map {{Icode|display}}.  The cost of making a few extra round trips to retrieve data from a server will be much smaller than the equivalent client side processing of adding hundreds of thousands of objects onto the map.
  
This article introduces a JavaScript library to '''overlay''' images over a map. It handles the data calls to an arbitrary tile server which generates tiles in the Normalised [http://en.wikipedia.org/wiki/Mercator_projection Mercator projection], which is the commonest format for online maps. It also handles the necessary attribution of the overlay images.  The code example retrieves Map Tiles from a tile server run by the National Library of Scotland . The mapping is based on out-of-copyright Ordnance Survey maps, dating from the 1920s to the 1940s.
+
This article introduces a JavaScript library to '''overlay''' images over a map. It handles the data calls to an arbitrary tile server which generates tiles in the Normalised [http://en.wikipedia.org/wiki/Mercator_projection Mercator projection], which is the commonest format for online maps. It also handles the necessary attribution of the overlay images.  The code example retrieves Map Tiles from a tile server run by the National Library of Scotland . The mapping is based on out-of-copyright Ordnance Survey maps, dating from the 1920s to the 1940s.
 +
 
 +
== How Map Providers and Overlays Work ==
 +
 
 +
For the base '''map providers''', the globe is divided into individual map tiles. These are retrieved online from Nokia’s map tile service.
 +
*  At minimum zoom, the world is contained in a single 256x256 pixel tile.
 +
*  At the next zoom level up, the world is 2 tiles wide and 2 tiles high. Then 4x4, 8x8, 16x16 etc.
 +
*  Each zoom level splits the tiles in two, doubling the number of tiles across the width and height
 +
*  Each Map is based on the Normalized Mercator projection.
 +
 
 +
 
 +
Custom '''overlays''' work in the same fashion - using your own map tile server complex visual data can be displayed at different zoom levels.
 +
 
 +
*  One tile at minimum zoom,  then 2x2, 4x4 and so on.
 +
*  Must be based on the Normalized Mercator projection.
 +
*  Use {{Icode|.png}} tiles to support transparency, so underlying map can be seen beneath your data.
 +
 
 +
[[File:nm overlay.png]]
 +
 
 +
== Normalised Mercator Projection ==
 +
 
 +
The Nokia Maps API offers maps using the ''Normalised Mercator Projection''. This covers the globe as a square from 85.0511°N to 85.0511°S and across all longitudes. At the lowest zoom this is contained within an individual map tile. The number of map tiles displayed doubles on each axis as the zoom level increases, therefore it is possible to obtain a map tile image at any location  {{Icode|{x, y} }} on the globe (apart from the poles) at any zoom where:
 +
 
 +
* The {{Icode|x}} axis runs from 0 (left edge is 180°W) to {{Icode|2^zoom -1}} (right edge is 180 °E)
 +
* The {{Icode|y}} axis runs from 0 (top edge is 85.0511°N) to {{Icode|2^zoom -1}} (bottom edge is 85.0511 °S)
 +
 
 +
The relationship between the longitude {{Icode|λ}} and latitude {{Icode|φ}} in '''radians''' and the map tiles {{Icode|{x, y} }} is defined as follows:
 +
 
 +
* {{Icode|{λ, φ} -> [-1, 1] x [-1, 1]}}
 +
 
 +
* {{Icode|x &#61; λ / π}}
 +
 
 +
* {{Icode|y &#61; ln(tan(π/4 + φ/2)) / π}}
 +
 
 +
Obviously as the zoom level increase, the number of tiles across the width of the globe also increases:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Zoom Level !! Tile Width
 +
|-
 +
| 1st zoom level || 1 tile
 +
|-
 +
| 2nd zoom level|| 2 tiles
 +
|-
 +
| 3rd zoom level || 4 tiles
 +
|-
 +
| nth zoom level || 2^n tiles
 +
|}
 +
 
 +
 
 +
=== Adding Attribution ===
 +
 
 +
Unless you own your own map tile source, you will have to comply with the licensing agreement of the map tile provider. In many cases this will mean giving some '''attribution''' to the original owner, even if the tiles are being offered without cost. Here is the licensing agreement from the National Library of Scotland used in the example:
 +
 
 +
''"You can embed the map in your own website, display your own markers or mapping data on top of it, use it for research purposes, or create derivative work from it. The only condition is that you must display an attribution to the National Library of Scotland, together with a link to the National Library of Scotland website http://www.nls.uk/ whenever our map is used. If you create derivative work, the documentation of your work must contain this attribution"''
 +
 
 +
 
 +
<code javascript>
 +
var copyright = new Copyright(new nokia.maps.geo.BoundingBox (new nokia.maps.geo.Coordinate (90, 180),
 +
new nokia.maps.geo.Coordinate (-90, -180)),
 +
"Historical maps from <br/><a href='http://geo.nls.uk/maps/api/'>NLS Maps API<\/a>");
 +
</code>
  
  
[[File:nm_overlay.png]]
 
  
 
== Summary ==
 
== Summary ==
  
Through using the functions in the [[Media:nm_overlay.zip|Code Example]] it is possible to overlay map tile data over a Nokia map. If the images are returned in the {{Icode|.png}} format, transparency will be respected and the Nokia Map will show through underneath. - feel free to adapt the code to your own use.
+
Through using the functions in the [[Media:nm overlay.zip|Code Example]] it is possible to overlay map tile data over a Nokia map. If the images are returned in the {{Icode|.png}} format, transparency will be respected and the Nokia Map will show through underneath. - feel free to adapt the code to your own use.
 +
 
 +
[[File:nm overlay2.png]]

Revision as of 18:39, 3 January 2013

Tip.pngTip: Although the background information here is still correct, the code in the article refers to an outdated version of the API. Much of the code has been superseded as it is now possible create custom overlays directly using the technique described here: http://developer.here.net/apiexplorer/examples/api-for-js/demos/overlay.html The code may still prove useful when creating and attempting to align your own custom overlay over a the map however.

This article explains how to create a custom overlay and add data from your own tile server to the map.

Article Metadata
Code ExampleTested with
Devices(s): Internet Explorer, Google Chrome, Firefox
Compatibility
Platform(s): Web
Dependencies: Nokia Maps 2.2.3
Article
Keywords: Nokia Maps, Overlay, Map Provider, Data
Created: jasfox (15 Jun 2012)
Last edited: jasfox (03 Jan 2013)


Contents

Introduction

For extremely large data sets, it no longer makes sense to add each data point as an individual marker, image or polyline. In situations such as displaying weather or traffic conditions over a map, it would be less processor intensive to retrieve pre-built images from a tiler server rather than re-calculating and adding a large number of mapObjects on to the map display. The cost of making a few extra round trips to retrieve data from a server will be much smaller than the equivalent client side processing of adding hundreds of thousands of objects onto the map.

This article introduces a JavaScript library to overlay images over a map. It handles the data calls to an arbitrary tile server which generates tiles in the Normalised Mercator projection, which is the commonest format for online maps. It also handles the necessary attribution of the overlay images. The code example retrieves Map Tiles from a tile server run by the National Library of Scotland . The mapping is based on out-of-copyright Ordnance Survey maps, dating from the 1920s to the 1940s.

How Map Providers and Overlays Work

For the base map providers, the globe is divided into individual map tiles. These are retrieved online from Nokia’s map tile service.

  • At minimum zoom, the world is contained in a single 256x256 pixel tile.
  • At the next zoom level up, the world is 2 tiles wide and 2 tiles high. Then 4x4, 8x8, 16x16 etc.
  • Each zoom level splits the tiles in two, doubling the number of tiles across the width and height
  • Each Map is based on the Normalized Mercator projection.


Custom overlays work in the same fashion - using your own map tile server complex visual data can be displayed at different zoom levels.

  • One tile at minimum zoom, then 2x2, 4x4 and so on.
  • Must be based on the Normalized Mercator projection.
  • Use .png tiles to support transparency, so underlying map can be seen beneath your data.

Nm overlay.png

Normalised Mercator Projection

The Nokia Maps API offers maps using the Normalised Mercator Projection. This covers the globe as a square from 85.0511°N to 85.0511°S and across all longitudes. At the lowest zoom this is contained within an individual map tile. The number of map tiles displayed doubles on each axis as the zoom level increases, therefore it is possible to obtain a map tile image at any location {x, y} on the globe (apart from the poles) at any zoom where:

  • The x axis runs from 0 (left edge is 180°W) to 2^zoom -1 (right edge is 180 °E)
  • The y axis runs from 0 (top edge is 85.0511°N) to 2^zoom -1 (bottom edge is 85.0511 °S)

The relationship between the longitude λ and latitude φ in radians and the map tiles {x, y} is defined as follows:

  • {λ, φ} -> [-1, 1] x [-1, 1]
  • x = λ / π
  • y = ln(tan(π/4 + φ/2)) / π

Obviously as the zoom level increase, the number of tiles across the width of the globe also increases:

Zoom Level Tile Width
1st zoom level 1 tile
2nd zoom level 2 tiles
3rd zoom level 4 tiles
nth zoom level 2^n tiles


Adding Attribution

Unless you own your own map tile source, you will have to comply with the licensing agreement of the map tile provider. In many cases this will mean giving some attribution to the original owner, even if the tiles are being offered without cost. Here is the licensing agreement from the National Library of Scotland used in the example:

"You can embed the map in your own website, display your own markers or mapping data on top of it, use it for research purposes, or create derivative work from it. The only condition is that you must display an attribution to the National Library of Scotland, together with a link to the National Library of Scotland website http://www.nls.uk/ whenever our map is used. If you create derivative work, the documentation of your work must contain this attribution"


var copyright = new Copyright(new nokia.maps.geo.BoundingBox (new nokia.maps.geo.Coordinate (90, 180),
new nokia.maps.geo.Coordinate (-90, -180)),
"Historical maps from <br/><a href='http://geo.nls.uk/maps/api/'>NLS Maps API<\/a>");


Summary

Through using the functions in the Code Example it is possible to overlay map tile data over a Nokia map. If the images are returned in the .png format, transparency will be respected and the Nokia Map will show through underneath. - feel free to adapt the code to your own use.

Nm overlay2.png

310 page views in the last 30 days.
×