Google Maps读取spherical属性报错,搜索后定位最近标记功能异常
报错原因
Cannot read properties of undefined (reading 'spherical')报错的核心原因是谷歌地图JavaScript API的geometry几何库没有在初始化加载时引入,google.maps.geometry对象未被初始化,所以无法访问其下的spherical属性。
修复方案
- 第一步:修改谷歌地图API的加载脚本,追加
libraries参数引入geometry库
如果之前的加载代码是:
<script src="https://maps.googleapis.com/maps/api/js?key=你的API密钥"></script>
修改为:
<script src="https://maps.googleapis.com/maps/api/js?key=你的API密钥&libraries=geometry"></script>
- 第二步:可选优化原有代码逻辑,补充边界判断避免pins为空的异常,修改后的完整参考代码如下:
function geocodeAddress(geocoder, resultsMap){ var address = document.getElementById('address').value; geocoder.geocode({'address': address}, function(results, status){ if (status === 'OK') { function find_closest_marker(event){ // 补充pins非空判断,避免无标记点时报错 if(!pins || pins.length === 0) return; var distances = []; var closest = -1; for(i = 0; i < pins.length; i++){ var d = google.maps.geometry.spherical.computeDistanceBetween(pins[i].position, event); distances[i] = d; if (closest == -1 || d < distances[closest]){ closest = i; } } resultsMap.setCenter(pins[closest].position); // 若需要自动缩放到合适层级可以补充下面这行 // resultsMap.setZoom(15); } find_closest_marker(results[0].geometry.location); } else { alert('地址解析失败,原因:' + status); } }); }
内容的提问来源于stack exchange,提问作者user715449
相关产品推荐
相关产品推荐

