我正在尝试重新设计一个phonegap应用,以使用googlemaps插件和谷歌地图API的v2。
我正在努力更新标记位置,这似乎在v3中完美运行,但不适用于插件。
问题似乎是在调用setMarkerPosition()
时,标记对象没有传递给它,所以我得到"无法调用未定义的方法setPosition"
我将currentPositionMarker
设置为我脚本顶部的全局变量,虽然我在开始时在setCurrentPosition()
中定义它,但我也尝试使用回调再次定义它,但是工作
道歉如果它的东西很傻,这是我的第一个JavaScript项目,所以对语言部分的理解仍然非常不完整,所以任何指针都非常赞赏。
我正在尝试的代码...
function initializeMap()
{ map = plugin.google.maps.Map.getMap();
// map = new plugin.google.maps.Map(document.getElementById('map_canvas'), {
// zoom: 13,
// });
}
function initLocationProcedure() {
initializeMap();
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
displayAndWatch,
errorCallback_highAccuracy,
{maximumAge:600000, timeout:5000, enableHighAccuracy: true});
} else {
alert("Your Phone does not support Geolocation");
}
}
function displayAndWatch(position) {
// set current position
setCurrentPosition(position);
// watch position
watchCurrentPosition();
}
function errorCallback_highAccuracy(position) {
}
function watchCurrentPosition() {
var positionTimer = navigator.geolocation.watchPosition(
function (position) { setMarkerPosition(currentPositionMarker,position);
}, error, {maximumAge:600000, timeout:5000, enableHighAccuracy: true});
}
function error(){
}
function setMarkerPosition(marker, position) {
marker.setPosition(
new plugin.google.maps.LatLng(
position.coords.latitude,
position.coords.longitude)
);
}
function setCurrentPosition(pos) {
currentPositionMarker = map.addMarker({
'position': new plugin.google.maps.LatLng(
pos.coords.latitude,
pos.coords.longitude
),
}, function(marker) {
currentPositionMarker = marker;
});
map.setCenter(new plugin.google.maps.LatLng(
pos.coords.latitude,
pos.coords.longitude
));
}
答案 0 :(得分:0)
好的,结果是正在创建标记var,但不及时setCurrentPosition()
,这是设置标记与setMarkerPosition()
异步调用。完全删除displayAndWatch()
,然后从setMarkerPosition()
的回调中调用setCurrentPosition()
似乎是修复。
function setCurrentPosition(pos) {
map.addMarker({
'position': new plugin.google.maps.LatLng(
pos.coords.latitude,
pos.coords.longitude
),
}, function(marker) {
currentPositionMarker = marker;
watchCurrentPosition();
});
map.setCenter(new plugin.google.maps.LatLng(
pos.coords.latitude,
pos.coords.longitude
));
}