代码之家  ›  专栏  ›  技术社区  ›  flash

如何在地图上围绕一个特定的城市画一个圈?

  •  0
  • flash  · 技术社区  · 6 年前

    我在做一个我想做的项目 在项目的位置周围画一个圈 在谷歌地图上。在下面的代码中,如果单击 show 标签,然后它应该在谷歌地图上显示项目位置周围的圆圈:

    <div class="tab-pane" id="show">
     <p>
        <span class="heading_size">show:</span>
     </p>
    
     <p class="text-justify mb-0 pb-5">
       <!-- <? php echo strtolower($data['item']->item_address); ?> -->
        <div id="map" style="width:100%;height:500px"></div> 
    
        <script>
        function myMap() {
          var amsterdam = new google.maps.LatLng(52.395715,4.888916);
          var mapCanvas = document.getElementById("map");
          var mapOptions = {center: amsterdam, zoom: 7};
          var map = new google.maps.Map(mapCanvas,mapOptions); 
    
          var myCity = new google.maps.Circle({
            center: amsterdam,
            radius: 50000,
            strokeColor: "#0000FF",
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: "#0000FF",
            fillOpacity: 0.4
          });
    
          myCity.setMap(map);
        }
        </script>
        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBu-916DdpKAjTmJNIgngS6HL_kDIKU0aU&callback=myMap"></script>
     </p>
    </div>
    


    问题陈述:

    item_address 如上述代码所示 使用回声。所以我需要用下面的数据绕一圈 city 以下json中的字段。例如:在下面的json-city字段中 ottawa

    {
        "address_id": 115,
        "country": "canada",
        "state": "ontario",
        "city": "ottawa",
        "street": "riverside drive",
        "number": "1750",
        "postal": "k1g 3t6"
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Dipen Shah    6 年前

    你需要使用 找出城市在地图上的位置。您可以看看下面的工作示例。

    google.maps.event.addDomListener(window, "load", function() {
      myMap();
    });
    
    function myMap() {
      //add global geocoder
      window.geocoder = new google.maps.Geocoder();
    
      var mapCanvas = document.getElementById("map_div");
      var mapOptions = {
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: new google.maps.LatLng(33.808678, -117.918921)
      };
      window.map = new google.maps.Map(mapCanvas, mapOptions);
    
      drawCircleAroundCity('ottawa');
    }
    
    function drawCircleAroundCity(cityName) {
      if (!cityName) return;
      if (!window.geocoder) throw "Geocoder is not loaded";
    
      window.geocoder.geocode({
        'address': cityName
      }, function(results, status) {
        if (status == 'OK') {
          addCircle(results[0].geometry.location, true);
        } else {
          throw 'Unable to find address: ' + address;
        }
      });
    }
    
    function addCircle(position, recenter) {
      if (typeof(position) != 'object') return;
      if (!window.map) throw "Map is not loaded";
    
      var myCity = new google.maps.Circle({
        center: position,
        radius: 50000,
        strokeColor: "#0000FF",
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: "#0000FF",
        fillOpacity: 0.4
      });
    
      myCity.setMap(window.map);
    
      if (recenter)
        window.map.setCenter(position);
    }
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>
    <div id="map_div" style="height: 400px;"></div>
        2
  •  0
  •   Dan Nagle    6 年前

    使用谷歌地图 Geocoding API 并从JSON字段构造适当的请求。API将返回一个JSON对象,其中包含纬度和经度值。

    您的API请求将采用以下形式:

    https://maps.googleapis.com/maps/api/geocode/json?address=1750+riverside+drive,ottawa,ontario,canada&key=YOUR_API_KEY
    
        3
  •  0
  •   McMurphy    6 年前

        var circleOptions = {
          clickable: true,
          draggable: true,
          editable: true,
          visible: false,
          strokeColor: 'gray',
          strokeOpacity: 0.8,
          strokeWeight: 2,
          fillColor: 'gray',
          fillOpacity: 0.35,
          center: marker.getPosition()
        };
    
        radarCircle = new radarView(new google.maps.Circle(circleOptions));
    
        google.maps.event.addDomListener(radarCircle,    'center_changed', reScope);
        google.maps.event.addDomListener(radarCircle,    'radius_changed', reScope);
    
    function radarView(superBase)
    {
        this.__proto__ = superBase;
    
        if (this instanceof google.maps.Circle) {
            augmentCircle.apply(this);
        } else if (this instanceof google.maps.Rectangle) {
            augmentRectangle.apply(this);
        } else {
            Tier3Toolbox.reportError({header:"Internal error", 
                    message:"Inheriting from unknown object"});
        }
    
        this.doX = function(x){return "x is>" + x;};
    
        return this;
    }
    
    function augmentCircle()
    {
        this.moveBorder = function()
        {
            google.maps.event.trigger(radarCircle,"center_changed");
        }
    }
    
    function augmentRectangle()
    {
        this.moveBorder = function()
        {
            google.maps.event.trigger(radarRectangle,"bounds_changed");
        }
    }
    
    
    function reScope() {
    
        var searchReq = {'cmd':'search', 'scopeVintage':scopeVintage};
        if (radarShape.getCenter) {
            searchReq.checker = 0;
            var currCenter = radarCircle.getCenter();
            searchReq.centerLat = currCenter.lat();
            searchReq.centerLng = currCenter.lng();         
            searchReq.radius = radarCircle.getRadius();
        } else {
            searchReq.checker = 1;
            searchReq.SWLat = radarShape.getBounds().getSouthWest().lat();
            searchReq.SWLng = radarShape.getBounds().getSouthWest().lng();
            searchReq.NELat = radarShape.getBounds().getNorthEast().lat();
            searchReq.NELng = radarShape.getBounds().getNorthEast().lng();
        }
    
        facFinder.postMessage(searchReq);
    }