检查经纬度列表是否在范围内

问题描述

我遇到了问题

我想问一下,最有效的方法是从经纬度列表中检查纬度和经度坐标是否在一个范围内(例如100米)。

例如,我有以下坐标列表:

[[48.34483,51.16.24517],[48.484,16.2585],[48.361,51.87739419],[6.38477205,51.87745015],[48.3645,51.16.73167],[6.38391099,51.87755068],[48.3575,16.725],[6.38380232,51.87720004],[6.38376297,51.87708017],[6.38375183,51.87704018],[6.38373055,51.8769829]]

我想以某种方式在特定范围内(例如100m)的所有点, 进行分组。

有什么方法可以指示上述列表中的内容吗?

[48.484,51.87739419][48.3575,16.725]

的半径为100m(这些点之间的距离小于100m),应该摸索

解决方法

对于GIS专业人员来说,听起来像是一个很大的问题;您也许可以在gis.stackexchange.com上发布。您是否正在使用已经可以访问API的映射技术?您要查找的功能称为几何运算。我将从研究可用于计算点之间距离的API中提供的几何函数开始。您可以找到所有点的几何中心,然后请求几何API围绕该点创建缓冲区。接下来,查询每个点是否在该缓冲区内。

找到了一条帖子,可能有助于在此处找到要点的中心: How do I find the center of a number of geographic points?

还在stackexchange上发现了一篇与您的帖子非常相似的帖子,只有该帖子引用了ArcGIS和“点距离(分析)”工具: https://gis.stackexchange.com/q/91571/81346

,

理想情况下,为此您将使用地理空间数据库,以避免在处理越来越多的点时出现性能问题。 MySQL,Postgres等都支持地理空间功能。

但是,当您用javascript标记问题时,我将发布一个JS解决方案。有一个名为haversine的npm程序包-使用它,您应该能够循环通过每个点并返回100m以内的其他点。像这样:

// bring in haversine from npm
var haversine = require("haversine");

// define the full list of points
var data = [
    [48.34483,51.1624517],[48.484,16.2585],[48.361,51.87739419],[6.38477205,51.87745015],[48.3645,51.1673167],[6.38391099,51.87755068],[48.3575,16.725],[6.38380232,51.87720004],[6.38376297,51.87708017],[6.38375183,51.87704018],[6.38373055,51.8769829]
];

var points = data.map(point => new Object({latitude: point[0],longitude: point[1]}));

// var to store results in
var results = [];

// loop through the points
points.forEach((pair) => {
    var nearby = points;
    // filter the full list to those within 100m of pair
    nearby.filter(point => haversine(pair,point,{unit: 'mile'}) <= 100);
    results.push({
        'point': pair,'nearby': nearby
    });
});

console.log(results);

注意:我更正了您列表中的某些点,这些点有两位小数,因此无效