Получите название места на карте Google в географическом коде Lat / Lng - PullRequest
0 голосов
/ 15 октября 2019

Я использую Google API, я пытаюсь получить название места, чтобы не привязывать Lat Lng к карте. Я понимаю, что у Google нет географических названий по отношению к Lat Longs, но по идентификатору места. Что я делаю, так это геокодирование Lat long, чтобы получить адрес, и отправить свой идентификатор местоположения в Google Place Services, чтобы получить конкретное название места, я получаю толькокороткое / длинное название улицы, как это.

Плюс Если я нажму на уже помеченное место на карте, я получу адрес, отличный от того, который был отмечен на месте

 geocodeLatLng(geocoder : any, myLatLng: { lat: number, lng: number }) {
        var latlng = {lat: myLatLng.lat, lng: myLatLng.lng};
        let self = this;
        var service = new google.maps.places.PlacesService(self.map);
        this.geocoder.geocode({'location': latlng}, function(results : any , status : any) {
          if (status === 'OK') {

            var request = {
                placeId: results[0]['place_id']
            };
            service.getDetails(request, function (place: any, status: any) {
                if (status === google.maps.places.PlacesServiceStatus.OK) {
                    console.log(place);
                }
            });
            if (results[0]) {

            } else {
              window.alert('No results found');
            }
          } else {
            window.alert('Geocoder failed due to: ' + status);
          }
        });
      }

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Геокодер найдет ближайший адрес. Если вы хотите «место», используйте Google Places API поблизостиПоиск .

var searchOrigin = new google.maps.LatLng(40.6892494, -74.0445); // Statue of Liberty
var request = {
  location: searchOrigin,
  fields: ['name', 'geometry'],
  radius: 100
};

service = new google.maps.places.PlacesService(map);

service.nearbySearch(request, function(results, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    var distance = 10000;
    for (var i = 0; i < results.length; i++) {
      var marker = createMarker(results[i], i);
      // find closest result
      var thisDist = google.maps.geometry.spherical.computeDistanceBetween(searchOrigin, marker.getPosition());
      if (thisDist < distance) {
        closest = marker;
        distance = thisDist;
      }
    }

    map.setCenter(closest.getPosition());
    google.maps.event.trigger(closest, "click");
  }
});

подтверждение концепции скрипта

screenshot of resulting map

фрагмент кода:

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

var map;
var service;
var infowindow;

function initMap() {
  var sydney = new google.maps.LatLng(-33.867, 151.195);

  infowindow = new google.maps.InfoWindow();

  map = new google.maps.Map(
    document.getElementById('map'), {
      center: sydney,
      zoom: 15
    });
  var searchOrigin = new google.maps.LatLng(40.6892494, -74.0445);
  var request = {
    location: searchOrigin,
    fields: ['name', 'geometry'],
    radius: 100
  };

  service = new google.maps.places.PlacesService(map);

  service.nearbySearch(request, function(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
      var distance = 10000;
      for (var i = 0; i < results.length; i++) {
        console.log(results[i]);
        var marker = createMarker(results[i], i);
        var thisDist = google.maps.geometry.spherical.computeDistanceBetween(searchOrigin, marker.getPosition());
        if (thisDist < distance) {
          closest = marker;
          distance = thisDist;
        }
      }

      map.setCenter(closest.getPosition());
      google.maps.event.trigger(closest, "click");
    }
  });
}

function createMarker(place, i) {
  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });

  google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent(place.name);
    infowindow.open(map, this);
  });
  return marker;
}
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=places,geometry&callback=initMap" async defer></script>
0 голосов
/ 15 октября 2019
latlng.toString() 

дает вам имя и страну

...