node.js中的地理编码工具

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

所需的function包括:

  1. GeoCoding和反向地理编码
  2. find附近的项目
  3. 在地质界限内查找项目

就像一个相当于RoR中的GeoCoder gem的节点一样。

find这个问题,而试图自己回答,我会更新这个。

上面推荐的地理编码器库最近在2014年更新似乎并没有处理Promise。 node-geocoder正在积极维护,它是基于承诺的API允许你做这样的东西,如果你使用的是Babel / ES7:

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给出了它从Google /任何人得到的结果的一个子集,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' } ] 

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

 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] } 

如果你探索他们的其他地理function,你会发现像NEARIS_IN_POLYGON 。 如果你需要在浏览器中使用地理function,你应该看看Turf.js。

对于GeoCoding和反向部分,您可以使用https://github.com/wyattdanger/geocoder

 npm install geocoder 

对于查找部分,最好的方法是使用您的数据库系统,如果它支持地理操作。

如果没有,可能会将您的数据库复制到另一个(使用地理操作)? 如果你需要工作在千兆字节的数据,不是很容易加载内存中的一切,数据库存在的:)。