我已经使用Google Maps API很长一段时间了,以前能够成功使用距离矩阵服务here。然后我决定做一些重构并出现问题......
尝试获取Distance Matrix服务的结果时,rows
对象包含一个空的(status: ZERO_RESULTS
)对象数组。
运行时期间的空对象:
通常情况如下所示:
coords
数组被传递到distanceMatrixCoords()
函数。它们看起来像这样:
使用坐标字符串正确填充其他变量,例如var origins = pos;
。
包含此代码的整个文件是 available here
function distanceMatrixCoords(coords) {
var origins = pos;
var destinations = coords;
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix({
origins: [origins],
destinations: destinations,
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.IMPERIAL,
avoidHighways: false,
avoidTolls: false
},
callback
);
function callback(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK) {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
var distanceElement = [];
var theRow = null;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
var element = results[j];
var distance = element.distance.text;
var duration = element.duration.text;
var from = origins[i];
var to = destinations[j];
distanceElement[j] = document.createElement('p');
distanceElement[j].innerHTML = results[j].distance.text;
distanceElement[j].className = 'distance-cell';
}
}
}
}
}
最终,根据上面的代码,行var results = response.rows[i].elements;
是代码中断的地方。 response.rows
是数组中具有多个 ZERO_RESULTS 的对象。与我之前的代码(上面链接的)相比,distanceMatrixCoords()
函数接收的数据与以前完全相同。
传递给response
函数的callback()
对象包含以下值:
destinationAddresses
和originAddresses
使用看起来像逗号分隔值"41.0259285,81.5899887"
的坐标正确填充。问题再一次是rows
数组。
我已经查看了许多其他来源的答案,但Google Maps API的距离矩阵服务似乎没有很多可用资源。我看到this question,但还没有记录答案。
答案 0 :(得分:5)
问题是我从我为获取数据而构建的服务中错误地返回了我的坐标。例如,当41.0259285,81.5899887
坐标为41.0259285,-81.5899887
时,坐标为{{1}}。缺少经度前面的减号,因此坐标无效,距离矩阵服务不知道如何处理它们。
答案 1 :(得分:0)
我遇到了类似的问题,但没有指定“地区”(又称国家/地区代码),并且发送了一个“目的地”(在美国是一个地方)以及一组长/短坐标。
添加预期的国家解决了该问题。