多个地点Google地图

时间:2011-01-04 05:19:07

标签: javascript google-maps

如何在Google地图上显示多个位置。 我正在使用此代码进行谷歌地图?

<script type="text/javascript">
          $(function() { // when the document is ready to be manipulated.

              if (GBrowserIsCompatible()) { // if the browser is compatible with Google Map's
                  var map = document.getElementById("myMap"); // Get div element
                  var m = new GMap2(map); // new instance of the GMap2 class and pass in our div location.

                  var longArray= ("<?php echo $long; ?>").split(',');
                  var latArray= ("<?php echo $lat; ?>").split(',');

                 for(i=0;i<longArray.length;i++)
                 {
                     m.setCenter(new GLatLng(latArray[i], longArray[i]), 13); // pass in latitude, longitude, and zoom level.
                     m.openInfoWindow(m.getCenter(), document.createTextNode("This is testing")); // displays the text

                 }

                m.setMapType(G_SATELLITE_MAP); // sets the default mode. G_NORMAL_MAP, G_HYBRID_MAP

                    var c = new GMapTypeControl(); // switch map modes
                    m.addControl(c);

                    m.addControl(new GLargeMapControl()); // creates the zoom feature


              }
              else {
                  alert("Upgrade your browser, man!");
              }
          });
      </script>

3 个答案:

答案 0 :(得分:2)

请参阅下面的代码,对我来说效果很好。 下面的代码段将为您提供一个错误,以提供有效的API密钥,即“ Google Maps JavaScript API错误:InvalidKeyMapError”,要解决此问题,您唯一需要的就是Google Maps提供的有效API密钥。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title>Multiple Locations using Google Maps </title>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=false"></script>
</head>
<body>
    <div id="googleMap" style="width: 500px; height: 400px;"></div>

    <script type="text/javascript">
    var locationArray = [
      ['Pune', 18.5248904, 73.7228789, 1],
      ['Mumbai', 19.0825223, 72.7410977, 2],
      ['Ahmednagar', 19.1104918, 74.6728675, 3],
      ['Surat', 21.1594627, 77.3507354, 4],
      ['Indore', 22.7242284, 75.7237617, 5]
    ];

    var map = new google.maps.Map(document.getElementById('googleMap'), {
      zoom: 8,
      center: new google.maps.LatLng(18.5248904,73.7228789),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var infowindow = new google.maps.InfoWindow();

    var marker, i;

    for (i = 0; i < locationArray.length; i++) {
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locationArray[i][1], locationArray[i][2]),
        map: map
      });

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infowindow.setContent(locationArray[i][0]);
          infowindow.open(map, marker);
        }
      })(marker, i));
    }
    </script>
</body>
</html>

有关更多详细信息,请参见here。希望这就是您要寻找的!

答案 1 :(得分:1)

setCenter用于缩放和居中地图..如果你想标记多个位置,你需要创建一个标记并将它放在循环内的地图上..这里有一套很好的教程:

http://econym.org.uk/gmap/index.htm

如果你的问题涉及在一张地图上显示多个不同的位置然后你不能,地图一次只能在一个纬度/ lng的中心位置。

你想要实现的目标并不完全清楚。

Dunc。

答案 2 :(得分:0)

您必须遵循以下步骤。 1.在javascript aaray中列出你的地址。 2.制作一个实用功能来进行地理编码,然后通过传递地址作为争论来放置标记。 3.遍历地址数组并调用标记实用程序函数。

示例:map.jsp :: 它传输输入json字符串,它是地址列表并将其转换为javascript数组: 通过下载fron google添加jquery和infobox.js。

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
   <%@ page contentType="text/html;charset=windows-1252"%>
     <html> 
    <head> 
       <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
        <title>Google Maps Multiple Markers</title> 
     <script src="http://maps.google.com/maps/api/js?sensor=false" 
      type="text/javascript"></script>
         <script language="JavaScript" src="js/jquery-1.8.0.min.js"       type="text/javascript"></script>
      <script language="JavaScript" src="js/infobox.js" type="text/javascript"></script>

     </head> 
   <body>
   <%
       String json=request.getParameter("address");
    %>
       <input type="hidden" id="json" value="<%=json%>"></input>

       <div id="map" style="width: 1250px; height: 500px;" align="center"></div>

         <script type="text/javascript" language="JavaScript" src="js/map.js"></script>
          <script type="text/javascript">
            var jsonvalue=document.getElementById("json").value;
         var use=unescape(jsonvalue);
       //alert(use);
              var obj = eval ("(" + use + ")"); 
    var cobj=obj.center;
       var olist=obj.other;
     codeproject(cobj.center_add,cobj.center_name);
      //alert(cobj.center_name+" and "+cobj.center_add);
     for(var i=0;i<olist.length;i++)
     {
     //alert(olist[i].other_add);
     codeAddress(olist[i].other_add,olist[i].other_name);
     }

      </script>
     </body>
     </html>

__ _ __ _ __ map.js < / EM> <强> _ __ _ __ _ _

       //used by infowindow
        //the googlemap code
   var geocoder = new google.maps.Geocoder();
  //var infowindow = new google.maps.InfoWindow();
   var LatLngList = new Array(6);
    var  i;
        var infowindow = new google.maps.InfoWindow();

     var markerBounds = new google.maps.LatLngBounds();
       var markerarray=new Array();
         //making the div for window popup
    var boxText = document.createElement("div");
        boxText.style.cssText = "border: 2px solid Gray; margin-top: 6px;       background:           white; padding: 5px;font-weight: bold;color: Gray;";
    boxText.innerHTML = " ";

    //options array for infobox window
     var myOptions = {
       map:map,
         content : boxText,
         disableAutoPan : false,
         maxWidth : 0,
         pixelOffset : new google.maps.Size( - 140, 0),
         zIndex : null,
         boxStyle :  { background : "url('tipbox.gif') no-repeat",  width : "280px" },
         closeBoxMargin : "10px 4px 2px 2px", closeBoxURL : "close.gif", 
         infoBoxClearance : new google.maps.Size(1, 1), 
         isHidden : false,
         pane : "floatPane",
         enableEventPropagation : true
     };
      var infoBox;
     function codeproject(address, client) {    
         geocoder.geocode( {
             'address' : address
         },
         function (results, status) {

    if (status == google.maps.GeocoderStatus.OK) {

        map.setCenter(results[0].geometry.location);
      var  marker = new google.maps.Marker( {
            map : map, icon : 'green-dot.png', position : results                      [0].geometry.location, draggable : false, animation : google.maps.Animation.DROP
        });
        //bounce the marker
       // marker.setAnimation(google.maps.Animation.BOUNCE);
        //initialize info box
        infoBox = new InfoBox(myOptions); 
        markerBounds.extend(results[0].geometry.location);
        //listeners
        google.maps.event.addListener(marker, 'mouseover', function () {
        //stop bouncing
       //   marker.setAnimation(null);
         // $("img[src$='iws3.png']").hide();
         //   infowindow.setContent('<b>' + client + '<\/b><br>'+ results[0].formatted_address);
         //  infowindow.open(map, this);
          boxText.innerHTML = "<br>"+client +"<br>"+results[0].formatted_address;

          infoBox.setContent(boxText,marker);
          infoBox.open(map,marker);
            });
             google.maps.event.addListener(marker, 'mouseout', function () {
                 // infowindow.close();
              infoBox.close();
                //start bounce
                //    marker.setAnimation(google.maps.Animation.BOUNCE);
        });

        //ok end
    }
    else {
        if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
            alert("Error Occured during geocode:" + status);
        }
        //  alert('Geocode was not successful for '+client +' the following reason: ' + status);
    }
        });
       }

         function codeAddress(address, client) {
//  var address = document.getElementById('address').value;
geocoder.geocode( {
    'address' : address
},
function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {

        // map.setCenter(results[0].geometry.location);
       infoBox = new InfoBox(myOptions); 

      var  marker = new google.maps.Marker( {
            map : map, 
          // icon : 'smallpin.png',
            position : results[0].geometry.location, draggable : false, animation : google.maps.Animation.DROP
        });
        //make bounds
     //bounce the marker
       // marker.setAnimation(google.maps.Animation.BOUNCE);
        //initialize info box
        markerBounds.extend(results[0].geometry.location);
        //listeners
        google.maps.event.addListener(marker, 'mouseover', function () {
        //stop bouncing
      //  marker.setAnimation(null);
           $("img[src$='iws3.png']").hide();
           // infowindow.setContent('<b>' + client + '<\/b><br>'+ results[0].formatted_address + '<\br>');
            //infowindow.open(map, this);
               boxText.innerHTML = "<br>"+client +"<br>"+results[0].formatted_address ;

          infoBox.setContent(boxText,marker);
          infoBox.open(map,marker);


        });
        google.maps.event.addListener(marker, 'mouseout', function () {
          //  infowindow.close();
         //start bounce
         infoBox.close();
       //   marker.setAnimation(google.maps.Animation.BOUNCE);
        });

        //ok end
    }
    else {
        //  alert('Geocode was not successful for '+client +' the following reason: ' + status);
    }
      });
         }


           //////////////calling the above two functions
      var centerpoint = new google.maps.LatLng(43.652527,  - 79.381961);//for ontario          canada zoom level-7
    //map intializing
     var map = new google.maps.Map(document.getElementById('map'), 
       {
zoom : 4, backgroundColor : '#B5B5B5', draggable : true, center : centerpoint,             mapTypeId : google.maps.MapTypeId.ROADMAP
         });
     ///geocoding multiple addresses
    //bounce markers
    function toggleBounce(mark) {
if (mark.getAnimation() != null) {

    mark.setAnimation(null); 
}
else {
    mark.setAnimation(google.maps.Animation.BOUNCE);
}
    }

    /////
    function putmarker(address,client,lat,lng) {  

    var position = new google.maps.LatLng(lat,lng);
      var  marker = new google.maps.Marker( {
            map : map, icon : 'green-dot.png', position : position, draggable : false,         animation : google.maps.Animation.DROP
        });
        //bounce the marker
       // marker.setAnimation(google.maps.Animation.BOUNCE);
        //initialize info box
        infoBox = new InfoBox(myOptions); 
        markerBounds.extend(position);
        //listeners
        google.maps.event.addListener(marker, 'mouseover', function () {
        //stop bouncing
       //   marker.setAnimation(null);
         // $("img[src$='iws3.png']").hide();
         //   infowindow.setContent('<b>' + client + '<\/b><br>'+ results[0].formatted_address);
         //  infowindow.open(map, this);
          boxText.innerHTML = "<br>"+client +"<br>"+address;

          infoBox.setContent(boxText,marker);
          infoBox.open(map,marker);
        });
        google.maps.event.addListener(marker, 'mouseout', function () {
         //  infowindow.close();
          infoBox.close();
         //start bounce
     //    marker.setAnimation(google.maps.Animation.BOUNCE);
        });

        //ok end
    }