Comment réparer Les InvalidValueError: setPosition: pas un LatLng ou LatLngLiteral: dans propriété lat: pas un nombre?
j'essaie de porter mes fonctions v2 googlemaps sur v3.
mais d'une façon ou d'une autre j'ai coincé dans une erreur étrange et je n'ai pas pu trouver, ce que je fais mal.
Erreur : Uncaught InvalidValueError: setPosition: pas un LatLng ou LatLngLiteral: dans propriété lat: pas un certain nombre %7Bmain,adsense,la géométrie,la zombie%7D.js:25
Voici mon initialisation map:
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));
et voici la partie de mon erreur:
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
});
}
modifier: le appel de tracktraders!--4-->
drawTraders(map, {
traders_uri: "getTraders.php",
icon_image_uri: "icon-cms.gif",
});
j'utilisais cet exemple Fenêtre D'Information
j'espère que quelqu'un pourrait m'aider.
Edit:
5 réponses
Uncaught InvalidValueError: setPosition: pas un LatLng ou LatLngLiteral: dans propriété lat: pas un nombre
signifie que vous ne passez pas nombres dans google.cartographie.LatLng constructor. Par votre commentaire:
/*Information from chromium debugger
trader: Object
geo: Object
lat: "49.014821"
lon: "10.985072"
*/
trader.geo.lat et trader.geo.les lon sont des cordes, pas des nombres. Utilisez parseFloat pour les convertir en nombres:
var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon));
j'ai eu le même problème avec exactement le même message d'erreur. En fin de compte l'erreur a été, que j'ai toujours appelé les cartes v2 javascript. J'ai dû remplacer:
<script src="http://maps.google.com/maps?file=api&v=2&key=####################" type="text/javascript"></script>
<script src="http://maps.googleapis.com/maps/api/js?key=####################&sensor=false" type="text/javascript"></script>
après cela, il a bien fonctionné. m'a fallu un certain temps ;-)
j'avais le même problème, le fait est que l'entrée de lat et long devrait être String. Alors seulement, j'ai réussi.
par exemple:
Contrôleur.
ViewBag.Lat = object.Lat.ToString().Replace(",", ".");
ViewBag.Lng = object.Lng.ToString().Replace(",", ".");
View - fonction 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>
je convertis la double valeur en chaîne et je fais un remplacement dans le', 'to'. Donc tout fonctionne normalement.
en utilisant angulaires-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());
vous êtes probablement de passage null
valeur si vous chargez les coordonnées dynamiquement, faites une vérification avant d'appeler le chargeur de cartes ie:if(mapCords){loadMap}