javascript - 谷歌地图中心不稳定

标签 javascript css google-maps google-maps-api-3

我正在从事基于 map 的搜索元素,请访问 http://indiahomeplus.com/mapview.php , 这里 map 的中心不稳定,我把它的中心给了加尔各答,但它自动改变到未知的地方。

还有一个s 任何人都可以检查这个问题。

这是js。

             //<![CDATA[
                    var map;
                    var markers = [];
                    var infoWindow;
                    var locationSelect;
                    var iCircle;


                    function init() {
                        map = new google.maps.Map(document.getElementById("map"), {
                            center: new google.maps.LatLng(22.607672, 88.399901),
                            zoom: 12,
                            mapTypeId: 'roadmap',
                           minZoom: 8,

                            mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }
                        });











                        infoWindow = new google.maps.InfoWindow();

                        locationSelect = document.getElementById("locationSelect");
                        locationSelect.onchange = function () {
                            var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
                            if (markerNum != "none") {
                                google.maps.event.trigger(markers[markerNum], 'click');
                            }
                        }; searchLocationsNear(new google.maps.LatLng(22.607672, 88.399901));
                         //alert("in init");
                        var distanceWidget = new DistanceWidget(map); 
                       // getmarkers();
                    }

                    function searchLocations() {
                        var address = document.getElementById("addressInput").value;
                        var geocoder = new google.maps.Geocoder();
                        geocoder.geocode({ address: address }, function (results, status) {
                            if (status == google.maps.GeocoderStatus.OK) {
                                searchLocationsNear(results[0].geometry.location);

                            } else {
                                alert(address + ' not found');
                            }
                        });
                    }

                    function clearLocations() {
                        infoWindow.close();
                        for (var i = 0; i < markers.length; i++) {
                            markers[i].setMap(null);
                        }
                        markers.length = 0;

                        locationSelect.innerHTML = "";
                        var option = document.createElement("option");
                        option.value = "none";
                        option.innerHTML = "See all results:";
                        locationSelect.appendChild(option);
                    }

                    function searchLocationsNear(center) {
                        clearLocations();

                        var radius = document.getElementById('radiusSelect').value;
                        var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
                        downloadUrl(searchUrl, function (data) {
                            var xml = parseXml(data);
                            var markerNodes = xml.documentElement.getElementsByTagName("property");
                            var bounds = new google.maps.LatLngBounds();
                            for (var i = 0; i < markerNodes.length; i++) {
                                var name = markerNodes[i].getAttribute("name");
                                var pid = markerNodes[i].getAttribute("pid");
                                //var address = markerNodes[i].getAttribute("address");
                                var distance = parseFloat(markerNodes[i].getAttribute("distance"));
                                var latlng = new google.maps.LatLng(
                               parseFloat(markerNodes[i].getAttribute("lat")),
                               parseFloat(markerNodes[i].getAttribute("lng")));
                                //alert(pid);
                                createOption(name, distance, i);
                                createMarker(latlng, name,pid);
                                bounds.extend(latlng);
                               // sidebar(pid, latlng);
                            }
                            map.fitBounds(bounds);
                           // locationSelect.style.visibility = "visible";
                            locationSelect.onchange = function () {
                                var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
                                google.maps.event.trigger(markers[markerNum], 'click');
                            };
                        });
                    }

                    function createMarker(latlng, name,pid) {
                        var html = "<b>" + name +","+pid+ "</b>";
                        var marker = new google.maps.Marker({
                            map: map,
                            position: latlng,
                            visible:false //, icon:'images/marker_p1.png'


                        });
                        google.maps.event.addListener(marker, 'click', function () {

                             show_right_div(pid);
                            //showxx();
                        });
                        google.maps.event.addListener(marker, 'mouseover', function () {
                            infoWindow.setContent(html);
                            infoWindow.open(map, marker);
                           // alert(marker);
                        });
                        google.maps.event.addListener(marker, 'mouseout', function () {
                            infoWindow.close();
                        });

                        markers.push(marker);
                    }

                    function createOption(name, distance, num) {
                        var option = document.createElement("option");
                        option.value = num;
                        option.innerHTML = name + "(" + distance.toFixed(1) + ")";
                        locationSelect.appendChild(option);
                    }

                    function downloadUrl(url, callback) {
                        var request = window.ActiveXObject ?
                           new ActiveXObject('Microsoft.XMLHTTP') :
                           new XMLHttpRequest;

                        request.onreadystatechange = function () {
                            if (request.readyState == 4) {
                                request.onreadystatechange = doNothing;
                                callback(request.responseText, request.status);
                            }
                        };

                        request.open('GET', url, true);
                        request.send(null);
                    }

                    function parseXml(str) {
                        if (window.ActiveXObject) {
                            var doc = new ActiveXObject('Microsoft.XMLDOM');
                            doc.loadXML(str);
                            return doc;
                        } else if (window.DOMParser) {
                            return (new DOMParser).parseFromString(str, 'text/xml');
                        }
                    }

                    function doNothing() { }
                     google.maps.event.addDomListener(window, 'load', init);

                    //]]>

                    function hide_right_div() {
                    right_div.style.visibility = "hidden";

                }






                     function show_right_div(str) {

                    right_div.style.visibility = "visible";
                     boxclose.style.visibility="visible"


                     if (str == "") 
                    {
                        document.getElementById("right_div").innerHTML = "";
                        return;
                    }
                    if (window.XMLHttpRequest) 
                    {// code for IE7+, Firefox, Chrome, Opera, Safari
                        xmlhttp = new XMLHttpRequest();
                    }
                    else 
                    {// code for IE6, IE5
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    xmlhttp.onreadystatechange = function () 
                    {
                        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                         {
                            document.getElementById("right_div").innerHTML = xmlhttp.responseText;

                            resp = xmlhttp.responseText;
                              parseScript(resp);
                        }
                    }
                    xmlhttp.open("GET", "getproperty_view.php?q=" + str, true);
                    xmlhttp.send();

                     //parseScript(resp);

                }






               function parseScript(strcode) {

              var scripts = new Array();         // Array which will store the script's code

              // Strip out tags
              while(strcode.indexOf("<script") > -1 || strcode.indexOf("</script") > -1) {
                var s = strcode.indexOf("<script");
                var s_e = strcode.indexOf(">", s);
                var e = strcode.indexOf("</script", s);
                var e_e = strcode.indexOf(">", e);

                // Add to scripts array
                scripts.push(strcode.substring(s_e+1, e));
                // Strip from strcode
                strcode = strcode.substring(0, s) + strcode.substring(e_e+1);
              }

              // Loop through every script collected and eval it
              for(var i=0; i<scripts.length; i++) {
                try {
                  eval(scripts[i]);
                }
                catch(ex) {
                  // do what you want here when a script fails
                }
              }
            }

最佳答案

脚本的工作流程是:

  1. 在创建 map 的位置调用 init 并调用...
  2. searchLocationsNear...您向其中发送请求
  3. http://indiahomeplus.com/phpsqlsearch_genxml.php?lat=22.607672&lng=88.399901&radius=25

    此脚本的响应是 Not connected : in the...

  4. 为上述请求回调,您创建一个 LatLngBounds 对象,并使用基于响应的位置对其进行扩展(这不会发生,因为响应不包含标记)。稍后你调用...
  5. map.fitBounds(bounds); google.maps.LatLngBounds 的初始边界似乎是

    ((1,180),(-1,-180))
    

    ... map 的视口(viewport)将设置为适合这些边界,这就是您看到的结果。

可能的解决方案:没有标记时立即退出回调:

if(!markerNodes.length)return;

关于javascript - 谷歌地图中心不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881096/

相关文章:

android - Mapview 收到的 Bottomsheet 触摸事件

javascript - 为什么 Array.prototype.map 会忽略稀疏数组中的空槽,而 Array.prototype.join 不会?

jquery - 网站在 IE 8.0.6011.19088IC 中渲染异常

javascript - HTML 或 CSS 导航栏问题

google-maps - 无需帐户即可在网站上显示 Mapbox map ?

android - 在 android 中按下 mapView 之前,我的叠加层不会显示

javascript - 使用类型模块访问脚本标记中定义的变量?

javascript - 具有功能组件的 WebSockets

javascript - jQuery文件上传和ajax

html - 如何适合显示 100% 宽度的页脚标签