2

我对地图有一个非常奇怪的问题:当我在 maps.google.com 上搜索“rue du sapin, la marsa, tunisie”时,它会找到它并按预期工作。

现在我正在使用 Api 并以这种方式配置它

private static final String MAPS_REQUEST_URL = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&language=FR&components=country:TN&address=";

当我使用“rue du sapin, la marsa, tunisie”请求此网址时,它返回Rue du Sapin, Carthago, Tunisie

我尝试使用地区、语言、国家参数,但没有任何效果:它接缝谷歌正在将la marsa翻译成carthago(在其内部版本中:这在地理上是正确的,因为la marsa在 carthago 附近。

但是在突尼斯没有人会叫La marsa : carthago这是没有意义的。

那么问题来了:为什么 web 客户端使用好术语而 Api 不使用?


与 chrome 开发人员核对(在网络选项卡上),我执行了此请求。我不知道如何将它翻译成其他 api 的 url

curl 'https://maps.google.com/maps/suggest?q=rue+du+sapin,+la+mars&cp=21&hl=en&gl=&v=2&clid=1&json=a&ll=34.768691,10.008545&spn=5.955003,16.907959&vpsrc=6&authuser=0&auth=526fd0392GzY4pXSd2dS4DPzdNUGxkJ-kLI&src=1,2&num=5&numps=2&callback=_xdc_._1fhndbld0j' -H ':host: maps.google.com' -H 'accept-encoding: gzip,deflate,sdch' -H 'accept-language: en-US,en;q=0.8,fr;q=0.6,cs;q=0.4,it;q=0.2,ar;q=0.2' -H 'user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36' -H ':path: /maps/suggest?q=rue+du+sapin,+la+mars&cp=21&hl=en&gl=&v=2&clid=1&json=a&ll=34.768691,10.008545&spn=5.955003,16.907959&vpsrc=6&authuser=0&auth=526fd0392GzY4pXSd2dS4DPzdNUGxkJ-kLI&src=1,2&num=5&numps=2&callback=_xdc_._1fhndbld0j' -H 'accept: */*' -H ':version: HTTP/1.1' -H 'referer: https://maps.google.com/' -H 'cookie: SS=(...)' -H ':scheme: https' -H 'x-chrome-variations: CIO2yQEIhrbJAQiltskBCKm2yQEIxLbJAQiehsoBCNeHygEIlorKAQ==' -H ':method: GET' --compressed

它接缝这个答案与我的问题有关(即使距离很远) Google Map APIs:UK specific results


预先感谢您的每一个答案

4

2 回答 2

3

http://maps.googleapis.com/maps/api/geocode/json?sensor=true&language=EN&address=rue%20du%20sapin,%20la%20marsa(注意传感器、语言和除地址之外的其他任何内容)生成包含所有数据的结果集,“La Marsa Soukra”也是。

一种解决方案是从您收到的组件中生成您自己的formatted_address 。

我希望你只有一个位置命名对实例来过滤这个问题......是的,我不知道我在说什么^^

~回复后的详细信息

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Rue du Sapin",
               "short_name" : "Rue du Sapin",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Carthago",
               "short_name" : "Carthago",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "La Marsa Soukra",
               "short_name" : "La Marsa Soukra",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Tunis",
               "short_name" : "Tunis",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Tunisia",
               "short_name" : "TN",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Rue du Sapin, Carthago, Tunisia",
         "geometry" : {
            ...
         },
         "partial_match" : true,
         "types" : [ "route" ]
      }
   ],
   "status" : "OK"
}

我的猜测是

从 maps.googleapis.com 加载时,Maps API v3 的当前实现不依赖于与 Google 交换 cookie。

以某种方式在这里开始......或者只是简单地优先考虑组件位置而不是管理区域级别_2......因为匹配只是部分有信心:0.51319576424371627?

maps.google.com/maps/suggest 甚至不是任何人都应该使用的东西(API 甚至没有正确记录,已弃用的 v2 使用 maps.google.com/maps/geo)并使用谷歌拥有的所有或多或少的私人数据.

我玩过cp参数

http://maps.google.com/maps/suggest?q=rue+du+sapin,+la+marsa&cp=21&hl=en

和 20 产生了非常有趣的结果。

于 2013-11-04T22:42:45.517 回答
1

您可以将 Carthago 替换为 La Marsa。或者假装谷歌地图提供了正确的地理编码。很可能来自 Google Maps api 的地理编码是正确的,而您想多了?!为了提高您的准确性,您可以在地理编码中搜索不同的名称:Google Maps API:Geocode 返回的坐标与 Google 地图不同,但很可能它使用不同的数据库:Google Maps 网站和 API:不同的结果。还有名称和地址:Google Map geocoder 不如 Google maps 准确。如何解析地理编码:如何解析谷歌地图地理编码结果

于 2013-11-04T22:02:14.570 回答