问题标签 [geodesic-sphere]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
polygon - 在以点为界的球体上查找多边形区域
我正在尝试在球体上找到多边形的面积。我有方位角和仰角(纬度/经度)。有没有一种算法可以做到这一点。如果它在平面上,我可以使用凸包进行近似,但这些点占据了球体的很大一部分。
sql - 如何有效计算多条经/纬度之间的最短距离(Oracle SQL)?
正如标题所说,我正在尝试计算许多经度和纬度点集之间的最短距离。我有一套房子和一套商店。对于每个家庭,我试图确定在 20 英里半径范围内哪个商店最近。
我编写的 SQL 可以正常工作,但是在为执行添加更多家时它不能很好地扩展。我正在尝试找到一种有效地进行此计算的方法。即使运行需要几个小时,我也会很高兴,因为我可以每月运行一次。但是,就目前而言,如果我针对数据库中的全部房屋进行尝试,此查询将运行数天。
到目前为止我尝试过的
- 使用这个问题的指导,我利用 Oracle 的 SDO_GEOM 包来执行距离计算。
- 在效率方面,我按照本指南中的建议在每个 long/lat 列上设置索引,并在 where 子句中设置代码以限制为 20 英里半径,以尝试立即过滤掉无效的 long/lat蝙蝠,从而减少了多余的计算。
- 我可以为查询添加并行性,但我觉得这是一种减少运行时间的蛮力方法。虽然我认为补充并行性是可行的,但我想找到一个解决方案,让查询在我投入处理器之前高效运行。
数据设置
我正在开发一个具有两个数据集的 Oracle 19c 数据库:
1. HOME_ID 列表及其关联的经度和纬度
该列表的大小可能有数十万条记录。
为每个 long/lat 列设置一个索引。
2. STORE_ID 列表及其关联的经度和纬度
这个列表的大小大约是一千条记录。
为每个 long/lat 列设置一个索引。
询问
如果我为少量记录运行此查询,它会很好地工作。不幸的是,当我对相当一部分工作数据进行测试时,它需要几个小时才能运行。我可以使用哪些修改或技巧来显着加快此查询的运行速度?
笔记
当前状态下的查询将返回与 20 英里半径内的 HOME_ID 关联的所有 STORE_ID。下一步是按每个 HOME_ID 的距离对输出进行排序,并选择到商店距离最短的记录。作为参考,该查询如下所示: