我对地图有一个非常讨厌的问题:当我在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 翻译为 cartahago (在其内部版本中:因为 la marsa 接近购物车,所以在地理位置上是正确的。
但突尼斯没有人会打电话给 La marsa : carthago 这是没有意义的。
所以问题是:为什么网络客户端使用好的条款和Api不?
使用chrome developer进行检查,(在网络选项卡上),我有此请求已执行。我不知道如何将其翻译成其他api的网址
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
提前感谢您的每一个答案
答案 0 :(得分: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。
以某种方式在这里踢......或者只是通过 administrative_area_level_2 对组件位置进行了明确的偏好...因为匹配只是部分有信心:0.51319576424371627?< / p>
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产生了非常有趣的结果。
答案 1 :(得分:1)
你可以用La Marsa替换Carthago。或者假装谷歌地图提供正确的地理编码。最有可能来自Google Maps api的地理编码是正确的,你是否过度思考?!为了提高准确性,您可以在地理编码中搜索不同的名称:Google Maps API: Geocode returns different co-ordinates then Google maps但很可能使用不同的数据库:Google Maps Web site and API : different results。还有姓名和地址:Google Map geocoder not as accurate as a Google maps。如何解析地理编码:how to parse a Google Maps geocoding result。