Раньше я использовал API Карт Google для интерфейса карты, теперь я перехожу к API-интерфейсу Here Maps. В моем приложении используются распорки и JSP. Ранее, с картами Google я загрузил скрипт и перезвонить, как так:Переключение с API Карт Google на Карту API
function loadGoogleMapsAPIScript(){
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
var language = document.getElementsByTagName("html")[0].getAttribute("lang");
//we should use the same protocol as the web page: http or https.
var href = window.location.href;
protocol = href.substr(0, href.indexOf(':'));
var src = protocol+"://maps.googleapis.com/maps/api/js";
src += "?v=3"; //Add google maps api version.
src += "&sensor=false"; // sensor should always be false here.
src += "&callback=google_maps_callback"; //add callback function. This function will be called
//after the script load successful.
src += "&language="+language; //add language.
//}
script.setAttribute("src", src);
document.getElementsByTagName("head")[0].appendChild(script);
}
Callback функция:
function google_maps_callback(){
var map_opt = {
zoom: your_location.map_zoom,
center: new google.maps.LatLng(0,0),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var obj = your_location.map_obj;
var map = new google.maps.Map(obj, map_opt);
var infowin = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
for (var i =0; i < your_location.count; i++){
bounds = add_marker(map, i, infowin, bounds);
}
if (your_location.count>0){
map.fitBounds(bounds);
google.maps.event.addListenerOnce(
map,"bounds_changed",
function(event){
if(map.getZoom()>your_location.map_zoom){
map.setZoom(your_location.map_zoom);
}
}
);
}else{
map.setZoom(1);
}
}
Я создал функцию loadHereMapsAPIScript, как так:
function loadHereMapsAPIScript(){
var script1 = document.createElement("script1");
script1.setAttribute("type","text/javascript");
script1.setAttribute("src","http://js.api.here.com/v3/3.0/mapsjs-core.js");
document.getElementByTagName("head")[0].appendChild(script1);
var script2 = document.createElement("script2");
script2.setAttribute("type","text/javascript");
script2.setAttribute("src","http://js.api.here.com/v3/3.0/mapsjs-service.js");
document.getElementByTagName("head")[0].appendChild(script2);
}
как бы Я добавляю метод обратного вызова в loadHereMapsAPIScript для вызова новой функции here_maps callback(), которая делает то же самое, что и google_maps_callback(). Я бы сначала определил платформу, для центра я бы использовал setCenter? :
function here_maps_callback(){
var platform = new H.service.Platform({
app_id: 'myAPIId',
app_code: 'myAPICode'
useCIT: true,
useHTTPS: true
})
var map_opt = {
zoom: clients_location.map_zoom,
center: new H.geo.Point(0,0),
}
}
UPDATE
Я представил законченную функции обратного вызова для карт Здесь, которая имитирует функцию Google перезвонить. Это в сочетании с ответом ниже, данным Dr.Molle, полностью работает.
function here_maps_callback(){
var platform = new H.service.Platform({
app_id: 'your-app-id',
app_code: 'your-app.code',
useCIT: true,
useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();
var obj = your_location.map_obj;
var map = new H.Map(
obj,
defaultLayers.normal.map,
{
zoom:your_location.map_zoom,
center: {lat:0,lng:0}
});
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map,defaultLayers);
for (var i =0; i < your_location.count; i++){
add_marker_here(map,index);
}
}
Почему вы пытаетесь загрузить mapsjs-core.js дважды? – duncan