在地址解析请求中指定地区时返回错误的城市

时间:2019-04-25 14:53:32

标签: here-api

我正在与HERE地理编码器一起工作,如果我们在searchtext参数中添加特定的地区名称,则会发现返回的城市错误的情况。

这是示例请求:

https://geocoder.api.here.com/6.2/geocode.json?app_id=...&app_code=...&searchtext=Centro,Campos%20dos%20Goytacazes,RJ,Brazil

这是响应的重要部分:

{
  _type: "SearchResultsViewType",
  ViewId: 0,
  Result: [
    {
      Relevance: 1,
      MatchLevel: "district",
      MatchQuality: {
         Country: 1,
         State: 1,
         City: 1,
         District: 1
     },
     Location: {
                 ...
                 Address: {
                     Label: "Centro, Nova Iguaçu, RJ, Brasil",
                     Country: "BRA",
                     State: "RJ",
                     City: "Nova Iguaçu",
                     District: "Centro",
                     PostalCode: "26052-060",
                     ...
     }

如您所见,MatchQuality.City为1,但返回的城市错误(“ NovaIguaçu”而不是“ Campos dos Goytacazes”)。

“ Centro”地区似乎是从另一个城市带走的,但是matchQuality表示该城市正确匹配了(!)

尝试不带地区名称的相同请求将在地址中返回正确的城市:

请求:

https://geocoder.api.here.com/6.2/geocode.json?app_id=...&app_code=...&searchtext=Campos%20dos%20Goytacazes,RJ,Brazil

响应:

{
  _type: "SearchResultsViewType",
  ViewId: 0,
  Result: [
    {
      Relevance: 1,
      MatchLevel: "city",
      MatchQuality: {
         Country: 1,
         State: 1,
         City: 1
     },
     Location: {
                 ...
                 Address: {
                             Label: "Campos dos Goytacazes, RJ, Brasil",
                             Country: "BRA",
                             State: "RJ",
                             City: "Campos dos Goytacazes",
                             PostalCode: "28010-550",
                             ...
                          }

谢谢!

2 个答案:

答案 0 :(得分:0)

matchLevel明确将第一个请求声明为“区域”,这意味着它与“ Centro”作为一个区域完全匹配,并获取该区域的详细信息(其所属的城市,国家等)。

searchtext请求属性是一种自由格式的文本,响应中的matchquality不提供其中提供的值的质量。匹配质量对于国家,州和城市返回1,因为它们与中心区完全匹配。

如果您需要匹配质量来准确说明与您提供的城市的相关性,则应在请求中明确提及城市属性。

有关可能的请求属性的完整列表,请参见https://developer.here.com/documentation/geocoder/topics/resource-geocode.html

希望这会有所帮助!

  

城市

     

xs:string需要特定于国家/地区的映射。例子

USA: City
Germany: Gemeinde
     

国家

     

xs:string,完全匹配使用以下命令指定国家或国家列表   国家/地区代码(3个字节,ISO 3166-1-alpha-3)或国家/地区名称。   这是一个严格的过滤器。结果仅限于指定的   一个或多个国家。

     

注意:为避免歧义,我们建议使用   3个字母的ISO代码,但不带拼写的国家名称。用   指出拼写错误的风险较高,而且并非所有语言   支持所有国家/地区的翻译。

答案 1 :(得分:0)

谢谢,但是使用支持人员建议的参数,我仍然得到了意外的结果。

我了解,如果存在按地区名称而不是城市进行的匹配,则matchQuality会通过不返回“城市:1”匹配来反映该匹配,但我真正担心的是,该匹配区实际上存在于“那个城市,您在反向地理编码请求中将其返回,但在我搜索时无法识别。

例如,此请求:

http://reverse.geocoder.api.here.com/6.2/reversegeocode.json?app_id=...&app_code=...&mode=retrieveAddresses&prox=-21.759600,-41.324216

返回此响应(请注意城市:“ Campos dos Goytacazes”和地区:“ Centro”部分)

MatchQuality: {
    Country: 1,
    State: 1,
    City: 1,
    District: 1,
    Street: [
        1
    ],
    HouseNumber: 1,
    PostalCode: 1
},
...
Address: {
    Label: "Rua Tenente Coronel Cardoso, 460, Centro, Campos dos Goytacazes - RJ, 28010-802, Brasil",
    Country: "BRA",
    State: "RJ",
    City: "Campos dos Goytacazes",
    District: "Centro",
    Street: "Rua Tenente Coronel Cardoso",
    HouseNumber: "460",
    PostalCode: "28010-802",
    ...
}

但是如果我尝试转发地理编码请求:

https://geocoder.api.here.com/6.2/geocode.json?app_id=...&app_code=...&district=Centro&city=Campos%20dos%20Goytacazes&state=RJ&country=BRA

响应反映出没有匹配的城市,并从另一个城市返回了“ Centro”地区...

MatchQuality: {
    Country: 1,
    State: 1,
    District: 1
},
...
Address: {
    Label: "Centro, Nova Iguaçu, RJ, Brasil",
    Country: "BRA",
    State: "RJ",
    City: "Nova Iguaçu",
    District: "Centro",
    PostalCode: "26052-060"
    ...
}

但是,如果我使用反向地理编码响应中收到的完整地址进行搜索,它将正确检测到城市和地区!

https://geocoder.api.here.com/6.2/geocode.json?app_id=...&app_code=...&searchtext=Rua%20Tenente%20Coronel%20Cardoso,%20460,%20Centro,%20Campos%20dos%20Goytacazes%20-%20RJ,%2028010-802,%20Brasil
MatchQuality: {
    Country: 1,
    State: 1,
    City: 1,
    District: 1,
    Street: [
        1
    ],
    HouseNumber: 1,
    PostalCode: 1
},
...
Address: {
    Label: "Rua Tenente Coronel Cardoso, 460, Centro, Campos dos Goytacazes - RJ, 28010-802, Brasil",
    Country: "BRA",
    State: "RJ",
    City: "Campos dos Goytacazes",
    District: "Centro",
    Street: "Rua Tenente Coronel Cardoso",
    HouseNumber: "460",
    PostalCode: "28010-802",
    ...

我认为邮政编码和街道名称有助于消除歧义,但是如果我使用有效的城市名称传递“ city”参数,就不会有任何歧义,对吧?

谢谢!