2013-12-14 6 views
26

Я пытаюсь перенести мои функции googlemaps v2 на v3.Как исправить Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число?

Но почему-то я застрял в странной ошибке, и я не мог найти, что я делаю неправильно.

Error : Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number %7Bmain,adsense,geometry,zombie%7D.js:25

Вот моя карта инициализации:

var map = new google.maps.Map(document.getElementById("map"),{ 
    zoom:4 
    size:new google.maps.Size(580,440), 
    mapTypeControl: true, 
    mapTypeControlOptions: { 
    style:google.maps.MapTypeControlStyle.VERTICAL_BAR, 
    position: google.maps.ControlPosition.BOTTOM_CENTER, 
    }, 
    panControl: true, 
    panControlOptions: { 
    position: google.maps.ControlPosition.TOP_LEFT, 
    }, 
    zoomControl: true, 
    zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.LARGE, 
    position: google.maps.ControlPosition.LEFT_CENTER, 
    }, 
    scaleConrol: true, 
    scaleControlOptions:{ 
    position: google.maps.ControlPosition.TOP_LEFT , 
    }, 
}); 
map.setCenter(new google.maps.LatLng(49.477643, 9.316406)); 

и здесь часть моей ошибки:

function drawTraders(map, options) { 
var traders_uri = options.traders_uri || ''; 
if ('' == traders_uri) { 
    return false; 
} 

// get the informations 
$.getJSON(traders_uri, function(data) { 
    // look through the information 
$.each(data.traders, function(i, trader) { 
var icon = options.icon_image_uri; 

var markerIcon = new google.maps.MarkerImage(icon, 
    // This marker is 20 pixels wide by 32 pixels tall. 
    new google.maps.Size(25, 25), 
    // The origin for this image is 0,0. 
    new google.maps.Point(0,0), 
    // The anchor for this image is the base of the flagpole at 0,32. 
    new google.maps.Point(0, 32) 
); 

var html = 'test'; 

/*Information from chromium debugger 
trader: Object 
    geo: Object 
     lat: "49.014821" 
     lon: "10.985072" 

*/ 
var myLatlng = new google.maps.LatLng(trader.geo.lat,trader.geo.lon); 

/*here is the error in new google.maps.Marker()*/ 
var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    icon : markerIcon, 
}); 

var infowindow = new google.maps.InfoWindow({ 
    content: html 
}); 
} 

Edit: вызов drawTraders

drawTraders(map, { 
     traders_uri: "getTraders.php", 
     icon_image_uri: "icon-cms.gif", 
}); 

я использовал этот пример Info Window

Я надеюсь, что кто-то может мне помочь.

Edit:

Fiddle which is not working

Fiddle which works

+0

GSize является v2 вещь , MarkerImage - устаревшая конструкция v3, замененная анонимной [Icon] (https://developers.google.com/maps/documentation/javascript/reference#Icon). Каковы значения 'trader.geo.lat, trader.geo.lon' – geocodezip

+0

К сожалению, я его не видел, но после исправления его в google.maps.Size он все еще не работает. Значения указаны в комментарии. Я не понимаю downvote, но нормально – demonking

+0

Вы не разместили достаточно кода для репликации проблемы. – geocodezip

ответ

82

Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number

означает, что вы не проходя числа в конструктор google.maps.LatLng. За Ваш комментарий:

/*Information from chromium debugger 
trader: Object 
    geo: Object 
     lat: "49.014821" 
     lon: "10.985072" 

*/ 

trader.geo.lat и trader.geo.lon являются строками, а не цифрами. Используйте parseFloat, чтобы преобразовать их в номера:

var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon)); 
+12

Я попробовал его с parseFloat, но все тот же ошибка. – demonking

+0

«49.014821» по-прежнему является числовым (числом) в программировании. – Jared

+3

'LatLng()' * фактически принимает строки штрафа *, если они хорошо сформированы. (Только добавлено 'alert (lat +" "+ lng +" (типы: "+ (typeof lat) +", "+ (typeof lng) +") ")' перед 'LatLng (lat, lng)' для проверки .) –

18

У меня была такая же проблема с точно таким же сообщением об ошибке. В итоге ошибка заключалась в том, что я все еще называл карты v2 javascript. Я должен был заменить:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=####################" type="text/javascript"></script> 

с

<script src="http://maps.googleapis.com/maps/api/js?key=####################&sensor=false" type="text/javascript"></script> 

после этого он работал отлично. взял меня на некоторое время ;-)

+0

src-Url ist wrong, вам нужно использовать v = 3, потому что функция в моем основном сообщении для googlemaps v3 не v2;) – demonking

+0

Youre right, я отменил части кода .. . Вот как я заменил импорт скрипта. Спасибо ;-) – CodeCountZero

+0

О, извините, моя ошибка, когда нет переменной v = 3, по умолчанию будет версия для разработки googlemaps, поэтому имейте в виду. :) – demonking

3

У меня была та же проблема, факт в том, что ввод lat и long должен быть строкой. Только тогда я справился.

, например:

контроллер.

ViewBag.Lat = объект.Lat.ToString(). Заменить (",", ".");

ViewBag.Lng = object.Lng.ToString(). Заменить (",", ".");

View - функция Javascript

<script> 
    function initMap() { 
     var myLatLng = { lat: @ViewBag.Lat, lng: @ViewBag.Lng}; 

     // Create a map object and specify the DOM element for display. 
     var map = new window.google.maps.Map(document.getElementById('map'), 
     { 
      center: myLatLng, 
      scrollwheel: false, 
      zoom: 16 
     }); 

     // Create a marker and set its position. 
     var marker = new window.google.maps.Marker({ 
      map: map, 
      position: myLatLng 
      //title: "Blue" 
     }); 
    } 
</script> 

преобразовать двойное значение в строку и сделать Заменить в '' к ". И поэтому все работает нормально.

0

Вы, вероятно, проходя null значение, если вы загружаете координаты динамически, то установите галочку перед вызовом Map Loader, а именно: if(mapCords){loadMap}

0

Использование angular-google-maps

$scope.bounds = new google.maps.LatLngBounds(); 
for (var i = $scope.markers.length - 1; i >= 0; i--) { 
    $scope.bounds.extend(new google.maps.LatLng($scope.markers[i].coords.latitude, $scope.markers[i].coords.longitude)); 
};  
$scope.control.getGMap().fitBounds($scope.bounds); 
$scope.control.getGMap().setCenter($scope.bounds.getCenter()); 
Смежные вопросы