Поиск хорошего и бесплатного API обратного геокодирования - программирование
Подтвердить что ты не робот

Поиск хорошего и бесплатного API обратного геокодирования

Я знаком с двумя API обратного геокодирования - Google Maps и foursquare. У обоих проблемы. Рассмотрим lat, lng = 35.699,139.707 (Токио).

Foursquare:

GET https://api.foursquare.com/v2/venues/search?ll=35.699,139.707&oauth_token=5TJR4WQZSOW0ZWTE4ENMXKO3Y415252GITEMRPQIVPMEGCYK&v=20120723&limit=1

дает следующий результат:

{
"meta": {
    "code": 200
},
"notifications": [
    {
        "type": "notificationTray",
        "item": {
            "unreadCount": 0
        }
    }
],
"response": {
    "venues": [
        {
            "id": "4b64ebedf964a520e3d92ae3",
            "name": "まいどおおきに食堂 東新宿食堂",
            "contact": {
                "phone": "0352911870",
                "formattedPhone": "03-5291-1870"
            },
            "location": {
                "address": "大久保1-1-45",
                "crossStreet": "新宿セントラルハイツプラザ 1F",
                "lat": 35.698492646211,
                "lng": 139.707271456718,
                "distance": 61,
                "postalCode": "169-0072",
                "city": "新宿区",
                "state": "東京都",
                "country": "Japan",
                "cc": "JP"
            },
            "categories": [
                {
                    "id": "4bf58dd8d48988d111941735",
                    "name": "Restaurant japonais",
                    "pluralName": "Restaurants japonais",
                    "shortName": "Japonaise",
                    "icon": {
                        "prefix": "https://foursquare.com/img/categories_v2/food/japanese_",
                        "suffix": ".png"
                    },
                    "primary": true
                }
            ],
            "verified": false,
            "stats": {
                "checkinsCount": 191,
                "usersCount": 100,
                "tipCount": 1
            },
            "url": "http://www.shokudo.jp/",
            "likes": {
                "count": 0,
                "groups": []
            },
            "specials": {
                "count": 0,
                "items": []
            },
            "hereNow": {
                "count": 0,
                "groups": []
            }
        }
    ]
}

}

Меня интересует запись response.venues[0].location.city. К сожалению, я не знаю японцев, поэтому я не могу сказать, что это такое. Ну, google говорит, что это Синдзюку - один из специальных подопечных Токио.

Карты Google:

GET http://maps.googleapis.com/maps/api/geocode/json?sensor=false&language=en&latlng=35.699,139.707

дает:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "41",
               "short_name" : "41",
               "types" : [ "sublocality_level_4", "sublocality", "political" ]
            },
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Japan, Tokyo, Shinjuku, Okubo, 1丁目1−41",
         "geometry" : {
            "location" : {
               "lat" : 35.69893960,
               "lng" : 139.7069460
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70028858029149,
                  "lng" : 139.7082949802915
               },
               "southwest" : {
                  "lat" : 35.69759061970850,
                  "lng" : 139.7055970197085
               }
            }
         },
         "types" : [ "sublocality_level_4", "sublocality", "political" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "169-8540",
               "short_name" : "169-8540",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "2",
               "short_name" : "2",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "1丁目-2 Okubo, Shinjuku, Tokyo 169-8540, Japan",
         "geometry" : {
            "location" : {
               "lat" : 35.69946460,
               "lng" : 139.70746810
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70081358029149,
                  "lng" : 139.7088170802915
               },
               "southwest" : {
                  "lat" : 35.69811561970850,
                  "lng" : 139.7061191197085
               }
            }
         },
         "types" : [ "postal_code" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Japan, Tokyo, Shinjuku, Okubo, 1丁目1",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.69984490,
                  "lng" : 139.70749510
               },
               "southwest" : {
                  "lat" : 35.69787060,
                  "lng" : 139.70506090
               }
            },
            "location" : {
               "lat" : 35.69880630,
               "lng" : 139.70610160
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70020673029150,
                  "lng" : 139.7076269802915
               },
               "southwest" : {
                  "lat" : 35.69750876970850,
                  "lng" : 139.7049290197085
               }
            }
         },
         "types" : [ "sublocality_level_3", "sublocality", "political" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Japan, Tokyo, Shinjuku, Okubo, 1丁目",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.70128920,
                  "lng" : 139.70796940
               },
               "southwest" : {
                  "lat" : 35.69787060,
                  "lng" : 139.7019760
               }
            },
            "location" : {
               "lat" : 35.69868950,
               "lng" : 139.70306310
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70128920,
                  "lng" : 139.70796940
               },
               "southwest" : {
                  "lat" : 35.69787060,
                  "lng" : 139.7019760
               }
            }
         },
         "types" : [ "sublocality_level_2", "sublocality", "political" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Okubo, Shinjuku, Tokyo, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.70956610,
                  "lng" : 139.7091340
               },
               "southwest" : {
                  "lat" : 35.69787310,
                  "lng" : 139.70060080
               }
            },
            "location" : {
               "lat" : 35.70418340,
               "lng" : 139.70558750
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70956610,
                  "lng" : 139.7091340
               },
               "southwest" : {
                  "lat" : 35.69787310,
                  "lng" : 139.70060080
               }
            }
         },
         "types" : [ "sublocality_level_1", "sublocality", "political" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "Higashishinjuku Station",
               "short_name" : "Higashishinjuku Station",
               "types" : [ "train_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "27",
               "short_name" : "27",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "7丁目",
               "short_name" : "7丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Higashishinjuku Station, 7丁目-27 Shinjuku, Tokyo, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.7050830,
                  "lng" : 139.7144590
               },
               "southwest" : {
                  "lat" : 35.6926030,
                  "lng" : 139.7000410
               }
            },
            "location" : {
               "lat" : 35.697920,
               "lng" : 139.7075490
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.7050830,
                  "lng" : 139.7144590
               },
               "southwest" : {
                  "lat" : 35.6926030,
                  "lng" : 139.7000410
               }
            }
         },
         "types" : [ "train_station", "transit_station", "establishment" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "169-0072",
               "short_name" : "169-0072",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "Okubo",
               "short_name" : "Okubo",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Okubo, Shinjuku, Tokyo 169-0072, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.70972520,
                  "lng" : 139.71028470
               },
               "southwest" : {
                  "lat" : 35.69710930,
                  "lng" : 139.69624280
               }
            },
            "location" : {
               "lat" : 35.70418340,
               "lng" : 139.70558750
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70972520,
                  "lng" : 139.71028470
               },
               "southwest" : {
                  "lat" : 35.69710930,
                  "lng" : 139.69624280
               }
            }
         },
         "types" : [ "postal_code" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "Shinokubo Station",
               "short_name" : "Shinokubo Station",
               "types" : [ "train_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "10",
               "short_name" : "10",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Hyakunincho",
               "short_name" : "Hyakunincho",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Shinokubo Station, 1丁目-10 Hyakunincho, Shinjuku, Tokyo, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.7078270,
                  "lng" : 139.708840
               },
               "southwest" : {
                  "lat" : 35.6953970,
                  "lng" : 139.6937970
               }
            },
            "location" : {
               "lat" : 35.7013060,
               "lng" : 139.7000440
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.7078270,
                  "lng" : 139.708840
               },
               "southwest" : {
                  "lat" : 35.6953970,
                  "lng" : 139.6937970
               }
            }
         },
         "types" : [ "train_station", "transit_station", "establishment" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "Shinjuku Station",
               "short_name" : "Shinjuku Station",
               "types" : [ "train_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "38",
               "short_name" : "38",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "3丁目",
               "short_name" : "3丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Shinjuku Station, 3丁目-38 Shinjuku, Tokyo, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.7005790,
                  "lng" : 139.7124960
               },
               "southwest" : {
                  "lat" : 35.6812220,
                  "lng" : 139.6878250
               }
            },
            "location" : {
               "lat" : 35.6909210,
               "lng" : 139.7002580
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.7005790,
                  "lng" : 139.7124960
               },
               "southwest" : {
                  "lat" : 35.6812220,
                  "lng" : 139.6878250
               }
            }
         },
         "types" : [ "train_station", "transit_station", "establishment" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "160-0022",
               "short_name" : "160-0022",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Shinjuku",
               "short_name" : "Shinjuku",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Shinjuku, Tokyo 160-0022, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.70311470,
                  "lng" : 139.71922230
               },
               "southwest" : {
                  "lat" : 35.68222330,
                  "lng" : 139.69241360
               }
            },
            "location" : {
               "lat" : 35.69110170,
               "lng" : 139.7067630
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 35.70311470,
                  "lng" : 139.71922230
               },
               "southwest" : {
                  "lat" : 35.68222330,
                  "lng" : 139.69241360
               }
            }
         },
         "types" : [ "postal_code" ]
      },
   /* REMOVED FOR BREVITY */
   ],
   "status" : "OK"
}

API Карт Google на английском языке, но его результаты слишком низки. Например, города и города обычно идентифицируются с типом locality. Здесь находится Синдзюку, который является одним из специальных подопечных Токио, но это деталь реализации административной системы Токио. Я хочу, чтобы Токио стал городом. Конечно, я мог бы искать токен administrative_area_level_1 вместо locality, зная, что Токио фактически является одной из префектур Японии.

Четырехуровневый API имеет ту же проблему, он сообщает о городе как Синдзюку и государстве, как о Токио, только как японский!

Есть ли простой API обратного геокодирования высокого уровня, который возвращает результаты здравого смысла? Я имею в виду, что никто из Японии не говорит: "Я иду в Синдзюку". Люди говорят: "Я еду в Токио".

Спасибо.

4b9b3361

Ответ 1

API Карт Google может помочь вам, поскольку он предлагает возможность устанавливать точность.

Ответ 2

OpenStreeMap также имеет инструмент обратного поиска:

http://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocoding_.2F_Address_lookup

Пример из ссылки:

Query:

 http://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1

Результат:

 <reversegeocode timestamp="Fri, 06 Nov 09 16:33:54 +0000" querystring="...">
   <result place_id="1620612" osm_type="node" osm_id="452010817">
     135, Pilkington Avenue, Wylde Green, City of Birmingham, West Midlands (county), B72, United Kingdom
   </result>
   <addressparts>
     <house>135</house>
     <road>Pilkington Avenue</road>
     <village>Wylde Green</village>
     <town>Sutton Coldfield</town>
     <city>City of Birmingham</city>
     <county>West Midlands (county)</county>
     <postcode>B72</postcode>
     <country>United Kingdom</country>
     <country_code>gb</country_code>
   </addressparts>   
 </reversegeocode>

Ответ 3

Попробуйте GeocodeFarm.

250 бесплатных запросов ежедневно на IP-адрес, но веб-сервис бесплатный для неограниченного использования, а дешевые 25 долларов США ежедневно дают 25 000 запросов (что я и использую для своих приложений).

Результаты просты в понимании, тщательная документация, вперед и назад и т.д.

Ответ 4

Вы можете попробовать Bing Maps. Я не знаю, насколько это точно, но вы можете попробовать.

http://dev.virtualearth.net/services/v1/geocodeservice/geocodeservice.asmx/ReverseGeocode?latitude=[NUMBER]&longitude=[NUMBER]&key=[MAPS_KEY]&culture=%22en-us%22&format=json