【问题标题】:Google Maps geocode API - handling lat/lng input from userGoogle Maps geocode API - 处理来自用户的 lat/lng 输入
【发布时间】:2012-03-05 10:26:02
【问题描述】:

我使用的是版本 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 格式,我还存储位置/地址信息)。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我宁愿不 - 正如我在问题中所说的那样,lat/lng 有很多格式,我更愿意使用谷歌的解析。例如。如果输入 lat/lng 还指定了基准/坐标系。
    • 你真的别无选择。如果您使用地理编码器,它会以不同的方式解释它,如果您分别解析它们,那么您可以获得完全匹配。
    • 再次查看文档后,我认为您可能是对的。我希望有一些我没有想到的聪明的工作...... maps.google.com 以“正确”的方式做到了,但他们必须有特殊的代码,而这些代码不能通过 API 获得。
    • 找到了一个很好的 JS 十进制度实现 DMS 在这里:movable-type.co.uk/scripts/latlong.html#geo-src
    【解决方案2】:

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

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

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

    【讨论】:

    【解决方案3】:

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

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

    只会分别处理latlng - 所以我必须在输入上做一个split(',')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2015-10-11
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多