gpt4 book ai didi

node.js - node.js 中的地理编码工具

转载 作者:行者123 更新时间:2023-12-02 01:58:10 25 4
gpt4 key购买 nike

我正在寻找用于处理地理空间数据的 node.js 库。我在数据库中有大量地理标记数据。

所需的功能包括:

  1. 地理编码和反向地理编码
  2. 查找附近的元素
  3. 在地质范围内查找项目

相当于RoR中的GeoCoder gem的 Node 。

最佳答案

在尝试自己回答时发现了这个问题,我会更新它。

geocoder上面推荐的库最后更新于 2014 年,似乎没有处理 Promises。 node-geocoder正在积极维护,如果您使用 Babel/ES7,它基于 promise 的 api 可以让您做这样的事情:

const NodeGeocoder = require('node-geocoder');
let geocoder = NodeGeocoder()
let assert = require('assert');

describe('geocoder#geocode()', () => {

it('geocodes things', async () => {
let result = await geocoder.geocode("Ottawa, Canada")
assert.equal(45.4215296, result[0].latitude)
})

})

我确实发现 node-geocoder 给出了它从谷歌/任何人那里得到的结果的一个子集,而 Ruby 的地理编码器项目似乎给出了整个响应。

//result returned from geocoder.geocode:
[ { formattedAddress: 'Ottawa, ON, Canada',
latitude: 45.4215296,
longitude: -75.69719309999999,
extra:
{ googlePlaceId: 'ChIJrxNRX7IFzkwR7RXdMeFRaoo',
confidence: 0.5,
premise: null,
subpremise: null,
neighborhood: null,
establishment: null },
administrativeLevels:
{ level2long: 'Ottawa Division',
level2short: 'Ottawa Division',
level1long: 'Ontario',
level1short: 'ON' },
city: 'Ottawa',
country: 'Canada',
countryCode: 'CA',
provider: 'google' } ]

根据其纬度/经度查找数据将是数据库处理的事情。我一直在使用 ArangoDB它们有一个函数 WITHIN_RECTANGLE,它是对 map.getBounds() 的完美补充,你有 Leaflet/Mapbox-gl-js .这是一个例子:

export async function locationsWithinBounds(swLat, swLng, neLat, neLng) {
let query = aqlQuery`
RETURN WITHIN_RECTANGLE(vertices, ${swLat}, ${swLng}, ${neLat}, ${neLng})
`
let results = await db.query(query)
let allResults = await results.all()
return allResults[0]
}

如果你探索他们的其他geo functions您会发现 NEARIS_IN_POLYGON 之类的东西。如果您需要在浏览器中使用地理功能,您应该查看 Turf.js .

关于node.js - node.js 中的地理编码工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com