我有一个postgres 8.3酒店数据库,每个都有一个相关的经度和纬度存储为一个点,一个度假村存储为度假村id。我想找到度假村的中心点或平均点。
我可以使用简单的查询来完成此操作:
select
avg(lat_long[0]) as latitude,
avg(lat_long[1]) as longitude,
resort_id
from accomm
group by resort_id
但是,数据库中存在一些不良数据,例如可能有一家美国酒店在欧洲度假胜地录制。显然,做一个简单的平均值这个数据意味着结果是不准确的。
如何计算四分位数均值或类似方法来过滤掉这些不良数据?我目前在桌子上有大约30,000行。
答案 0 :(得分:1)
您在美国的所有酒店?在我看来,创建一个边界框并且忽略任何超出此范围的纬度/长度组合可能更容易。
这样做的最大缺点是它不够精确。基本上你可以排除欧洲的地点,但美国/加拿大边境的东西可能不会被排除在外......
答案 1 :(得分:0)
我建议将你的地图拆分成合理大小的正方形网格(比如谷歌地图中的谷歌,我想你需要7-9左右的缩放级别)并计算每个点的网格位置(你会得到简单的整数X和Y位置)。您可以获得每个方格中的点数并忽略1-2个方格。或者您可以使用大多数点的正方形中心作为测试中心,并计算到组中每个点的距离(这将在网格的XY坐标中非常快)忽略与其不在合理距离内的点。