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

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

谢谢。

【问题讨论】:

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

标签: javascript node.js geolocation geospatial


【解决方案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';
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 1970-01-01
      • 2014-06-01
      • 2011-05-28
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多