Google Maps地理编码API - 处理来自用户的lat / lng输入

时间:2012-02-14 01:01:15

标签: google-maps google-maps-api-3 geocoding

我正在使用版本3 API,我有一个文本输入,用户输入一个搜索字符串,用于通过API进行地理编码。地图会更新,并在结果匹配处放置标记。除少数情况外,这一切都很好。这是代码:

geocoder.geocode({
    'address': address,
    region: 'AU'
}, function(results, status) {
    // do stuff with results
}

问题在于用户输入lat / lng对,例如22°53'21"S, 118°28'36"E。当坐标落入乡村区域时,返回的匹配不是输入坐标的精确表示,而是来自Google的匹配位置的中心。例如。结果是-22.4951839, 118.73455850000005。即,标记从用户输入的位置移开。

那么,在用户输入lat / lng的情况下,如何防止这种位置匹配/居中?在这些情况下,我希望标记被放置在lat / lng中,用于解析的坐标,而不是匹配的位置的中心(但我想继续使用API​​,因为它处理/解析所有各种lat / lng格式和我还存储地点/地址信息。)

3 个答案:

答案 0 :(得分:1)

你可以在输入框上进行模式匹配,测试数字加上标点符号和°。如果匹配,则转换为十进制纬度/经度并创建标记,否则通过地理编码器运行。

答案 1 :(得分:1)

我遇到了类似的问题。如果您决定编写自己的解析代码,那么如果您拥有的唯一字母字符是NSEWnsew,则用户可能会输入坐标。

然后,您可以将所有非数字更改为空格并分析字符串: 6个数字表示你有度,分,秒 4个数字表示您有度,小数分钟 2个数字表示您有十进制度

唯一的另一个问题是处理字符:NSEW + -

答案 2 :(得分:0)

今天我不得不重新审视这个问题,我找到了一个JS库,它在解析坐标(十进制和DMS)的用户输入方面做得相当不错:

http://dbarbalato.github.io/magellan/

只会分别处理latlng - 因此我必须在输入上执行split(',')