Подтвердить что ты не робот

Как исправить Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число?

Я пытаюсь перенести мои функции googlemaps v2 на v3.

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

Ошибка: Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число% 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
});
}

Изменить: вызов drawTraders

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

Я использовал этот пример Информационное окно

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

Изменить:

Скрипт, который не работает

Скрипт, который работает

4b9b3361

Ответ 1

Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число

означает, что вы не передаете числа в конструктор 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));

Ответ 2

У меня была такая же проблема с точно таким же сообщением об ошибке. В итоге ошибка заключалась в том, что я все еще называл карты 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>

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

Ответ 3

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

например:

контроллер.

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

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

Просмотр - функция 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>

Я конвертирую двойное значение в строку и делаю Replace в ',' to '.' И поэтому все работает нормально.

Ответ 4

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

Ответ 5

Использование 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());