【问题标题】:Here Maps Geocoder Javascript API - Postcode problemsHere Maps Geocoder Javascript API - 邮政编码问题
【发布时间】:2015-04-10 15:51:46
【问题描述】:

我正在创建一个脚本,以使用 Here Maps Geocoder Javascript API 查找从英国邮政编码开始的位置。该代码似乎工作正常,但在邮政编码 BT45 7PX 上我收到了错误

TypeError:result.Response.View[0] 未定义

我使用的代码如下:

var platform = 0;
var postcode = 0; /*random value*/

$(document).ready(function(){
    platform = new H.service.Platform({
        app_id: '(myapp_id)',
        app_code: '(myapp_code)',
        useCIT: true
        });

    document.getElementById('searchInput').value.toUpperCase();
    postcode = contentRead.replace(/\s+/g, '');
    geocode(postcode);
})

function geocode(postcode){
    var geocoder = platform.getGeocodingService(),
    geocodingParameters = {
        searchText: postcode
    };

    geocoder.geocode(
        geocodingParameters,
        onSuccess,
        onError
        );
}


function onSuccess(result){
    var location = result.Response.View[0].Result[0];
    var city = location.Location.Address.City;
    var lat = location.Location.DisplayPosition.Latitude;
    var lng = location.Location.DisplayPosition.Longitude;
    console.log('location: ');
    console.log(location);
    console.log('latitude: '+lat);
    console.log('longitude: '+lng);
    $('#rightResult').append('<div>The postcode searched points to... <strong>'+city+'</strong></div>');
}


function onError(error){
    alert('Ooops, something went wrong, please try again!');
}

任何关于为什么代码不能与 BT45 7PX 一起正常工作的线索?

尝试使用基本的 JSON 调用 (http://geocoder.api.here.com/6.2/geocode.json?app_id=(myapp_id)&app_code=(myuapp_code)&searchtext=BT45%207PX) 我发现如果我在两者之间留出空格,调用就可以工作,但正如我所做的那样,删除它就不再适用了。其他邮政编码不会发生这种情况。

【问题讨论】:

  • 根据Royal Mail website,在输出代码和输入代码之间应该始终有一个空格。第二部分 - 即 in 代码应始终采用 space-number-alpha-alpha 的形式。在 this site 上找到的 JavaScript 验证并添加了一个空格。 in 代码的基本正则表达式是 ([0-9]{1}[ABDEFGHJLNPQRSTUWXYZ]{2})$
  • 谢谢,正如我对 Jithin 所说的那样,我解决了始终传递带有空格的邮政编码的问题。但是,因为您链接了该正则表达式,所以我使用的是另一个:stackoverflow.com/a/164994/3717575

标签: javascript geocode here-api


【解决方案1】:

如果您发布 API 响应,我们将能够为您提供更好的帮助,但根据您的编辑,删除空格似乎只会导致 API 不返回结果。因此,您试图访问一个根本不存在的数组索引。在您的代码中的某个时刻,您可能想要处理这种情况,所以现在是这样做的好时机。发布响应(没有有效结果),我将帮助您确定使用什么来确定是否找到了正确的结果。

【讨论】:

    【解决方案2】:

    在处理响应时进行空检查总是好的,如下所示应该可以工作

    if(response && response.Response && response.Response.View[0] && response.Response.View[0].Result[0]) {
        // Process Result
    }
    

    关于带空格的邮政编码,这似乎是英国邮政编码的问题。

    【讨论】:

    • 它似乎特定于 贝尔法斯特 BTnn 邮政编码,伯明翰 像 B338TH 一样工作正常。根据Royal Mail website,应该在输出代码和输入代码之间总是有一个空格。
    • 空检查在我的“待办事项”列表中,但我没想到会出现这样的问题。到现在为止,为了继续我的项目,我添加了一个控件以始终传递带有空格的邮政编码。但是我仍然不明白为什么它应该只使用一些邮政编码而不是所有邮政编码来生成该响应......
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2018-01-03
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2011-07-31
    相关资源
    最近更新 更多