在STRtree中查找最近的位置
本文关键字:位置 最近 查找 STRtree | 更新日期: 2023-09-27 17:58:43
我正在使用nettopologysuite(JTS拓扑套件的一个端口)。我使用SRTtree实现来存储时区列表和相应的坐标(基于此建议)。我从地名中提取了城市列表,提取了城市的时区和坐标,并将它们存储在STRtree中。我遇到的问题是,这个实现没有提供"最近"函数。为了进行查询,我必须提供一个起点和周长。目前我在循环中把周长增加.1,直到我找到一些结果,然后我取第一个。有更好的方法吗?
我在做什么:
public static SRTtree Cities { get; set; }
public static string GetTimezone(double lat, double lng)
{
var envelope = new Envelope(new Coordinate(lat, lng));
IList results;
do
{
envelope.ExpandBy(.1);
results = Cities.Query(envelope);
} while (results.Count == 0);
return results[0] as string;
}
JTS 1.13提供了STRTree.nearestNeighbour方法来执行此操作。我不知道它是否已经移植到NTS,但如果没有,也许你可以请求它。
如果您唯一需要运行的查询是"获取最近的位置",那么使用R-树可能不是最佳选择。我可以想出两个替代方案:
- 使用Harvesine公式计算到每个位置的距离,并找到最小距离。如果你没有太多的坐标,这可能是最佳的解决方案。有关更多详细信息,请参阅"邻近搜索"
- 使用允许搜索最近坐标的数据结构,例如KD Tree。请注意,NetTopologySuite中的KD Tree实现不适合您的用例