Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps Google Place Details API中的语言不一致_Google Maps_Localization_Google Places Api - Fatal编程技术网

Google maps Google Place Details API中的语言不一致

Google maps Google Place Details API中的语言不一致,google-maps,localization,google-places-api,Google Maps,Localization,Google Places Api,我在服务器上使用GooglePlaceDetailsAPI来存储关于一个地方的信息,使用客户端发送的placeId 我面临一个关于结果语言的问题,当地点是一个城市或该城市的地址时,结果语言会有所不同,即使查询中指定了语言。例如: 地点idChIJ53USP0nBhkcRjQ50xhPN_zw是米兰市,API将millan返回为地点,Lombardy返回为行政区(英文名称) 地点idEjBWaWEgZGVsbGEgU3BpZ2EsIE1pbGFuLCBQcm92aW5jZSBvZiBNaWxhb

我在服务器上使用GooglePlaceDetailsAPI来存储关于一个地方的信息,使用客户端发送的
placeId

我面临一个关于结果语言的问题,当地点是一个城市或该城市的地址时,结果语言会有所不同,即使查询中指定了语言。例如:

  • 地点id
    ChIJ53USP0nBhkcRjQ50xhPN_zw
    是米兰市,API将
    millan
    返回为地点,
    Lombardy
    返回为行政区(英文名称)

  • 地点id
    EjBWaWEgZGVsbGEgU3BpZ2EsIE1pbGFuLCBQcm92aW5jZSBvZiBNaWxhbiwgSXRhbHk
    是米兰的一条街道,API返回
    Milano
    作为地点,返回
    Lombardia
    作为行政区域(意大利语名称)


更奇怪的是,这两个搜索都将意大利作为国家返回。这是API的预期行为吗?

我认为您可以使用一些可选参数来设置所需的语言,例如:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=cruise&language=en
附近的搜索请求是以下形式的HTTP URL:

https://maps.googleapis.com/maps/api/place/nearbysearch/output?parameters
放入
语言
参数,以便:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=cruise&language=en

有关更多详细信息,请参阅。

这是API的预期行为吗?

是的,这是预期的结果。即使您指定了一种语言,它也将仅在有可用语言的情况下返回该语言的响应,如果没有,它将以最初输入的语言返回响应

案例1:

  • 米兰:米兰就是一座城市。因此,几乎每种语言都有可用的结果。世界上几乎所有的主要城市都有各种语言的结果。默认情况下,您将以英语获得结果
案例2:

  • 德拉斯皮加大道:因为它是一条街道。现在,结果只能用意大利语输入,因为它们很可能是用意大利语输入的
在谷歌地图中通过della Spiga搜索“结果:

要了解更多信息,请执行以下操作:

  • 。在这种情况下,要求提供一个特性,告诉开发人员结果是哪种语言的,以便他们能够相应地处理数据,我个人认为,在问题没有解决之前,这将是非常好的

  • 上述两个问题都是2年前的问题。然而,谷歌无法解决这个问题

    解决此问题的一种方法是使用:

    因为您可以使用textsearch将大部分行政区域/城市转换为任何语言名称:

    示例:将
    “伦巴第”
    转换为中文

    https://maps.googleapis.com/maps/api/place/textsearch/json?query=Lombardia&language=zh-CN&key=你的API

    {
       "html_attributions" : [],
       "results" : [
          {
             "formatted_address" : "意大利伦巴第",
             "geometry" : {
                "location" : {
                   "lat" : 45.47906709999999,
                   "lng" : 9.8452433
                },
                "viewport" : {
                   "northeast" : {
                      "lat" : 46.6351853,
                      "lng" : 11.4276993
                   },
                   "southwest" : {
                      "lat" : 44.6796491,
                      "lng" : 8.4978605
                   }
                }
             },
             "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
             "id" : "02401d0909d69ca5c69de799e193caf84acc41f9",
             "name" : "伦巴第",
             "place_id" : "ChIJf4M-GsNEgUcR1JMVKCIm8qY",
             "reference" : "CoQBfQAAAEKCAV-1Ec-V2ZfnWsCk_elhlEXckc_k94jBYlU7k5ivhrqPlWd24aSAa5fqNTfwKKhU0wSsZFv42aMm1BrG5wEwZNGKwFqELxMEt0ye7KFfBgVtfHZbqeiBx3hEH8Iq60wwW--edqpROkBTjHrxIwisCGJwhCzKKkQ9H6FdfW_aEhAnmI0ZOFk1KGaGms4IqTOiGhRX5iErBIwnmLos4U9Ggs325MmcEA",
             "types" : [ "administrative_area_level_1", "political" ]
          }
       ],
       "status" : "OK"
    }
    
    伦巴第亚在中文里是意大利伦巴第

    搜索placeID详细信息时,您会得到
    地址\u组件
    数组:

    "address_components" : [
             {
                "long_name" : "Via della Spiga",
                "short_name" : "Via della Spiga",
                "types" : [ "route" ]
             },
             {
                "long_name" : "Milano",
                "short_name" : "Milano",
                "types" : [ "locality", "political" ]
             },
             {
                "long_name" : "Milano",
                "short_name" : "MI",
                "types" : [ "administrative_area_level_2", "political" ]
             },
             {
                "long_name" : "Lombardia",
                "short_name" : "Lombardia",
                "types" : [ "administrative_area_level_1", "political" ]
             },
             {
                "long_name" : "Italy",
                "short_name" : "IT",
                "types" : [ "country", "political" ]
             }
          ]
    

    因此,如果您在上面的数组上循环并使用textsearch,则您将获得一种特定语言的几乎一致的地址。

    我已经设置了语言参数,问题是API忽略了地址的城市部分,除非placeId指定了一个城市。在案例2中,米兰是城市。该信息存储在地址组件中,类型为“locality”,就像案例1中一样。。。所以谷歌知道这两种语言的城市名称,没有理由结果不一致。但是考虑到谷歌已经知道这一点两年了,没有什么可以期待的。我的意思是写
    “Via dela Spiga”
    ,而不是
    “milano”
    ,即使你搜索“milano”,你也会得到
    place\u id=“ChIJ53USP0nBhkcRjQ50xhPN\u zw”
    ,并且会产生大部分语言(我是指文本搜索)。基本上,我的意思是“Via della Spiga”的地址是用意大利语写的。如果地点只保存在一种语言中,那么它将只返回该语言,但国家不是这样。现在我正在搜索一篇我很久以前读过的关于谷歌如何保存地址的文章。会和你分享吗?当然。目前,我正在考虑使用案例2中给出的城市名称和Autocomplete来获取城市的
    placeId
    ,并重用该
    placeId
    ,以获取带有地点详细信息的英文名称。有点难看,但至少我会得到一个一致的城市名称。虽然,它看起来有点凌乱,但它会工作。我们对此无能为力,因为这是一个bug。您可以使用与英语相同的文本搜索设置语言,然后您将在一次调用中获得地名的英语名称。我已经检查过它对“米兰”和“伦巴第”都有效。你可以通过为每个人多打一次电话,在英语中获得这两个结果<代码>https://maps.googleapis.com/maps/api/place/textsearch/json?query=Lombardia&language=en&key=YOUR_API_KEYHi,您介意在调用此API的位置共享您的代码片段吗?我在这方面遇到了麻烦。调用此api后,我的代码不会返回任何内容。您好,Nalin,这是一个非常简单的请求,使用PHP中的cURL,指向本文档中指示的URL:。如果你在使用它时遇到问题,最好问一个新问题。是的,我指的是同一个网页来做我的工作。我一回家就会问一个新问题。所有这些代码都在我的个人笔记本电脑上。