地图POI搜索返回的坐标字段为什么是空的?

柯福 阅读 44

在用高德地图API做POI搜索时,发现返回的poi列表里location字段全是空对象,但其他信息如名称地址都有数据。我按文档写了参数,ak也验证过有效:


amap.service('AMap.PlaceSearch').then(PlaceSearch => {
  const search = new PlaceSearch({city: '310000'});
  search.search('咖啡店', (status, data) => {
    console.log(data.pois[0].name);   // 正常输出名称
    console.log(data.pois[0].location); // 输出空对象 {}
  });
});

已经尝试过把参数类型从字符串改数字,调整搜索关键词,甚至清空浏览器缓存,但坐标始终拿不到。这是怎么回事?

我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
东景
东景 Lv1
这个问题大概率是高德地图API的权限问题,虽然你验证过ak有效,但具体接口的权限可能没开全。POI搜索里的location字段需要额外开通“高级定位”或者“地理编码”权限才能返回坐标数据。

你可以先检查下控制台有没有类似“Insufficient privileges”这样的报错信息,这通常就是权限不足导致的。解决办法是去高德开放平台的开发者后台,找到你的应用,看看有没有勾选“高级定位服务”或者“逆地理编码”这些选项。如果没有就加上,然后重新获取ak。

另外代码本身也有个小问题,location字段其实是个对象,你需要通过 lnglat 属性来获取具体的经纬度值。我建议你调整下代码:

amap.service('AMap.PlaceSearch').then(PlaceSearch => {
const search = new PlaceSearch({city: '310000'});
search.search('咖啡店', (status, data) => {
if (data.pois && data.pois.length) {
const poi = data.pois[0];
console.log(poi.name); // 输出名称
if (poi.location && poi.location.lng && poi.location.lat) {
console.log(经度:${poi.location.lng}, 纬度:${poi.location.lat});
} else {
console.error('location字段为空,请检查API权限');
}
}
});
});


最后提醒一句,高德API的权限审核有时候挺慢的,提交申请后耐心等等吧。如果还是不行,可以试着换个关键词或者区域测试一下,排除其他可能性。
点赞 1
2026-02-19 04:03
Prog.曦月
检查一下是否漏掉了设置返回坐标的参数。高德PlaceSearch默认不返回经纬度,需要显式指定extensions: 'all'才能拿到location里的坐标数据。

把初始化PlaceSearch的参数改成这样:
const search = new PlaceSearch({
city: '310000',
extensions: 'all'
});
点赞 7
2026-02-05 17:01