3

是否有 JavaScript 库可以帮助解析用户提供的各种格式的坐标?

我有一个带有搜索框的地图站点,可用于搜索地名,但通过查看统计数据,我看到很多人试图直接使用各种格式的坐标,就像他们在谷歌地图上所做的那样.

我看到的纬度和经度的典型变化是:

-43 02 42.845 S 172 38 33.790 E
n 19°49'2.30e 41°51'29.20
41°46'57.90"S
172° 1'20.39"E 43 02 42.845 S
42.897S 172.720E
42.31.303 172.23.379
19.817306°, 41.858111°

这是很多变化,这只是一个示例。然后有用户尝试基于 NZTM 和 NZMG 的各种新西兰格式。

理想情况下,我想找到一个库,有人可能从一些基本的纬度和经度开始,然后扩展功能以支持我看到的其他格式。

有人知道那里已经有什么吗?

4

3 回答 3

1

实际上,我刚刚发布了我的名为 Magellan 的 JavaScript 库,它可以像您上面列出的那样处理纬度/经度坐标的格式化和验证。检查一下,看看它是否是你要找的。

链接在这里:https ://dbarbalato.github.io/magellan/

作为一个快速说明,它不会处理您上面列出的每种格式,但如果有足够的兴趣,我愿意扩展功能。

于 2013-03-10T19:54:51.663 回答
1

要从原始文本输入解析数字坐标otto-dev提供了npm 包坐标解析器对于WGS84纬度-经度对及其分钟和十进制表示而言,它感觉很强大。

const CoordinateParser = require('coordinate-parser')
const text = `60 40' 31.35" N, 23 50' 55.75" E`
const pos = new CoordinateParser(text)
const lat = pos.getLatitude() // 60.675374
const lng = pos.getLongitude() // 23.848819

虽然适用于 WGS84,但坐标解析器不处理UTM坐标,例如NZTMETRS89 TM35FINN 6730758, E 327874上的坐标。解析器将大数字视为毫秒或密集格式的 DDMMSS.xxx 而不是米,从而产生无效结果。

对于 UTM 坐标,有utm-coordinate-parser。它识别常见的东-北对,例如6730758 N 327874 Exy 对x:327874 y:6730758。免责声明:我是包作者。

const utmp = require('utm-coordinate-parser')
const text = 'N 6730758; W -327874'
const pos = utmp.parse(text)
const x = pos.x // 327874
const y = pos.y // 6730758
于 2021-10-13T22:02:05.447 回答
-2

一般形式应为:

var m;
if( m = input.match(/format regex here/)) { /* do stuff with m */ }
else if( m = input.match(/another format/)) { /* do stuff with m */ }
...
else {throw new Error("Format not recognised!");}

构建所需的正则表达式由您决定,但它们应该太难了,因为它们是相对简单的格式。

于 2013-03-08T02:28:11.967 回答