Как также узнать название города при геокодировании? - PullRequest
0 голосов
/ 28 января 2020

Я использую API геокодирования Mapbox , чтобы найти широту и долготу места, предоставленного пользовательским вводом. Это прекрасно работает. Я также хотел бы отобразить название города, который находится по этому адресу.

Это пример запроса, который ищет "70176", почтовый индекс в Германии:

https://api.mapbox.com/geocoding/v5/mapbox.places/70176.json?fuzzyMatch=true&language=en&access_token=redacted

Это ответ:

{
   "type":"FeatureCollection",
   "query":[
      "70176"
   ],
   "features":[
      {
         "id":"postcode.12480061547829920",
         "type":"Feature",
         "place_type":[
            "postcode"
         ],
         "relevance":1,
         "properties":{

         },
         "text_en":"70176",
         "place_name_en":"70176, Stuttgart, Baden-Württemberg, Germany",
         "text":"70176",
         "place_name":"70176, Stuttgart, Baden-Württemberg, Germany",

   [...]

}

Как вы видите, он предоставляет полный адрес, который включает город («Штутгарт»), но он не отделен. Вы можете указать, что вы ищете только города, включив в свой запрос &types=place, но тогда он будет принимать только названия городов в качестве входных данных.

Как узнать широту, долготу и название города без двух вызовов API?

1 Ответ

1 голос
/ 06 марта 2020

Вы фактически получаете всю эту информацию из сделанного вами запроса:

Координаты центра ограничительной рамки, обозначающей город, возвращаются в элементе "center" объекта JSON. Название города, которое вы получаете из элемента "place_name" объекта объектов. Вам нужно будет проанализировать строку и разделить ее запятой, а затем выбрать второй элемент возвращаемого массива, чтобы получить название города.

{
"type": "FeatureCollection",
"query": [
    "70176"
],
"features": [
    {
        "id": "postcode.12480061547829920",
        "type": "Feature",
        "place_type": [
            "postcode"
        ],
        "relevance": 1,
        "properties": {},
        "text_en": "70176",
        "place_name_en": "70176, Stuttgart, Baden-Württemberg, Germany",
        "text": "70176",
        "place_name": "70176, Stuttgart, Baden-Württemberg, Germany",
        "bbox": [
            9.155781,
            48.77099,
            9.169018,
            48.784448
        ],
        "center": [
            9.16,
            48.78
        ],
        "geometry": {
            "type": "Point",
            "coordinates": [
                9.16,
                48.78
            ]
        },
        "context": [
            {
                "id": "place.5443458428087800",
                "wikidata": "Q1022",
                "text_en": "Stuttgart",
                "language_en": "en",
                "text": "Stuttgart",
                "language": "en"
            },
            {
                "id": "region.10788925313210430",
                "short_code": "DE-BW",
                "wikidata": "Q985",
                "text_en": "Baden-Württemberg",
                "language_en": "en",
                "text": "Baden-Württemberg",
                "language": "en"
            },
            {
                "id": "country.10743216036480410",
                "short_code": "de",
                "wikidata": "Q183",
                "text_en": "Germany",
                "language_en": "en",
                "text": "Germany",
                "language": "en"
            }
        ]
    },
...