javascript - 如何更新谷歌地图标记位置?
问题描述
所以我正在尝试为一个学校项目建立一个网站,其中一部分需要获取用户位置并将其显示在地图上。我已经设法使用 geolocator api 获取用户位置,但似乎无法更新标记,因为即使在获得新的 lat long 后它仍保留在默认位置。任何帮助将不胜感激 :)
我在加载网站时采用了默认位置(加利福尼亚州)(它成功)并设法获取用户位置(使用控制台验证以显示结果),但代码仍显示加利福尼亚标记。
<script type="text/javascript">
var latitude = 36.8;
var longitude = -119.4;
var currloc;
function getLoc() {
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(function(position) {
latitude = (Math.round(position.coords.latitude*100))/100;
longitude = (Math.round(position.coords.longitude*100))/100;
currloc = {lat: latitude, lng: longitude};
console.log("Geolocation supported");
console.log(latitude);
console.log(longitude);
});
}
else {
latitude = 0.0;
longitude = 0.0;
console.log("Geolocation not supported");
}
}
function mapInit() {
currloc = {lat: latitude, lng: longitude};
var map = new google.maps.Map(document.getElementById("map"), {zoom: 4, center: currloc, disableDoubleClickZoom: true,});
var mark = new google.maps.Marker({
position: currloc,
map: map,
title: latitude+', '+longitude
});
}
</script>
我希望标记会随着 initMap 函数的 currloc 值的变化而变化,但是在地图上它不会显示新位置。
解决方案
getLoc() 是异步的。调用回调后 Currloc 发生变化。我假设您同步调用了 mapInit。在回调中调用标记
推荐阅读
- azure - Azure 应用服务停止工作一段时间
- vector - 如何将 .kmz 文件转换为 .zip?
- firebase - 在 Flutter 中使用 Firebase 身份验证检查用户是否是新用户
- c# - SMTP:邮箱不可用。服务器响应是:Error458 块
- javascript - 我们如何在 ES7 中调用类内部的方法?
- windows - SSL 和 Umbraco
- google-tag-manager - 我正在使用自定义图像标签在我的网站上放置一个“图像像素标签”。我希望标签在页面顶部触发
- python - Python 3 urllib + PySocks - 使用 SOCKS4 代理打开 url 失败
- swift - 使用 enumerateBodies 沿RayStart 反弹光线
- android - Google Play 开发者 API | 检索评论