【问题标题】:Google Maps V3 API --- I would like to get the county based off lat/lng when a marker is dynamically createdGoogle Maps V3 API --- 我想在动态创建标记时根据 lat/lng 获取县
【发布时间】:2023-06-26 22:00:01
【问题描述】:

好的,这个问题是2折:

  1. 我想在 google 地图上显示一个显示县的叠加层...我该怎么做?
  2. 我想在动态创建标记时根据 lat/lng 获取县。

我认为问题 2 涉及更多。这是我到目前为止的代码。基本上......“工作标记”以 3 种方式创建: 一个。地址中的用户类型---地址被地理编码,标记被设置 湾。用户双击地图并设置标记---地址被反向地理编码 3.用户将默认标记拖到地图上的新区域---标记集----地址被反向地理编码。

代码如下:

    initialize();

    //Function for the autocomplete field for map
    $(function() {
    $("#address").autocomplete({
      //This bit uses the geocoder to fetch address values
      source: function(request, response) {
       geocoder.geocode( {'address': request.term + ', us' }, function(results, status) {
          response($.map(results, function(item) {
            return {
              label:  item.formatted_address,
              value: item.formatted_address,
              latitude: item.geometry.location.lat(),
              longitude: item.geometry.location.lng()
            }
          }));
        })
      },
      //This bit is executed upon selection of an address
      select: function(event, ui) {
        $("#latitude").val(ui.item.latitude);
        $("#longitude").val(ui.item.longitude);
        var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
        jobMarker.setPosition(location);
        map.setCenter(location);
      }
    });
  });

    //when user drags job marker the new info is added. 
    google.maps.event.addListener(jobMarker, 'drag', function() {
    geocoder.geocode({'latLng': jobMarker.getPosition()}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[0]) {
          $('#address').val(results[0].formatted_address);
          $('#latitude').val(jobMarker.getPosition().lat());
          $('#longitude').val(jobMarker.getPosition().lng());
        }
      }
    });
  });


   google.maps.event.addListener(map, "dblclick", function(event)
    {


        // display the lat/lng in your form's lat/lng fields
        var location = new google.maps.LatLng(event.latLng.lat(), event.latLng.lng());
        jobMarker.setPosition(location);


        geocoder.geocode({'latLng': jobMarker.getPosition()}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[0]) {
          $('#address').val(results[0].formatted_address);
          $('#latitude').val(jobMarker.getPosition().lat());
          $('#longitude').val(jobMarker.getPosition().lng());
        }
      }
    });

    });

【问题讨论】:

    标签: javascript jquery google-maps


    【解决方案1】:

    首先您可以使用Google Map Overlay 来绘制叠加层。

    第二次使用Geocoding Request,您可以获得包含地址(应包括县)的响应

    更新

    这是来自上述地理编码请求链接的示例:

    {
      "types":["sublocality","political"],
      "formatted_address":"Winnetka, California, USA",
      "address_components":
      [
        {
        "long_name":"Winnetka",
        "short_name":"Winnetka",
        "types":["sublocality","political"]
        },
        {
        "long_name":"Los Angeles",
        "short_name":"Los Angeles",
        "types":["administrative_area_level_3","political"]
        },
        {
        "long_name":"Los Angeles",
        "short_name":"Los Angeles",
        "types":["administrative_area_level_2","political"]
        },
        {
        "long_name":"California",
        "short_name":"CA",
        "types":["administrative_area_level_1","political"]
        },
        {
        "long_name":"United States",
        "short_name":"US",
        "types":["country","political"]
        }],
      "geometry":{
        "location": [34.213171,-118.571022],
        "location_type":"APPROXIMATE"
      }
    }
    

    “address_components”是Object 中的Array,包含属性long_nameshort_nametypes。 “类型”是stringArray,包含描述long_nameshort_name 的值。看来您必须遍历每个address_components 寻找Object,其中types 的字符串值为“administrative_area_level_2”。

    【讨论】:

    • 虽然我已经阅读了文档,但我对如何让管理区域级别 2 填充感到困惑:$('#area').val();