1

有没有办法在索引多边形的 X 距离内搜索多边形?

我已经在 SOLR 4.2.1 索引中使用字段类型索引了多边形和多多边形

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
           spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
           distErrPct="0.001"
           maxDistErr="0.000009"
           units="degrees"
        />

而且我已经可以进行简单的相交查询,例如

fq=geo_location:"Intersects(POLYGON((-0.141964 51.515580, -0.130119 51.516648, -0.129261 51.515900)))"

所以我需要:
在充满 POLYGONS 的索引中搜索 POLYGON+distance 并在充满 POLYGONS 的索引中
搜索 POINT+distance(A circle)

4

1 回答 1

3

已经支持点 + 距离(一个圆圈): http
://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4 例如:geo_location:"Intersects(Circle(4.56,1.23 d=0.0710))"

多边形 + 距离通过所述距离缓冲多边形,然后进行标准相交。JTS 有一个非常容易使用的 Geometry.buffer() 操作——它只是一个方法调用。我希望有一天能以某种方式在 Spatial4j(今年可能)中公开这一点,然后更高级别——Solr 可以访问它。同时,您可以在客户端代码中使用 JTS 来缓冲多边形,然后将该多边形提交给 Solr 进行搜索。

请记住,JTS 在 2D 空间中工作;它对测地线一无所知(即它不考虑世界是一个球体的事实)。Spatial4j 包装 JTS 几何以添加日期线换行支持,仅此而已。你可能会做什么如果您的所有数据都方便地位于世界的某个地方,那么想要做的是考虑使用地图投影。这可以大大减少一些倾斜效应。如果您不这样做,则会发生倾斜效应的一个示例,即从赤道到极点一半的缓冲多边形实际上将被缓冲的东西向缓冲量是其被缓冲的南北向量的一半。即使您没有将点存储在 Solr 中的某个投影中,您的客户端也可以在本地(在多边形的中心)投影您的查询​​多边形,然后对其进行缓冲,然后将其取消投影回 lat-lon 空间。如果多边形上有很多点,这将大大减少倾斜。如果您的查询多边形没有很多顶点,您可以人为地添加它们。我在这一段中谈论的所有东西都是我希望有一天能添加的东西

于 2013-05-14T14:56:31.207 回答