我正在制作动态地图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是未定义的,这是真的,因为它不适用于给定的对象/数组按地方。
问题:为什么视口提供的值与实际坐标不同?
答案 0 :(得分:1)
如果我理解正确,您的目的是从Google数据库中获取该地点的位置。
我建议您遵循官方API参考文档,避免在代码中使用viewport.b.b
或viewport.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();
我希望这有帮助!