Mapbox web api 也就网络请求的方式实现地理编码
所谓的地理编码就是位置文本转换为地理坐标
例如: xx城市 xxx街道 转换后 39.xxxxx,116.xxxxxx
1.基本地理编码请求:
URL参数 | 描述 |
---|---|
endpoint | mapbox.places 或 mapbox.places-permanent |
search_text | 您正在尝试查找的功能。这可以是地址,兴趣点名称,城市名称等。当搜索兴趣点时,它也可以是类别名称(例如,“咖啡店”)。搜索文本应表示为URL编码的UTF-8字符串,并且不得包含分号字符(原始字符或URL编码)。您的搜索文本一旦解码,必须包含最多20个单词和由间距和标点符号分隔的数字,最多包含256个字符。 |
access_token | 有效的Mapbox 访问令牌 。 |
String url=“https://api.mapbox.com/geocoding/v5/mapbox.places/Los%20Angeles.json?access_token=您的访问令牌“
例:
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url(url).get().build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("testMapQuest","==>返回结果:onFailure "+e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json=response.body().string();
Log.e("testMapQuest","==>返回结果:onResponse "+json);
}
});
2.关于响应
对地理编码的回应API请求是包含以下属性的对象:
属性 | 描述 |
---|---|
type | "FeatureCollection" ,GeoJSON规范中的GeoJSON类型 。 |
query | 转发地理编码: 原始查询中的空格和标点符号分隔的字符串数组。 反向地理编码: 包含要查询的坐标的数组。 |
features | 一系列要素对象。 转发地理编码: 返回的要素按顺序排列 relevance 。 反向地理编码: 返回的要素按索引层次排序,从大多数特定要素到与查询坐标重叠的最不具体要素。 |
attribution | 一个字符串,用于将Mapbox Geocoding API的结果归因于Mapbox。 |
{
"type": "FeatureCollection",
"query": [
"los",
],
"features"
{
"id": "place.9962989141465270",
"type": "Feature",
"place_type": [
],
"relevance": 0.99,
"properties": {
"wikidata":
},
"text": "Los Angeles",
"place_name": "Los Angeles, California, United States",
"bbox": [
-118.529221009603,
33.901599990108,
-118.121099990025,
],
"center": [
-118.2439,
],
"geometry": {
"type": "Point",
"coordinates": [
-118.2439,
]
},
"context": [
{
"id": "region.3591",
"short_code": "US-CA",
"wikidata": "Q99",
"text": "California"
},
{
"id": "country.3145",
"short_code": "us",
"wikidata": "Q30",
"text": "United States"
}
]
},
{
"id": "place.10952642230180310",
"type": "Feature",
"place_type": [
"place"
],
"relevance": 0.99,
"properties": {
"wikidata": "Q16910"
},
"text": "Los Ángeles",
"place_name": "Los Ángeles, Bío Bío, Chile",
"bbox": [
-72.68248,
-37.663862,
-72.041277,
-37.178368
],
"center": [
-72.35,
-37.46667
],
"geometry": {
"type": "Point",
"coordinates": [
-72.35,
-37.46667
]
},
"context": [
{
"id": "region.3552",
"short_code": "CL-BI",
"wikidata": "Q2170",
"text": "Bío Bío"
},
{
"id": "country.344",
"short_code": "cl",
"wikidata": "Q298",
"text": "Chile"
}
]
},
{
"id": "poi.1611278850983920",
"type": "Feature",
"place_type": [
"poi"
],
"relevance": 0.99,
"properties": {
"address": "1 World Way",
"category": "international airport, airport",
"tel": "(310) 646-5252",
"wikidata": "Q8731",
"landmark": true,
"maki": "airport"
},
"text": "Los Angeles International Airport",
"place_name": "Los Angeles International Airport, 1 World Way, Los Angeles, California 90045, United States",
"center": [
-118.408056,
33.9425
],
"geometry": {
"coordinates": [
-118.408056,
33.9425
],
"type": "Point"
},
"context"
{
"id": "neighborhood.33720",
"text": "Westchester"
},
{
"id": "postcode.8081932850252730",
"text": "90045"
},
{
"id": "place.9962989141465270",
"wikidata": "Q65",
"text": "Los Angeles"
},
{
"id": "region.3591",
"short_code": "US-CA",
"wikidata": "Q99",
"text": "California"
},
{
"id": "country.3145",
"short_code": "us",
"wikidata": "Q30",
"text": "United States"
}
]
},
{
"id": "neighborhood.2104633",
"type": "Feature",
"place_type": [
"neighborhood"
],
"relevance": 0.99,
"properties": {},
"text": "Los Angeles Heights - Keystone",
"place_name": "Los Angeles Heights - Keystone, San Antonio, Texas 78201, United States",
"bbox": [
-98.534942,
29.453364,
-98.514652,
29.485214
],
"center": [
-98.52,
29.47
],
"geometry": {
"type": "Point",
"coordinates": [
-98.52,
29.47
]
},
"context"
{
"id": "postcode.7069290925572850",
"text": "78201"
},
{
"id": "place.7705127234253710",
"wikidata": "Q975",
"text": "San Antonio"
},
{
"id": "region.3818",
"short_code": "US-TX",
"wikidata": "Q1439",
"text": "Texas"
},
{
"id": "country.3145",
"short_code": "us",
"wikidata": "Q30",
"text": "United States"
}
]
},
{
"id": "poi.17555628334440500",
"type": "Feature",
"place_type": [
"poi"
],
"relevance": 0.99,
"properties": {
"address": "3939 S Figueroa St",
"category": "stadium, arena",
"tel": "(213) 747-7111",
"wikidata": "Q849784",
"landmark": true,
"maki": "baseball"
},
"text": "Los Angeles Memorial Coliseum",
"place_name": "Los Angeles Memorial Coliseum, 3939 S Figueroa St, Los Angeles, California 90037, United States",
"center": [
-118.287778,
34.014167
],
"geometry": {
"coordinates": [
-118.287778,
34.014167
],
"type": "Point"
},
"context": [
{
"id": "neighborhood.293901",
"text": "South Los Angeles"
},
{
"id": "postcode.15612390715732530",
"text": "90037"
},
{
"id": "place.9962989141465270",
"wikidata": "Q65",
"text": "Los Angeles"
},
{
"id": "region.3591",
"short_code": "US-CA",
"wikidata": "Q99",
"text": "California"
},
{
"id": "country.3145",
"short_code": "us",
"wikidata": "Q30",
"text": "United States"
}
]
}
],
"attribution": "NOTICE: © 2018 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained."
}
features
数组中的每个要素对象可能具有以下属性:
属性 | 描述 |
---|---|
id | 格式{type}.{id} 中的 要素ID {type} ,即place_type 字段中的最低层次结构要素 。{id} 功能ID 的 后缀不稳定,可能会在版本内发生变化。 |
type | "Feature" ,GeoJSON规范中的GeoJSON类型 。 |
place_type | 描述该功能的一系列要素类型。选项包括 country , region ,postcode , district , place , locality ,neighborhood , address ,和 poi 。大多数功能只有一种类型,但如果该功能有多种类型,则所有适用的类型都将列在数组中。(例如,梵帝冈是 country , region ,和 place 。) |
relevance | 从0 (最不相关)到 1 (最相关)的分数, 用于衡量每个返回的要素与查询的文本匹配。您可以使用该 relevance 属性删除与查询不完全匹配的结果。 |
address (可选的) | 返回address 要素的门牌号码字符串 。请注意,与要素的address 属性 不同 poi ,此属性位于properties 对象外部 。 |
properties | 描述该功能的对象。该 properties 对象可以与数据的改进变化。您的实现应该在尝试使用它们之前检查响应中是否存在这些值。 |
properties.address (可选的) | 返回poi 要素的完整街道地址字符串 。请注意,与要素的address 属性 不同 address ,此属性位于 properties 对象内。 |
properties.category (可选的) | 返回poi 要素的逗号分隔类别字符串 。 |
properties.tel (可选的) | 返回poi 功能的电话号码的格式化字符串 。 |
properties.maki (可选的) | 建议的Maki 图标的名称,用于 poi 根据其显示 特征 category 。 |
properties.landmark (可选的) | 描述该功能是否在 poi.landmark 数据类型中。不推荐使用此数据类型,poi 出于向后兼容性原因,此属性将出现在所有 功能上,但始终如此 true 。 |
properties.wikidata (可选的) | 返回功能的 Wikidata标识符。 |
properties.short_code (可选的) | 返回功能的 ISO 3166-1 国家/地区和 ISO 3166-2区域代码。 |
text | 表示所请求语言中的功能的字符串(如果已指定)。 |
place_name | 表示所请求语言中的功能的字符串(如果已指定)及其完整结果层次结构。 |
matching_text (可选的) | 类似于text 字段的字符串 ,与查询的匹配程度高于指定语言的结果。例如,Köln, Germany 使用 language set to English( en )查询 可能会返回带有 text Cologne 和的功能matching_text Köln 。 |
matching_place_name (可选的) | 类似于place_name 字段的字符串 ,与查询的匹配程度高于指定语言的结果。例如,Köln, Germany 使用设置为English(en )的语言 查询 可能会返回带有a place_name Cologne, Germany 和a matching_place_name 的 要素 Köln, North Rhine-Westphalia, Germany 。 |
text_{language} (可选的) | 类似于text 与所请求语言的查询匹配的字段的字符串 。只有在使用language 参数请求多种语言时才会返回此字段,并且每个请求的语言都会显示该字段 。 |
place_name_{language} (可选的) | 类似于place_name 与所请求语言的查询匹配的字段的字符串 。只有在使用language 参数请求多种语言时才会返回此字段,并且每个请求的语言都会显示该字段 。 |
language (可选的) | 查询主要语言的IETF语言标记的字符串 。 |
language_{language} (可选的) | 查询后备语言的IETF语言标记的字符串 。只有在使用language 参数请求多种语言时才会返回此字段,并且每个请求的语言都会显示该字段 。 |
bbox | 表单中的边界框数组 [minX,minY,maxX,maxY] 。 |
center | 表单中要素中心的坐标 [longitude,latitude] 。这可能是要素几何的字面质心,或要素内人类活动的中心(例如,城市的市中心区域)。 |
geometry | 描述返回要素的空间几何的对象。 |
geometry.type | "Point" ,GeoJSON规范中的GeoJSON类型 。 |
geometry.coordinates | 格式[longitude,latitude] 在指定中心的 数组 bbox 。 |
geometry.interpolated (可选的) | 如果有,表示的 address 是 插入 沿着道路网络。地理编码器通常可以返回精确的地址点,但如果地址不存在,地理编码器可以使用插值数据作为后备。在边缘情况下,如果不存在周围的地址数据,则可能无法进行插值,在这种情况下,下一个回退将是街道要素本身的中心点。 |
context | 表示包含父要素的层次结构的数组。每个父特征可以包括任何上述属性。 |
routable_points (可选的) | 具有该功能的可路由点的对象。 |
routable_points.points (可选的) | 形式为点的数组, [{ coordinates: [lon, lat] }] 如果未找到任何点,则为null。 |
3.您可以使用以下可选参数进一步细化正向地理编码查询的结果:
查询参数 | 描述 |
---|---|
autocomplete (可选的) | 指定是否返回自动完成结果( true ,默认)或不返回( false )。启用自动完成功能后,将包含以请求的字符串开头的结果,而不仅仅是与其完全匹配的响应。例如,查询 India 可能会返回两者 India 并 Indiana 启用自动完成功能,但前提 India 是它已被禁用。 |
bbox (可选的) | 将结果限制为仅包含在提供的边界框内的结果。边界框应按minLon,minLat,maxLon,maxLat 顺序提供四个以逗号分隔的数字 。边界框不能越过第180个子午线。 |
country (可选的) | 将结果限制在一个或多个国家/地区 允许的值是以 逗号分隔的ISO 3166 alpha 2国家/地区代码。 |
fuzzyMatch | 指定地理编码API在执行搜索时是否应尝试近似匹配以及精确匹配( true 默认),或者是否应选择退出此行为并仅尝试完全匹配( false )。例如,默认设置可能会返回 Washington, DC 用于查询 wahsington ,即使查询被拼错。 |
language (可选的) | 指定用户的语言。此参数控制响应中提供的文本的语言,并且还影响结果评分,其中与所请求语言的用户查询匹配的结果优先于与另一种语言匹配的结果。例如,对于以开头的内容开头的自动完成查询 Frank 可能会返回 Frankfurt 第一个带有English( en )语言参数的结果,但是 Frankreich (“France”)带有德语(de )语言参数。 选项是 IETF语言标签, 包括强制性 ISO 639-1语言代码, 以及可选的国家或脚本的一个或多个IETF子标签。 对于需要以多种语言显示标签的应用程序,还可以使用逗号分隔多个值。 |
limit (可选的) | 指定要返回的最大结果数。默认值为 5 ,支持的最大值为 10 。 |
proximity (可选的) | 偏向响应以支持更接近此位置的结果,按longitude,latitude 顺序提供两个以逗号分隔的坐标 。 |
routing | 指定是否请求有关与功能(true )对应的推荐导航目标的其他元数据 ( false 默认)。仅适用于 address 功能。 例如,如果 routing=true 响应可以包括关于特征前沿道路上的点的数据。响应特征可以包括包含一个或多个可路由点的阵列。无法始终确定可路由点。如果未返回单独的可路由点,则应用的应用程序应回退到使用要素的常规几何进行路由。 |
types (可选的) | 过滤结果以仅包括可用要素类型的子集(一个或多个)。选项包括 country ,region , postcode , district , place , locality ,neighborhood , address ,和 poi 。多个选项可以用逗号分隔。请注意,这 poi.landmark 是一种不推荐使用的类型,虽然仍然支持,但返回的数据与使用该poi 类型返回的数据相同 。 |
3.1 #在特定地区找到一个名为'Chester'的小镇
#使用本地坐标添加proximity参数
#这确保了新泽西州切斯特镇的成果
String url=“https://api.mapbox.com/geocoding/v5/mapbox.places/chester.json?proximity=-74.70850,40.78375&access_token=your-access-token”
3.2 #指定types = country以仅搜索名为Georgia的国家/地区
#结果将排除美国佐治亚州
String url="https://api.mapbox.com/geocoding/v5/mapbox.places/georgia.json?types=country&access_token=your-access-token"
3.3 在华盛顿特区搜索”星巴克“
#使用边界框将结果限制在区域
String url=“https://api.mapbox.com/geocoding/v5/mapbox.places/starbucks.json?bbox=-77.083056,38.908611,-76.997778,38.959167&access_token=your-access-token”
3.4使用限制选项将结果限制为2个结果
#尽管
”华盛顿“ 有许多可能的匹配#,但此查询只返回2个结果
String url=“https://api.mapbox.com/geocoding/v5/mapbox.places/Washington.json?limit=2&access_token=your-access-token”