2015-07-28 14 views
1

Ive успешно создал карту, маркер и информационную систему, которая использует значения из метода обратного геокодирования. С 1 местоположением карта работает нормально и отображает маркер и информационный пузырь соответственно. Однако, когда я передаю два значения местоположения из бэкэнд (я использую jsp), карта не отображает. image of map when i use two location latitudes and longitudesЗдесь API-интерфейс карты, рендеринг карты

функции, которые я использую: , addInfoBubble, onSuccess,

function addMarkerToGroup(group, position, inf){ 
var marker = new H.map.Marker(position); 
//add custom data to marker 
marker.setData(inf); 
group.addObject(marker); 
} 

function addInfoBubble(position,inf){ 

var group = set_map.group; 
var map = set_map.map; 
var ui = set_map.ui; 

map.addObject(group); 

//add 'tap' event listener, that opens info bubble, to the group 
group.addEventListener('tap', function(evt){ 
    //event target is the marker itself, group is a parent event target 
    var bubble = new H.ui.InfoBubble(evt.target.getPosition(),{ 
     // read custom data 
     content: evt.target.getData() 
    }); 
     //show info bubble 
     ui.addBubble(bubble); 
}, false); 
addMarkerToGroup(group,position,inf); 
    } 

function callback(){ 
    var platform = new H.service.Platform({ 
    app_id: '#', 
    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:your_location.latitude,lng:your_location.longitude} 
    }); 
    var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map)); 

    var ui = H.ui.UI.createDefault(map, defaultLayers); 

    var group = new H.map.Group(); 
} 



function onSuccess(result){ 
var index = your.count; 

var myclt = your.get_yours(index); 
var myttl = your.get_title(index); 
var myinf = your.get_info(index); 

var location = result.Response.View[0].Result[0]; 
var countryName, countryCode, province, city, zipcode; 
countryName = location.Location.Address.Country; 
countryCode = location.Location.Address.Country; 
province = location.Location.Address.State; 
zipcode = location.Location.Address.PostalCode; 
city = location.Location.Address.City; 

       var address = ""; 
      if (city && city != "") { 
       address = city; 
      } 

      if (province && province != "") { 
       if (address && address != "") { 
        address += ", " + province; 
       } else { 
        address = province; 
       } 
      } 

      if (zipcode && zipcode != "") { 
       if (address && address != "") { 
        address += ", " + zipcode; 
       } else { 
        address = zipcode; 
       } 
      } 

      if (countryName && countryName != "") { 
       if (address && address != "") { 
        address += ", " + countryName; 
       } else { 
        address = countryName; 
       } 
      } 

      $.ajax({ 
       url:  "view_remote_device_control.do", 
       data:  { 
        mode:  "update", 
        client_id: myclt, 
        city:  city, 
        province: province, 
        zipcode: zipcode, 
        country: countryCode 
       }, 
       type:  "GET", 
       cache:  false, 
       async:  true 
      }); 

      myttl += address; 





var position = new H.geo.Point(location.Location.DisplayPosition.Latitude,location.Location.DisplayPosition.Longitude); 

var inf = {content: location.Location.Address.Label}; 


var myinfo = inf.content; 


addInfoBubble(here_maps_callback.map,position,inf.content,here_maps_callback.ui); 
return myinf; 

}; 

При отладке я получаю ошибку:

Uncaught InvalidArgumentError: H.map.ViewModel # setCameraData (Аргумент # 0 позиции)

ответ

1

Итак, я понял, что это причина, почему это не было рендеринга было вызвано:

center: {lat:your_location.latitude,lng:your_location.longitude} 

В основном из-за прохождения двух значений местоположения, массив расположения имели два значения как для широты и долготы и него не знал, что использовать для установки центра. Путем изменения как значения широты и LNG до 0 и используя:

map.setCenter(evt.target.getPosition()); 

внутри слушателя группы событий он оказал карту соответствующим образом.

Надежда это полезно

+0

Рад, что вы поняли ошибку. Это очень полезная информация, чтобы знать, спасибо. –

0

Немного смущенно, как происходит обратный вызов, где два места окончательно восстановлены со стороны JavaScript? Вы сталкиваетесь с проблемой, если вы прямо передаете места в javascript, я имею в виду жесткий код в качестве теста?

+0

Есть функции, которые определены на переднем конце Jsp файла, общаться с сервером Java обратно конец, который извлекает координаты местоположения из базы данных. Затем я использую здесь карты обратного геокодера и получаю точное местоположение, которое затем заполняет информацию для маркера и infobubble. Он работает, когда в базе данных есть только одно местоположение, но когда есть два варианта отображения карты, они отображают два маркера с помощью информационных блоков, и я получаю это представление при тестировании. Я обновил свой код выше, чтобы включить результат onsuccess. – 3rdeye7