首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将1 km²区域内相同位置的人员分组

将1 km²区域内相同位置的人员分组
EN

Stack Overflow用户
提问于 2020-12-01 19:13:14
回答 1查看 50关注 0票数 0

有没有办法将1 km²范围内相同位置的人聚集在一起?我正在获取人们的经度和经度,我想根据它将它们分组在一个数字中,以便识别共享相同位置的1 km²区域的人群。

我是node.js的新手。

感谢所有人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 21:28:26

我认为你最好的方法是使用标准化的网格系统,周围有很多系统,例如MGRS就是北约使用的系统,可以为我们提供不同级别的准确性。

我们可以使用诸如mgrs之类的模块来获取用户经纬度的网格参考,然后我们可以使用例如lodash的groupBy对这些用户进行分组。人们也可以使用Array.reduce来实现这个目的,但是_.groupBy对于解决这类问题非常方便。

代码语言:javascript
复制
const mgrs = require("mgrs");
const _ = require("lodash");

// Some sample users living within a few kms 
let users = [
    { first: 'Andreias', last: 'Aragão', lat: 51.51697, lon: -0.11894 },
    { first: 'Babür', last: 'Erberk', lat: 51.50041, lon: -0.12823 },
    { first: 'William', last: 'Jørgensen', lat: 51.49879, lon: -0.13041 },
    { first: 'Clyde', last: 'Crawford', lat: 51.50928, lon: -0.1226 },
    { first: 'Silvijn', last: 'Werts', lat: 51.49843, lon: -0.12066 },
    { first: 'Jokubas', last: 'Laastad', lat: 51.50517, lon: -0.12312 },
    { first: 'Rebecca', last: 'Lawson', lat: 51.5018, lon: -0.12786 },
    { first: 'Oscar', last: 'Opland', lat: 51.50123, lon: -0.13245 },
    { first: 'Cláudio', last: 'Costa', lat: 51.50354, lon: -0.13123 },
    { first: 'Juan', last: 'Ruiz', lat: 51.50796, lon: -0.12884 }
]

// Add user MGRS grid square
users = users.map(user => {
    // Get MGRS grid location accurate to ~1km
    user.mgrs = mgrs.forward([user.lon, user.lat], 2);
    return user;
})

const usersByLocation = _.groupBy(users, "mgrs");
console.log(usersByLocation);

这将为我们提供如下所示的输出:

代码语言:javascript
复制
{
    '30UXC9911': [
        {
          first: 'Andreias',
          last: 'Aragão',
          lat: 51.51697,
          lon: -0.11894,
          mgrs: '30UXC9911'
        }
      ],
      '30UXC9909': [
        {
          first: 'Babür',
          last: 'Erberk',
          lat: 51.50041,
          lon: -0.12823,
          mgrs: '30UXC9909'
        },
        {
          first: 'William',
          last: 'Jørgensen',
          lat: 51.49879,
          lon: -0.13041,
          mgrs: '30UXC9909'
        },
        {
          first: 'Silvijn',
          last: 'Werts',
          lat: 51.49843,
          lon: -0.12066,
          mgrs: '30UXC9909'
        },
        {
          first: 'Jokubas',
          last: 'Laastad',
          lat: 51.50517,
          lon: -0.12312,
          mgrs: '30UXC9909'
        },
        {
          first: 'Rebecca',
          last: 'Lawson',
          lat: 51.5018,
          lon: -0.12786,
          mgrs: '30UXC9909'
        },
        {
          first: 'Oscar',
          last: 'Opland',
          lat: 51.50123,
          lon: -0.13245,
          mgrs: '30UXC9909'
        },
        {
          first: 'Cláudio',
          last: 'Costa',
          lat: 51.50354,
          lon: -0.13123,
          mgrs: '30UXC9909'
        }
      ],
      '30UXC9910': [
        {
          first: 'Clyde',
          last: 'Crawford',
          lat: 51.50928,
          lon: -0.1226,
          mgrs: '30UXC9910'
        },
        {
          first: 'Juan',
          last: 'Ruiz',
          lat: 51.50796,
          lon: -0.12884,
          mgrs: '30UXC9910'
        }
      ]
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65089440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档