Google Maps V3 API --- Я хотел бы получить округ на основе широты / долготы при динамическом создании маркера - PullRequest
2 голосов
/ 02 ноября 2011

Хорошо, этот вопрос в 2 раза:

  1. Я хотел бы отобразить наложение с отображением округов на карте Google ... как я могу это сделать?
  2. Я бы хотелкак получить округ, основанный на широте / долготе, когда маркер создается динамически.

Я думаю, что вопрос 2 немного сложнее.Вот код, который у меня есть до сих пор.В основном ... «Маркер работы» создается тремя способами: a.Типы пользователей в адресе --- адрес геокодирован, маркер установлен b.пользователь дважды щелкает по карте, и маркер устанавливается - адрес меняется на геокодированный 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());
        }
      }
    });

    });

1 Ответ

4 голосов
/ 02 ноября 2011

Сначала вы можете использовать Google Map Overlay , чтобы нарисовать оверлей.

Во-вторых, используя Запрос геокодирования , вы можете получить ответ, содержащий адрес (который должен включать округ)

Обновление

Вот пример из ссылки на запрос геокодирования выше:

{
  "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" - это Array из Object, который содержит свойства long_name, short_name и types. «types» - это Array из string, который содержит значения, описывающие long_name и short_name. Похоже, вам нужно перебирать каждый address_components в поисках Object, где types имеет строковое значение "administrator_area_level_2".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...