разговор с поддержкой Mapbox
Привет, Артемий,
Это Алекс из службы поддержки Mapbox, рад помочь!
Вам захочется использовать API Mapbox Tilequery. Опция, которую вы хотите использовать, это радиус. Обратите внимание, что в запросах будут использоваться плитки с максимальным увеличением набора плиток, и они будут включать только пересекающуюся плитку плюс восемь окружающих плиток при поиске ближайших объектов. Это означает, что если ваш набор плиток имеет максимальный экстент z20, максимальный радиус, который вы можете искать, составляет всего несколько метров. Вот площадка API, с которой вы можете протестировать API.
Надеюсь, это было полезно!
Привет, Алекс,
спасибо за быстрый ответ, еще один вопрос:
запрос:
https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/55.9414,54.7295.json?radius=25&limit=50&dedupe&geometry=point&access_token=YOUR_MAPBOX_ACCESS_TOKEN
ответ:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": 8,
"geometry": {
"type": "Point",
"coordinates": [
55.94845533370972,
54.72732387401962
]
},
"properties": {
"house_num": "32",
"tilequery": {
"distance": 8.949637333832088,
"geometry": "point",
"layer": "housenum_label"
}
}
},
{
"type": "Feature",
"id": 23629792230,
"geometry": {
"type": "Point",
"coordinates": [
55.948566645383835,
54.72761119224691
]
},
"properties": {
"class": "general",
"filterrank": 4,
"maki": "marker",
"name": "Башинформсвязь",
"name_script": "Cyrillic",
"sizerank": 16,
"type": "Telecommunication",
"tilequery": {
"distance": 23.898768437893523,
"geometry": "point",
"layer": "poi_label"
}
}
}
]
}
вопрос: Я понимаю, что могу найти информацию о местах, которые я получил в ответе, используя API обратного геокодирования, но есть ли другой подход сделать это? В идеале я хотел бы получить имена poi из одного запроса tilquery, потому что в случае использования двух API (tilquery + геокодирование) мне придется запрашивать 4-5 запросов вместо только одного (только беспокойство, потому что это влияет на стоимость).
Привет, Артемий,
В API Tilequery есть параметр, называемый слоями, который можно использовать для нацеливания на определенный c слой вашего стиля.
https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/55.9414,54.7295.json?radius=25&limit=50&dedupe&geometry=point&layers=poi_label&access_token=
, который получает этот ответ:
{ "type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": 32316157590,
"geometry": {
"type": "Point",
"coordinates": [
55.94142526388168,
54.7295828683082
]
},
"properties": {
"category_en": "Supermarket",
"category_zh-Hans": "超市",
"class": "food_and_drink_stores",
"filterrank": 1,
"maki": "grocery",
"name": "Магнит",
"name_script": "Cyrillic",
"sizerank": 16,
"type": "Supermarket",
"tilequery": {
"distance": 9.367370433680872,
"geometry": "point",
"layer": "poi_label"
}
}
}
]
}
Вы можете взять этот объект ответа и вернуть всю информацию из POI. Свойство name - это имя POI. Были ли другие свойства, которые вы искали из обратного геокодирования, которые не возвращались запросом плитки? Для вас было бы полезно поделиться полным примером рабочего процесса с использованием как мозаичного запроса, так и обратного геокодирования, а также узнать больше о вашем конкретном случае использования и о том, как эта операция мозаичного запроса / обратного геокодирования вписывается в рабочий процесс вашего более крупного приложения.
Привет, Алекс, запрос
(без метки poi, поскольку он не находит несколько баров, я знаю. Но если вы добавите эту метку, вы увидите только один результат): https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/55.9485,54.7275.json?radius=14&limit=50&dedupe&access_token=YOUR_MAPBOX_ACCESS_TOKEN
запрос
ответ:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": 5,
"geometry": {
"type": "Point",
"coordinates": [
55.9485,
54.7275
]
},
"properties": {
"extrude": "true",
"height": 15,
"min_height": 0,
"type": "building",
"underground": "false",
"tilequery": {
"distance": 0,
"geometry": "polygon",
"layer": "building"
}
}
},
{
"type": "Feature",
"id": 1297495121,
"geometry": {
"type": "Point",
"coordinates": [
55.94833781213748,
54.727526546045794
]
},
"properties": {
"class": "path",
"iso_3166_1": "RU",
"iso_3166_2": "RU-BA",
"len": 4450,
"oneway": "false",
"structure": "none",
"surface": "paved",
"type": "footway",
"tilequery": {
"distance": 10.859473551200084,
"geometry": "linestring",
"layer": "road"
}
}
},
{
"type": "Feature",
"id": 23629792230,
"geometry": {
"type": "Point",
"coordinates": [
55.948566645383835,
54.72761119224691
]
},
"properties": {
"class": "general",
"filterrank": 4,
"maki": "marker",
"name": "Башинформсвязь",
"name_script": "Cyrillic",
"sizerank": 16,
"type": "Telecommunication",
"tilequery": {
"distance": 13.10152056398561,
"geometry": "point",
"layer": "poi_label"
}
}
},
{
"type": "Feature",
"id": 7,
"geometry": {
"type": "Point",
"coordinates": [
55.94869895433047,
54.7274698331467
]
},
"properties": {
"extrude": "true",
"height": 3,
"min_height": 0,
"type": "building",
"underground": "false",
"tilequery": {
"distance": 13.251093067012334,
"geometry": "polygon",
"layer": "building"
}
}
}
]
}
Если мы декодируем первую пару координат (55.9485, 54.7275), используя обратное геокодирование (https://docs.mapbox.com/search-playground), мы получаем Smoky People , ул. Ленина, 32, Уфа, Республика Башкирия 450077, Россия и, если мы расшифруем все пары, мы сможем найти больше кафе и баров (poi's).
Эй, Артемии,
Причиной различных результатов являются источники запросов.
API Tilequery ищет вещи, которые есть в нашем наборе плиток Mapbox Streets v8 (который использует наш стиль Mapbox Streets v11). Данные в этом наборе плиток в основном поступают из OpenStreetMap. Если на карте отсутствуют или устарели места, это прекрасная возможность помочь нам улучшить нашу карту! Если вы хотите что-то добавить или отредактировать, зайдите на openstreetmap.org, создайте учетную запись и внесите улучшения напрямую. Для начала вам будет предложено go в интерактивном учебном пособии. Здесь также есть более подробная информация для расширенного редактирования: https://labs.mapbox.com/mapping. Набор плиток Mapbox Streets регулярно обновляется по мере того, как объекты редактируются или добавляются на карту, что означает, что если вы отредактируете OpenStreetMap, вы в конечном итоге увидите, что ваши изменения будут отражены на карте Mapbox.
API геокодирования содержит источники данных от правительств, проектов открытых данных и частных компаний. В некоторых случаях результаты API геокодирования могут отличаться от данных Mapbox Streets или OpenStreetMap. Посмотрите эту документацию о том, как геокодирование работает в Mapbox.
Я думаю, что лучший способ уменьшить количество вызовов API, которые вы делаете, - это выбрать один API, либо обратное геокодирование, либо Tilequery, и придерживаться его. С OpenStreetMaps, как бы скучно это ни звучало, у вас есть возможность добавлять любые POI, которые, как вы знаете, отсутствуют, или делать перекрестные ссылки на другие источники, чтобы добавлять POI на карту, что сделает место видимым на карте, а также появится в вашем tilequery. Благодаря API геокодирования, из-за природы некоторых источников и лицензий, не все места, которые вы можете искать, видны на карте.