繁体   English   中英

Google Maps API 3 MouseEvent latLng

[英]google maps api 3 MouseEvent latLng

我正在尝试使用Google Maps作为精确定位的工具。 我为此使用javaScript api v3。 我也在使用ipinfodb api进行地理位置定位。 我遇到了一个我怀疑是API问题的问题,但是老妈我忘记了一些东西……这是我代码的一部分:

var googleMap = null; // of type google.maps.Map
var googleApiKey = <myGoogleApiKey>;
var scriptLoaded = false;
var latLng = null; // expecting format: "lat,lng" or "(lat,lng)"
var marker = null; // of type google.maps.Marker

function setLatLong(locationStr){
    if (null != locationStr && locationStr.length>2){
        latLng = ""+locationStr;
    if (null != googleMap){
            var ll = latLng.split(","); 
            ll[0] = ll[0].replace(/\(/i,"");
            ll[1] = ll[1].replace(/\)/i,"");
            //TODO: write ll[0], and ll[1] somewhere
        }
    }
}

function loadGoogleMapsScript() {
    if (!scriptLoaded){
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "https://maps.googleapis.com/maps/api/js?key="+ 
                     googleApiKey+"&sensor=false&callback=initGoogleMaps";
        document.body.appendChild(script);
        scriptLoaded = true;
    }
}

function initGoogleMaps() {
var llArray = null;
if (null != latLng) llArray = latLng.split(",");
else  llArray = [0,0];

if (null == googleMap){
      var mapOptions = {
        zoom: 13,
        center: new google.maps.LatLng( (llArray && llArray.length == 2)? parseFloat(llArray[0]) : null, 
                                        (llArray && llArray.length == 2)? parseFloat(llArray[1]) : null ),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        draggable:true
      };
      googleMap = new google.maps.Map(document.getElementById("theMapId"), mapOptions);
      google.maps.event.addListener(googleMap, 'click', function(event) {
            placeMarker(event.latLng);
      setTimeout('placeMarker(googleMap.getCenter())',500);
} else{
      googleMap.setZoom(13);
      googleMap.setCenter((llArray && llArray.length == 2)? parseFloat(llArray[0]) : null, 
                          (llArray && llArray.length == 2)? parseFloat(llArray[1]) : null );
}
}

function placeMarker(location) {
    if ( !isNaN(location.lat()) && !isNaN(location.lng()) )
        setLatLong("("+location.lat()+","+location.lng()+")");
    else return null;
    if (marker){
        marker.setMap(null);
        marker.setMap(googleMap);
        marker.setPosition(location);
     } else{
        marker = new google.maps.Marker({
            position: location,
            map:googleMap,
            clickable:false,
            draggable:true
        });
        google.maps.event.addListener(marker, 'dragend', function(event) {
            placeMarker(event.latLng);
        });
    }
}

当我打开弹出div时,首先从loadGoogleMapsScript()调用开始,该div在作业完成后将从页面中删除。 一切正常,但有时地图变得疯狂。 如果我不更改标记的位置,则下次(在同一会话中)我尝试打开弹出div,与map的onclick事件相关的MouseEvent.lat()的值变为NaN,并且标记朝着顶部略微移动地图。 无法正确拖动地图。 这是我用于移除弹出窗口的方法:

function removePopupDiv(){
    jQuery('.popup_div-area').remove();
//setTimeout("removeScriptBySrcContent('https://maps.g');removeScriptBySrcContent('.googleapis');",300);
    scriptLoaded = false;
    googleMap = null;
    marker = null;
}

如您所见,我什至尝试删除添加的脚本标签,但未成功,有时会出现问题。 我试图解决这个问题已有一段时间,但没有成功。 有人以前有这个问题吗? 我找不到有人抱怨这个问题。

Google开发人员有一个带有演示站点的站点,并且他们有一个可能有用的站点。

在开发Google Map应用程序之前,您应该先学习基础知识,然后再继续

这是我的错...每次设置该值时,我都应该有来自任何不需要的字符的经度和纬度数据的清晰字符串。 现在,所有事物都具有魅力。

function setLatLong(locationStr){
    if (null != locationStr && locationStr.length>2){
        latLng = ""+locationStr;
            latLng = latLng.replace(/\(/g,"");
            latLng = latLng.replace(/\)/g,"");
            latLng = latLng.replace(/ */g,"");
    }
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM