HERE Maps API for JavaScript (3.0)
新版的3.0 HERE 地图API for JavaScript 模块化设计良好,完全支持异步加载。例如,可以使用 requirejs 来加载简单地图,如下所示:
require(['mapsjsService','mapsjsEvents', 'mapsjsUi'], function () {
var platform = new H.service.Platform({
app_id: '<YOUR APP ID>',
app_code: '<YOUR TOKEN>'
});
var defaultLayers = platform.createDefaultLayers();
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map);
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map, defaultLayers);
});
配置文件需要按照以下方式进行分配:
requirejs.config({
baseUrl: '.',
waitSeconds: 0,
map: {
'*': {
'css': 'require-css'
}
},
paths: {
'mapsjsCore' : 'https://js.api.here.com/v3/3.0/mapsjs-core',
'mapsjsService' : 'https://js.api.here.com/v3/3.0/mapsjs-service',
'mapsjsEvents' : 'https://js.api.here.com/v3/3.0/mapsjs-mapevents',
'mapsjsUi' :'https://js.api.here.com/v3/3.0/mapsjs-ui',
'mapsjsCss' :'https://js.api.here.com/v3/3.0/mapsjs-ui',
},
shim: {
'mapsjsService': {
deps: ['mapsjsCore']
},
'mapsjsEvents': {
deps: ['mapsjsCore']
},
'mapsjsUi': {
deps: ['mapsjsCore', 'css!mapsjsCss']
}
}
});
可以看到,所有模块都依赖于
mapsjsCore
,但是子模块之间没有相互依赖。
mapsjsUi
是一个特殊情况,因为它有一个关联的CSS文件来实现默认的外观和感觉。您可以将默认CSS(或覆盖)保存在头部,或者使用
require-css等requirejs插件加载它。应该注意,在配置中需要添加
waitSeconds:0
以避免在第一次将
HERE Maps for JavaScript库下载到浏览器时超时,因为它们在本地找不到,所以您至少要依赖于您的互联网连接速度一次。
或者使用Jquery:
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-core.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-service.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-mapevents.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-mapevents.js', function() {
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true
});
var defaultLayers = platform.createDefaultLayers();
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map, {
center: {
lat: 50,
lng: 5
},
zoom: 4
});
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map, defaultLayers);
});
});
});
});
body {
margin: 0;
padding: 0;
}
#map {
width: 100%;
height: 100%;
position: absolute;
overflow: hidden;
top: 0;
left: 0;
}
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css"
href="http://js.api.here.com/v3/3.0/mapsjs-ui.css" />
</head>
<body>
<div id="map"></div>
</body>
Nokia Maps API for JavaScript (2.2.4-2.5.4)
最近弃用的Nokia Maps API for JavaScript(版本2.2.4及以上)支持异步加载,如下所示
详细信息可以在Feature.load方法和API Reference中找到
Feature.load有两个回调函数,一个是成功的(您可以继续添加App ID和token,显示地图等),另一个是失败的。
var oScript = document.createElement("script"),
onScriptLoad = function() {
nokia.Features.load(
nokia.Features.getFeaturesFromMatrix(["all"]),
onApiFeaturesLoaded,
onApiFeaturesError,
null,
false
);
},
onApiFeaturesLoaded = function() {
nokia.Settings.set("appId", "YOUR APP ID");
nokia.Settings.set("authenticationToken", "YOUR TOKEN");
var mapContainer = document.getElementById("mapContainer");
var map = new nokia.maps.map.Display(mapContainer, {
center: [40.7127, -74.0059],
zoomLevel: 13,
components: [new nokia.maps.map.component.ZoomBar(),
new nokia.maps.map.component.Behavior(),
]
});
},
onApiFeaturesError = function(error) {
alert("Whoops! " + error);
};
oScript.type = "text/javascript";
oScript.src = "http://api.maps.nokia.com/2.2.4/jsl.js?blank=true";
oScript.onload = onScriptLoad;
document.getElementsByTagName("head")[0].appendChild(oScript);
body {
margin: 0;
padding: 0;
}
#mapContainer {
width: 100%;
height: 100%;
position: absolute;
overflow: hidden;
top: 0;
left: 0;
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Asynchronous Loading</title>
</head>
<body>
<div id="mapContainer"></div>
</body>
</html>