高德地图与百度地图多边形区域检索服务的参数级深度对比
目录
前言
在当今数字化时代,地理信息系统(GIS)技术的发展为人们的生活和工作带来了极大的便利,而地图服务作为GIS的重要组成部分,更是广泛应用于交通、物流、旅游、城市规划等诸多领域。高德地图和百度地图作为国内两大主流的地图服务提供商,其多边形区域检索服务在功能、数据准确性、使用场景等方面各有特点,深入对比这两项服务对于开发者和用户选择合适的地图服务具有一定的现实意义,可以让各位开发者再使用平台时有一定的参考作用。

多边形区域检索是一种重要的地图检索方式,它允许用户通过定义一个多边形区域,来检索该区域内的特定地点或兴趣点(POI)。与传统的行政区划检索和圆形区域检索相比,多边形区域检索能够更精准地划定检索范围,尤其适用于复杂地形或特定区域的检索需求。例如,在城市规划中,规划师可能需要检索某个不规则地块内的所有商业设施;在物流配送中,配送员可能需要了解某个特定区域内的所有收货点。这些场景都离不开多边形区域检索服务的支持。
本文将全面的对比高德地图和百度地图的多边形区域检索服务,分别从请求参数、返回参数、Java调用三个角度对两个在线平台进行对比。各位可以在实际工作工程中按照自己的需求进行选择。
一、请求参数
本节将重点从两个地图平台的请求接口参数来进行对比,首先介绍一下两个平台的多边形区域检索的请求参数,然后分别从检索关键字、多边形区域参数、支持的坐标类型、多语言支持、单次召回数量、返回坐标类型等多个方面来进行介绍,对于未介绍的参数,大家可以自己对比参数,当然也欢迎私信博主或者在内容中评论交流。首先来看第一个表格,百度地图的请求参数表格,如下表所示:
| 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|
| query | 检索关键字。圆形区域检索和多边形区域内检索支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:银行$酒店 | 天安门、美食 | 是 |
| bounds |
检索多边形区域。需传入多个坐标对集合,坐标对用","分割,首尾坐标对需相同。多边形为矩形时,可传入左下右上两顶点坐标对。 |
38.76623,116.43213, 40.056878,116.30815, 40.465,116.314, 40.232,116.352, 40.121,116.453, 38.76623,116.43213 |
是 |
| ak |
开发者的访问密钥,必填项。v2之前该属性为key。申请密钥 |
|
是 |
| is_light_version |
true:优先保证检索速度,排序更简单直接; |
true/false |
否 |
| type |
对query召回结果进行二次筛选,type内容建议参考POI分类内容,建议query同属于一个大类; |
火锅 | 否 |
| scope | 检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息 | 1、2 | 否 |
| coord_type | 传入的坐标类型,1(wgs84ll即GPS经纬度),2(gcj02ll即国测局经纬度坐标),3(bd09ll即百度经纬度坐标),4(bd09mc即百度米制坐标) | 1、2、3(默认)、4 | 否 |
| filter |
检索排序条件,包含以下3个部分 |
industry_type:cater|sort_name: overall_rating|sort_rule:1 |
否 |
| extensions_adcode | 是否召回国标行政区划编码,true(召回)、false(不召回) | true、false | 否 |
| photo_show |
是否输出图片信息:true(输出),false(不输出) |
false、true 默认值:false | 否 |
| from_language |
query的语言类型,支持不同语言的检索词作为入参,不填默认为中文,可以设置为auto,大模型会自行判断入参语言,参考参考语种列表 |
auto |
否 |
| language |
多语言检索,支持多种语言召回结果,参考语种列表,默认为中文。 |
en,fr |
否 |
| page_num | 分页页码,默认为0,0代表第一页,1代表第二页,以此类推。常与page_size搭配使用,仅当返回结果为poi时可以翻页。 | 0、1、2 | 否 |
| page_size | 单次召回POI数量,默认为10条记录,最大返回20条。取值为10-20 | 10 | 否 |
| ret_coordtype | 返回的坐标类型,可选参数,添加后POI返回国测局经纬度坐标 | gcj02ll | 否 |
| output |
输出数据格式,仅支持json |
json |
否 |
其次再来看一下高德地图的请求参数,如下表所示:
|
参数名 |
含义 |
规则说明 |
是否必须 |
缺省值 |
|
key |
高德Key |
用户在高德地图官网 申请 Web 服务 API 类型 Key |
必填 |
无 |
|
polygon |
多边形区域 |
多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同。 |
必填 |
无 |
|
keywords |
地点关键字 |
需要被检索的地点文本信息。 只支持一个关键字 ,文本总长度不可超过80字符 |
可选 |
无 |
|
types |
指定地点类型 |
地点文本搜索接口支持按照设定的 POI 类型限定地点搜索结果;地点类型与 poi typecode 是同类内容,可以传入多个 poi typecode,相互之间用“|”分隔,内容可以参考 POI 分类码表;地点(POI)列表的排序会按照高德搜索能力进行综合权重排序; |
可选 |
120000(商务住宅) 150000(交通设施服务) |
|
show_fields |
返回结果控制 |
show_fields 用来筛选 response 结果中可选字段。show_fields 的使用需要遵循如下规则: 1、具体可指定返回的字段类请见下方返回结果说明中的“show_fields”内字段类型; 2、多个字段间采用“,”进行分割; 3、show_fields 未设置时,只返回基础信息类内字段。 |
可选 |
空 |
|
page_size |
当前分页展示的数据条数 |
page_size 的取值1-25 |
可选 |
page_size 默认为10 |
|
page_num |
请求第几分页 |
请求第几分页 |
可选 |
page_num 默认为1 |
|
sig |
数字签名 |
请参考数字签名获取和使用方法 |
可选 |
无 |
|
output |
返回结果格式类型 |
默认格式为 json,目前只支持 json 格式; |
可选 |
json |
|
callback |
回调函数 |
callback 值是用户定义的函数名称,此参数只在 output 参数设置为 JSON 时有效。 |
可选 |
无 |
以上两个表格是本节内容的重要前提,也是我们进行参数对比的现实依据。
1、检索关键字
首先来看下两者的检索关键字的差别:
| 平台 | 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|---|
| 百度 | query | 检索关键字。圆形区域检索和多边形区域内检索支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:银行$酒店 | 天安门、美食 | 是 |
| 高德 | keywords | 地点关键字、
需要被检索的地点文本信息。 只支持一个关键字 ,文本总长度不可超过80字符 |
|
可选 |
从参数的必填验证上,百度地图的关键字要求必填,而高德则是选填。在关键词的内容设置上,百度地图没有限制长度,多个关键字连接可以使用$分开,同样的参数,高德只支持一个关键字,且长度不能超过80个字符。最后一个关于文档的内容质量上来说,在双方平台的实例代码中,百度的关键字示例连接符居然不是$而是、。检索关键字是我们对比的第一个关键参数。
2、多边形区域参数
下面来看下多边形区域参数的设置有什么不同?依然采用表格的形式进行对比:
| 平台 | 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|---|
| 百度 | bounds | 检索多边形区域。需传入多个坐标对集合,坐标对用","分割,首尾坐标对需相同。多边形为矩形时,可传入左下右上两顶点坐标对。 bounds参数范围,最少2对,最大100对坐标 bounds参数在大于2对坐标时,需要首尾相连成闭合多边形 |
38.76623,116.43213, 40.056878,116.30815, 40.465,116.314, 40.232,116.352, 40.121,116.453, 38.76623,116.43213 | 是 |
| 高德 | polygon | 多边形区域,多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同。 | 可选 |
在区域范围参数中,百度地图对于bounds的坐标范围是有限制的,最大坐标是100对,而高德地图暂时没有区别。这里发现一个有意思的地方,就是两个平台对于分隔符的处理。百度地图有一点不一致,比如参数检索中,多个参数之间的分割符之前是$,而对于坐标范围分割时变成了,。反之看高德地图,不管参数的名称是什么,字符的分隔符只有一种固定的,就是|。这个就比较直接和统一,在进行参数统一设置时没有区别。
3、支持的坐标类型
接下来对比一下两个平台的请求参数中的对坐标类型的支持程度如何,来看下表:
| 平台 | 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|---|
| 百度 | coord_type | 传入的坐标类型,1(wgs84ll即GPS经纬度),2(gcj02ll即国测局经纬度坐标),3(bd09ll即百度经纬度坐标),4(bd09mc即百度米制坐标) | 1、2、3(默认)、4 | 否 |
| 高德 | - | - | - | - |
这里可以看到,在对坐标的支持程度上,百度要支持的范围多一些,一共有四种。而高德在这里默认了高德的国测局经纬度坐标,对其它的坐标类型不支持,如果在高德地图中使用非国测局坐标,为了能查询到数据,需要对空间查询面进行处理和转换。
4、多语言支持
下面来看看两个平台的多语言支持,多语言意味着要对能实现语言的参数设置,如下表:
| 平台 | 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|---|
| 百度 | language | 多语言检索,支持多种语言召回结果,参考语种列表,默认为中文。 注意:该功能为高级付费功能,您可提交工单咨询。 |
en,fr | 否 |
| 高德 | - | - | - | - |
可以看到百度地图的多语言能力稍强些。
5、单次召回数量
来看看两个平台的单次召回数量,这样可以看看单次的处理数据条数,如下表:
| 平台 | 参数名称 | 参数含义 | 示例 | 必选 |
|---|---|---|---|---|
| 百度 | page_size | 单次召回POI数量,默认为10条记录,最大返回20条。取值为10-20 | 10 | 否 |
| 高德 | page_size | page_size 的取值1-25 | 10 | 否 |
| 百度 | page_num | 分页页码,默认为0,0代表第一页,1代表第二页,以此类推。常与page_size搭配使用,仅当返回结果为poi时可以翻页。 | 0、1、2 | 否 |
| 高度 | page_num | 请求第几分页 | 1 |
从召回数量来说,两者的参数也是各有千秋。在page_size这个参数上,高德最高可以支持25条数据,而百度支持20。除了page_size的差别,在page_num上,百度的0表示第一页,而高德则使用正常数字1来表示,这样相对比较统一,从人的角度容易进行区分。
6、返回坐标类型
与请求参数的多坐标类型支持类似,在返回坐标类型中,百度是可以单独设置的类型的。而高德也只返回高德的国测局坐标,需要在实际的处理中进行调整。在此不再赘述。以上便是两个平台在这六个方面内容中的一些区别,仅供大家参考。
二、返回参数
前面对两个平台的请求参数进行了一些对比说明,接下来对两个平台的返回参数也进行一个说明。与请求参数一样的是,两个的返回参数也是有许多的不同。这里将使用两个方面来进行对比,第一个是返回的总数限制,第二个是信息层级的丰富程度。
1、返回总数限制
| 平台 | 参数名称 | 参数含义 | 数据类型 |
|---|---|---|---|
| 百度 | total | 召回poi数量,开发者请求中设置了page_num字段才会出现total字段。出于数据保护目的,单次请求total最多为150。 | int |
| 高德 | count | 单次请求返回的实际 poi 点的个数 | string |
这里的区别也是比较明显的,首先是数据类型的区别,百度直接返回int,而高德使用string,相对来讲,对于返回总数的来说,我个人觉得返回int就直接明了,不需要还需要对string来进行转换。其次在返回的总数限制啥上,百度有一个150的上限,而高德地图没有。
2、信息层级丰富程度
除了返回总数的限制以外,两个平台的信息层级和字段信息也是不一样。百度的信息层级如下图:

在返回的参数层级中,基本是一个标准的三级,如下图:

与百度不一样的是,高德地图的层级要更深,首先来看下高德地图的返回参数层级,如下所示:

它是有多个展示字段可以进行选择的,字段包括:children、business、photos、navi、indoor等。

因此从返回数据的层级来说,高德地图的层级要更加深一些。
三、Java调用集成
最后我们来讲讲如何使用Java来调用两个平台的在线接口来实现多边形的区域检索实践。
1、百度地图
package com.yelang.project.unihttp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.yelang.project.thridinterface.BaiduGeoSearchService;
import com.yelang.project.thridinterface.BaiduWeatherService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaiduGeoUnihttpCase {
private static final String BAIDU_CLIENT_AK = "bd_key";
@Autowired
private BaiduGeoSearchService bdsearchService;
@Autowired
private BaiduWeatherService baiduWeatherService;
@Test
public void testSearch() {
String query = "旅游景点";
//String region = "363,长沙,湘潭市,株洲市";//363表示怀化
String region = "长沙市";//363表示怀化
//String region = "363";//363表示怀化
String output = "json";
HttpResponse<String> result = bdsearchService.getSearch(query, region, output, BAIDU_CLIENT_AK,20,0,"2");
System.out.println("第一页的数据如下:");
System.out.println(result.getBodyResult());
System.out.println("--------------------------------------------------------");
}
}
这里需要注意的是,每次进行数据查询时都需要判断才能进入下一轮。
2、高德地图
高德地图的java调用集成实例代码如下:
package com.yelang.project.unihttp;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.google.gson.Gson;
import com.yelang.common.utils.StringUtils;
import com.yelang.common.utils.geo.CoordinateTransformUtil;
import com.yelang.project.education.domain.amap.AmapSearchVO;
import com.yelang.project.thridinterface.AmapSearchService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class AmaPOISearchCase {
private static final String AMAP_CLIENT_AK = "e37e05c2cb1cb59d7978f452574e4b2e";
@Autowired
private AmapSearchService amapSearchService;
/**
* - 根据兴趣面来搜索范围内的POI数据
* @throws InterruptedException
*/
@Test
public void searchByPolygon() throws InterruptedException {
String polygon = "112.859225,28.20061;112.859172,28.20059;112.859117,28.200556;112.859058,28.200503;112.859003,28.200391;112.858739,28.199761;112.858627,28.199041;112.858673,28.198558;112.859401,28.196282;112.859435,28.196228;112.859515,28.196194;112.859594,28.196185;112.859938,28.196191;112.860163,28.196155;112.860421,28.196063;112.860709,28.195926;112.860964,28.195702;112.861103,28.195304;112.861116,28.195285;112.86115,28.195274;112.863672,28.195709;112.863705,28.195727;112.863726,28.195767;112.863732,28.195806;112.863328,28.197513;112.863249,28.19793;112.863134,28.198666;112.863084,28.198923;112.862918,28.19949;112.862647,28.200901;112.862622,28.200931;112.862583,28.200958;112.862531,28.200989;112.862463,28.201008;112.859225,28.20061";
polygon = polygon.replaceAll(";", "|");
String keywords = "";
String types = "080000|060000";
String page_size = "25";
String show_fields = "children,business,indoor,navi,photos";
HttpResponse<String> result = null;
for(int i = 1;i<= 1;i++) {
result = amapSearchService.searchByPolygon(polygon, keywords, types, page_size, String.valueOf(i), show_fields, AMAP_CLIENT_AK);
System.out.println(result.getBodyResult());
Thread.sleep(3000L);//休眠3000秒
}
}
}
两者的获取方式有一点区别,大家在实践过程中自行区别即可。
四、总结
以上就是本文的主要内容,本文将全面的对比高德地图和百度地图的多边形区域检索服务,分别从请求参数、返回参数、Java调用三个角度对两个在线平台进行对比。通过从请求参数和返回参数的详细对比可以发现,两个平台的参数各有优缺点,平台的控制都比较清晰,而有一些参数的描述和整体的统一性上,后期还需要进行统一的完善即可。详细的内容,欢迎各位专家朋友留言指正。行文仓促,难免有许多不足之处,如有不足,在此恳请各位专家博主在评论区不吝留言指出,不胜感激。
- 点赞
- 收藏
- 关注作者
评论(0)