我正在使用Geolocation搞乱Google Maps API。一切都按预期工作,但我在控制台中不断收到此错误:
Uncaught TypeError: Cannot read property 'coords' of undefined
这是我的地理检查:
// Does this browser support geolocation?
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(initialize, locationError);
} else {
showError("Your browser does not support Geolocation!");
}
我的成功处理程序:
function initialize(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var acc = position.coords.accuracy;
// Debugging
console.log(position.coords);
console.log("Accuracy: "+acc+"\nLatitude: "+lat+"\nLongitude: "+lon);
// Google Maps API
var myLatlng = new google.maps.LatLng(lat,lon);
var mapOptions = {
center: new google.maps.LatLng(lat, lon),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Hello World!"
});
}
然后我在我的正文标记<body id="map" onload="initialize()">
地图渲染得很好,一切都按预期工作。当我将position.coords
记录到我的控制台时,我得到一个干净的读数。为什么我一直收到这个错误?
Google和SO搜索没有结果......
干杯
答案 0 :(得分:4)
加载文档时,调用initialize方法时不带参数。 这就是你得到错误的原因。
请尝试这种方式:
function initCoords() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(initialize, locationError);
} else {
showError("Your browser does not support Geolocation!");
}
}
并在您的HTML代码中:
<body id="map" onload="initCoords()">
保持initialize
功能不变。
答案 1 :(得分:1)
错误可能在这里
<body id="map" onload="initialize()">
您正在调用没有参数的初始化函数。因此'position'参数未定义
function initialize(position) {
var lat = position.coords.latitude;
就好像你打电话了
var lat = undefined.coords.latitude
答案 2 :(得分:0)
如果您在使用地图对象之前在初始化时在cordova / phonegap中收到了谷歌地图上的错误,请确保存在Google地图html数据转换和数据长属性。
以下是一个示例,
&lt; div class =“widget uib_w_20 maps-size d-margin” data-uib =“media / google_maps”data-ver =“0”data-rpath =“null” data-zoom =“8”id =“google-maps”data-center-auto =“true” data-lat =“41.309697”data-long =“ - 72.9370447”&gt;
没有数据转发和数据长度,并且作为网络应用进行测试,将在谷歌地图初始化期间失败