Google Maps V3 -> Is it possible to get properties

2019-08-02 11:32发布

I'm using an external geojson-file to add layers to my Google Map. This file contains two properties per area that I would like to access when searching. I can easily fetch the properties if the user clicks on an area or uses any of the other supported event handlers.

https://developers.google.com/maps/documentation/javascript/datalayer#add_event_handlers

this.map.data.addListener('mouseover', (event) => {
    console.log(event.feature.getProperty('VD'));
});

However I would like to get what geojson area I'm in when searching and from that access these properties. Is this possible to do?

searchBox.addListener('places_changed', () => {
    var places = this.searchBox.getPlaces();
    ...
    places.forEach((place) => {
    ...

enter image description here

1条回答
Summer. ? 凉城
2楼-- · 2019-08-02 12:12

You can use containsLocation utility to check if a LatLng location is contained by a Polygon.

So in a for loop get all features in your Data layer (populated with loadGeoJson() or addGeoJson()), get each geometry and create a Polygon to use with the containsLocation() function.

For example, the following code checks if loc (LatLng) is contained in one of the features of feats array:

inWhichArea = function(map, loc) {
  for (var i in feats) {
    var area = feats[i].getGeometry();
    var poly = new google.maps.Polygon({
      paths: area.getAt(0).getArray(),
      map: map,
      clickable: false
    });
    if (google.maps.geometry.poly.containsLocation(loc, poly)) {
      return feats[i];
    }
  }
  return null;
}

Here is a jsfiddle with a working example: http://jsfiddle.net/beaver71/sgtpop4f/

查看更多
登录 后发表回答