【发布时间】:2023-04-02 21:33:02
【问题描述】:
使用 google maps api(地理位置)。 这是有问题的代码。
var lat;
var lng;
var moveLat;
var moveLng;
var moveMarker;
var marker;
$scope.initMap = () => {
// TODO:Privilege Check!
var checkPrivilege = false;
console.log("Clicked Generate Map Pin");
var x = document.getElementById("demo");
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
lat = parseFloat(position.coords.latitude);
lng = parseFloat(position.coords.longitude);
console.log("Lat " + lat + " Lng " + lng);
// The location of current user
var CMU_SV = {lat: parseFloat(lat), lng: parseFloat(lng)};
// The map, centered at current user
var map = new google.maps.Map(
document.getElementById('map'), {zoom: 4, center: CMU_SV});
map.setOptions({ minZoom: 15, maxZoom: 20 });
// True for admin user
if (checkPrivilege) {
// The marker, positioned at current user's position
moveMarker = new google.maps.Marker({position: CMU_SV, flat: false, map: map, draggable: true});
}
// False for regular user
else {
//var moveMarker = new google.maps.Marker({position: CMU_SV, flat: false, map: map, draggable: true});
marker = new google.maps.Marker({position: CMU_SV, map: map});
}
});
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
};
$scope.sendLocationInfo = () => {
var checkPrivilege = false;
if (checkPrivilege) {
moveLat = parseFloat(moveMarker.getPosition().lat);
moveLng = parseFloat(moveMarker.getPosition().lng);
console.log(moveLat, moveLng);
$scope.LocationInfo = moveLat + "," + moveLng;
$scope.hasLocationInfo = true;
}
else {
lat = parseFloat(marker.getPosition().lat);
lng = parseFloat(marker.getPosition().lat);
console.log(lat, lng);
$scope.LocationInfo = lat + "," + lng;
$scope.hasLocationInfo = true;
}
var currentUser = $cookies.get('userName');
$scope.message = currentUser + " has shared their location!";
client.sendLocationInfo(currentUser, $scope.LocationInfo, $scope.hasLocationInfo)
.then(() => {
$scope.LocationInfo = "";
});
client.sendPublicWallMessage($scope.message)
.then(() => {
$scope.message = '';
})
};
如您所见,我在开始时初始化了 6 个变量——在 initMap 和 sendLocationInfo 之外。
还有两个地图标记(moveMarker 和marker)。如果需要,管理员用户可以移动 moveMarker。
在第二个函数中,我尝试调用每个地图标记来获取纬度和经度信息——将它们分配给各自的变量,然后将这些坐标保存在我的数据库中。
但是,对于 console.log(moveLat, moveLng) 和 console.log(lat, lng) - 我得到两个 NaN 值而不是所需的坐标。
有什么办法解决这个问题?
【问题讨论】:
-
先在控制台检查
moveMarker.getPosition().lat/lng,看看它吐出什么。那里可能有parseFloat()无法正确评估的字母,输出 NaN -
谢谢,这让我走上了正轨,我找到了。
标签: javascript