NodeJS 按纬度/经度查找国家

Posted

技术标签:

【中文标题】NodeJS 按纬度/经度查找国家【英文标题】:NodeJS find country by Lat/Lon 【发布时间】:2014-06-20 19:29:22 【问题描述】:

我有一个 nodejs 服务器和多个数据库,每个国家都有一个。我希望能够通过用户作为参数发送的坐标(纬度/经度)选择正确的国家。 (例如我的服务器/查询/纬度/经度) 我找不到执行此操作的 nodejs 包。 我确实找到了根据 IP 地址按国家/地区过滤的包,但这里不是这种情况。 谢谢。

【问题讨论】:

mongodb 有一个包含数千个地理位置的示例数据库,并具有围栏和距离等地理特征。现在我想到的可能只是美国城市,但您至少可以将代码调整为更全面的数据集。 谢谢,但我正在寻找不涉及调用数据库的解决方案(此解决方案中的 mongo)。 【参考方案1】:

这是一个包:https://github.com/vkurchatkin/which-country

API 非常简单:

var wc = require('which-country');
console.log(wc([-100, 40])); // prints "USA"

它在底层使用 R-tree,所以它比线性扫描快得多(我想是 O(log n))。

【讨论】:

【参考方案2】:

这是我所做的: 我下载了 geofabrik 为每个国家/地区提供的 kml 文件(例如 download.geofabrik.de/africa/cameroon.kml)。 最后,我将文件加载到 nodejs 中并使用了一个名为“point-in-polygon”(https://www.npmjs.org/package/point-in-polygon)的出色包。 编码:

var inside = require('point-in-polygon')
var fs = require('fs');
var file = __dirname + '/coutries.json';
var countries_json = JSON.parse(fs.readFileSync(file, 'utf8'));
var get_country = function(lat, lon)
        var c_list = countries_json['countries'];
        for(var num in c_list)
            var country = c_list[num];
            if (inside([lat, lon],country['coordinates']))
                return country['name'];
            
        
    return 'not_found';

【讨论】:

以上是关于NodeJS 按纬度/经度查找国家的主要内容,如果未能解决你的问题,请参考以下文章

按地理位置确定国家(纬度和经度)

如何快速识别点(纬度和经度)是不是在一个国家/地区内?

性能 - 按纬度/经度查找特定距离内的所有点

markdown 使用Google Maps API按地址查找经度和纬度

给定每个区域的边界和纬度/经度,以编程方式查找州/县

通过给定的经度和纬度查找在数据库中注册的位置 - Laravel