用于用户提供坐标的通用JavaScript解析器

Generic JavaScript parser for user supplied coordinates

本文关键字:JavaScript 用户 坐标 用于      更新时间:2023-09-26

是否有一个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的新西兰格式。

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

有谁知道外面有什么吗?

要从原始文本输入中解析数字坐标,有由otto-dev创建的npm package coordinate-parser。对于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坐标,例如NZTM或ETRS89 TM35FIN上的坐标,例如N 6730758, E 327874。解析器将大数视为毫秒或密集格式化的DDMMSS。XXX而不是米,从而产生无效的结果。

对于UTM坐标,有UTM -coordinate-parser。它可以识别常见的东西对,如6730758 N 327874 E和x-y对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

我实际上刚刚发布了我的JavaScript库Magellan,它处理纬度/经度坐标的格式和验证,就像上面列出的那样。看看它是不是你想要的。

链接:https://dbarbalato.github.io/magellan/

作为一个简短的说明,它不会处理你上面列出的所有格式,但如果有足够的兴趣,我愿意扩展功能。

一般格式为:

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!");}

这将取决于您构建您需要的正则表达式,但它们应该太难了,因为它们是相对简单的格式