1

我正在尝试学习 lucene .net 空间功能。

我想找出一个点是否存在于多面体中。

从我对谷歌的研究中,我了解到我需要使用网络拓扑套件来描述多多边形。

但我找不到最新版本的 Lucene.Net.Contrib.Spatial.NTS。

任何建议(我正在使用.net core)

4

2 回答 2

1

很多这种混乱都集中在几件事上:

新的 Lucene 设计

Lucene 4.x+ 的设计与之前的版本完全不同。Lucene.Net.Contrib包装不再是该设计的一部分。相反,现在有针对不同功能的专用模块。在这种情况下,您正在寻找的是Lucene.Net.Spatial程序集。

Spatial4n 不再重复类型

在 Spatial4n 0.3.0 中,Spatial4n.Core.NTS包含所有Spatial4n.Core. 这意味着您不能同时引用这两个库,因为它们的类型名称有冲突。它还需要Lucene.Net.Contrib.Spatial复制类型(在 中Lucene.Net.Contrib.Spatial.NTS)才能访问 NetTopologySuite 的功能。

从 Spatial4n 0.4.1 开始,Spatial4n.Core类型不包含在Spatial4n.Core.NTS中。而是Spatial4n.Core.NTS引用Spatial4n.Core.

这意味着在 Lucene.NET 4.8 中不需要有一个单独的Lucene.Net.Spatial.NTS库来引用Spatial4n.Core.NTS(及其重复的类型系统Spatial4n.Core)。但是,您可以通过直接引用将 NTS 功能添加到您的项目中Spatial4n.Core.NTS

<ItemGroup>
  <PackageReference Include="Spatial4n.Core" Version="0.4.1" />
  <PackageReference Include="Spatial4n.Core.NTS" Version="0.4.1" />
</ItemGroup>

例子

正如 Ron C 正确指出的那样,Lucene.Net 4.8.0 代码库中有一些 NetTopologySuite (NTS) 功能的基本测试。但如上所述,您需要参考Spatial4n.Core.NTS才能访问 NTS 的扩展。

还有一些可以分析的使用 NetTopologySuite 的 Spatial4n 附加测试。

如果您需要有关该功能的更多具体信息,我建议您使用术语“Lucene spatial JTS”、“Spatial4j”和“JavaTopologySuite”搜索 Java 示例。由于移植大部分是逐行完成的,因此 Java 示例应该很容易转换为 .NET。

于 2021-02-11T07:29:44.087 回答
0

我还不熟悉 Lucene.Net 的特定空间特性,但也许这个NtsPolygonTest会有所帮助,因为它似乎只是对您正在寻找的功能类型的测试。

我确实看到空间的大多数功能都存在于Lucene.Net.Spatial命名空间(及以下)中。

此外,看起来 Spatial 功能使用Spatial4n nuget 包,它是 Spacial4J java 库的一个端口。

于 2021-02-04T18:40:39.313 回答