Javascript 将同一地点1 km和#xB2的人群分组;地区
是否有办法将同一地点1 km²区域的人员分组。我得到了人们的经度和广度,我想根据这些经度和广度对他们进行分组,以识别共享1 km²区域相同位置的人群 我是node.js的新手Javascript 将同一地点1 km和#xB2的人群分组;地区,javascript,node.js,Javascript,Node.js,是否有办法将同一地点1 km²区域的人员分组。我得到了人们的经度和广度,我想根据这些经度和广度对他们进行分组,以识别共享1 km²区域相同位置的人群 我是node.js的新手 谢谢大家我认为您最好的方法是使用标准化的网格系统,周围有很多,例如北约使用的网格系统,可以给我们提供不同程度的准确性 我们可以使用一个模块,例如为用户的lat/long获取网格参考,然后我们可以使用lodash等对这些用户进行分组。我们也可以使用Array.reduce来实现这一目的,但是z.groupBy对于这类问题非常
谢谢大家我认为您最好的方法是使用标准化的网格系统,周围有很多,例如北约使用的网格系统,可以给我们提供不同程度的准确性 我们可以使用一个模块,例如为用户的lat/long获取网格参考,然后我们可以使用lodash等对这些用户进行分组。我们也可以使用Array.reduce来实现这一目的,但是z.groupBy对于这类问题非常方便
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);
这将为我们提供如下输出:
{
'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'
}
]
}
我认为你最好的方法是使用一个标准化的网格系统,周围有很多,例如北约使用的网格系统,可以给我们不同程度的准确性 我们可以使用一个模块,例如为用户的lat/long获取网格参考,然后我们可以使用lodash等对这些用户进行分组。我们也可以使用Array.reduce来实现这一目的,但是z.groupBy对于这类问题非常方便
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);
这将为我们提供如下输出:
{
'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'
}
]
}
我认为这个问题的回答严重不足。如果您有一组点,可以通过多种方式将它们分组到区域中。事实上,这些组可以有多种形状,并满足1km2面积约束。如果这些形状是以某种方式定义的,您可以测试每个人它所属的区域,并有一个集合地图(甚至一个数组)。但是,如上所述,这个问题太开放了。你应该添加信息,并说明你尝试过什么,以及这种方法的问题是什么。我认为这个问题的回答严重不足。如果您有一组点,可以通过多种方式将它们分组到区域中。事实上,这些组可以有多种形状,并满足1km2面积约束。如果这些形状是以某种方式定义的,您可以测试每个人它所属的区域,并有一个集合地图(甚至一个数组)。但是,如上所述,这个问题太开放了。您应该添加信息,并指定您尝试过什么以及该方法存在的问题。谢谢,这真的很有帮助!谢谢,能帮上忙真的很有帮助!