地图api视口经度和纬度都关闭

时间:2018-01-16 15:33:21

标签: javascript google-maps google-maps-api-3

我正在制作动态地图API,您可以根据需要进行设置。在一个人输入他的地方名称后,我可以得到视口的纬度和经度。首先,我得到2个值,然后根据真实坐标关闭它们。我也将结果返回到我自己的地图API。

经过多次困惑后,我开始比较2并将它们分开。这仍然给出一个错误的整数。 有了这个,我得到的值与已经给出的名称相关联。

google.maps.event.addDomListener(searchBox, 'places_changed', function(event) {

       var places = searchBox.getPlaces();


       var bounds = new google.maps.LatLngBounds();
       var i, place;

       for (i = 0; place = places[i]; i++) {
          bounds.extend(place.geometry.location);
          marker.setPosition(place.geometry.location);
          for(key in places) {
               if(places.hasOwnProperty(key)) {
                   var value = places[key];
                   var geoLong = value.geometry.viewport.b.b;
                   var geoLat = value.geometry.viewport.f.f;

示例:

帝国大厦:实际坐标:40.748817,-73.985428。

我的结果:纬度:40.746983和40.749681:经度-73.983858和-73.986556。

这是来自geometry.viewport.b。(b或f)和geometry.viewport.f。(b或f)这就是我检索信息的方式。

可能的解决方案:

经过多次尝试和错误获得正确的结果后,我偶然发现了这一点。

google.maps.event.addListener(map, 'click', function(event){
    console.log( "Latitude: "+event.latLng.lat()+" "+", longitude: "+event.latLng.lng() );
});

虽然这给了正确的值,但是我不能像对待其他2那样调用它。它一直说latLng是未定义的,这是真的,因为它不适用于给定的对象/数组按地方。

问题:为什么视口提供的值与实际坐标不同?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您的目的是从Google数据库中获取该地点的位置。

我建议您遵循官方API参考文档,避免在代码中使用viewport.b.bviewport.f.f之类的内容。请注意,一旦Google更新了API的版本,这些未记录的属性可能会更改其名称。

如果您查看文档,则会看到getPlaces()搜索框方法会返回Array<PlaceResult>结果。

https://developers.google.com/maps/documentation/javascript/reference#SearchBox

因此,代码中的var value的类型PlaceResult在此处记录:

https://developers.google.com/maps/documentation/javascript/reference#PlaceResult

地方结果的geometry属性具有PlaceGeometry类型,此处记录:

https://developers.google.com/maps/documentation/javascript/reference#PlaceGeometry

这意味着为了获得该地点的位置,您应该执行以下代码

var value = places[key];
var geoLong = value.geometry.location.lng();
var geoLat = value.geometry.location.lat();

我希望这有帮助!