我有一个欧洲阿尔卑斯山山顶的数据集,我想在地图上可视化它。为了不使用户界面过度拥挤,我查询地图当前视图中的所有山峰,获取最突出的山峰(通过按海拔对它们进行排序)并获取一定的数量。
await prisma.mountain.findMany({
where: {
lat: { gt: lat_min, lt: lat_max },
lng: { gt: lng_min, lt: lng_max },
},
orderBy: {
elevation: "desc",
},
take: 20,
});
只要地图相当放大,效果就很好,但当然,当你缩小地图时,结果会很快开始聚集在具有更高山脉的特定区域。
如何编写一个查询,将结果更均匀地分布在查询区域?
我尝试通过在用户缩小时将查询的边界更多地移至中心来使结果更加集中。但是,当缩小到很远的时候,这并没有改善结果。
我最终将该区域划分为一个网格,然后查询每个单元格中的所有山峰。这导致了分布相当均匀。
为了防止移动地图时山顶消失,我还可以将整个地球划分为单元格并加载与地图当前边界重叠的所有单元格。