Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图API v3-地理编码器结果有边界问题_Javascript_Google Maps_Google Maps Api 3_Google Geocoder_Fitbounds - Fatal编程技术网

Javascript 谷歌地图API v3-地理编码器结果有边界问题

Javascript 谷歌地图API v3-地理编码器结果有边界问题,javascript,google-maps,google-maps-api-3,google-geocoder,fitbounds,Javascript,Google Maps,Google Maps Api 3,Google Geocoder,Fitbounds,目标:我希望有一个自定义搜索(地理编码)功能,能够列出并单击 并在地图上显示每个结果 需要:相应地调整地图边界/缩放级别,即搜索“MA,USA”应缩放地图以让我看到整个马萨诸塞州,而搜索“Boston,MA,USA”应缩放波士顿地区。当列出多个结果时,单击一个结果时也应如此 问题:我可以将geometry.bounds对象与fitbunds一起使用-但是-使用geocoder获得的某些结果没有该geometry.bounds对象 一个简单的例子:搜索“Boston”返回 美国马萨诸塞州波士顿 美

目标:我希望有一个自定义搜索(地理编码)功能,能够列出并单击 并在地图上显示每个结果

需要:相应地调整地图边界/缩放级别,即搜索“MA,USA”应缩放地图以让我看到整个马萨诸塞州,而搜索“Boston,MA,USA”应缩放波士顿地区。当列出多个结果时,单击一个结果时也应如此

问题:我可以将geometry.bounds对象与fitbunds一起使用-但是-使用geocoder获得的某些结果没有该geometry.bounds对象

一个简单的例子:搜索“Boston”返回

美国马萨诸塞州波士顿
美国波士顿
美国肯塔基州波士顿
波士顿,佐治亚州31626,美国
美国弗吉尼亚州塞勒姆市波士顿22713号
美国纽约州波士顿14025

“波士顿,肯塔基州”和“波士顿NY 14025”都没有边界

问题:是否有可靠的方法以适当的缩放比例在地图上显示任何地理编码器结果 水平

现在我正在使用类似的东西,但我觉得这很难看,它不能解决缩放问题

if (results[0].geometry.bounds) {

    map.fitBounds(results[0].geometry.bounds);

} else {

    map.setCenter(results[0].geometry.location);
    // eventually set zoom here to some middle-range value (ugly)
}

视口对象具有创建边界对象所需的信息。大概是这样的:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng),
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng)
);
然后可以对新的bounds对象使用fitBounds,就像对返回的bounds对象所做的一样。像这样:

map.fitBounds(bounds);

对。在尝试了这两种方法和测试后,结果表明:

  • 正如文档所说,
    geometry.bounds
    对象是“optionnaly returned”
  • 我们不知道
    几何体.bounds
    对象基于什么
  • geometry.bounds
    “可能与推荐的视口不匹配”,并且通常不匹配
  • geometry.bounds
    返回任意大小和形状的正方形或矩形,而视口函数始终返回具有相同纵横比(约1.43)的矩形,无论您的地图容器尺寸是什么,据我测试
  • 下面是旧金山,CA,在DOC中提到的例子。 使用

    geometry.bounds以红色显示,使用viewport函数以蓝色显示

    该解决方案足够简单且可靠

    var resultBounds = new google.maps.LatLngBounds(
    
        results[0].geometry.viewport.getSouthWest(), 
        results[0].geometry.viewport.getNorthEast()
    );
    
    map.fitBounds(resultBounds);
    

    您是否尝试过使用
    视口
    对象。我应该在视口对象中查找哪些值?这里似乎没有任何边界返回。谢谢。我将在一分钟内对此进行测试,但是,如果我理解得很好,所有结果都将具有这4个视口值。所以,如果有,为什么有些结果会与geometry.bounds对象一起出现,而有些则不会?奇怪的是,我想…我不完全确定,但下面是谷歌的解释:“边界(可选返回)存储可以完全包含返回结果的边界框。请注意,这些边界可能与推荐的视口不匹配。(例如,旧金山包括法拉伦群岛,这些岛屿在技术上是城市的一部分,但可能不应该在视口中返回。)嗯……很有趣!我将尝试两种方法,在地图上画几个矩形,检查差异(如果有),然后在这里报告。你知道这些属性是否仍然有效吗?即视口上纵横比的纵横比?也是信息来源?你能不能测试一下?我想我对此没有兴趣。