【问题标题】:Solr 4 Spatial Search polygon vs polygon search with distance parameterSolr 4 空间搜索多边形与带距离参数的多边形搜索
【发布时间】:2013-05-13 16:26:52
【问题描述】:

有没有一种方法可以搜索到索引多边形 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+距离
和 在充满 POLYGONS 的索引中搜索 POINT+distance(A circle)

【问题讨论】:

  • 嗨,有一个问题:solr 的响应时间如何?我正在考虑使用 solr+spark 进行批量反向地理编码。我想知道 Solr 搜索是否支持它。

标签: solr lucene polygon distance spatial


【解决方案1】:

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

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

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

【讨论】:

  • 我原始数据中多边形的分辨率太荒谬了。我必须通过将点数限制为 285 并将点的精度限制为 4 位十进制数字来“简化”多边形。在 WKT 格式中,这给了我一个少于 4000 个字符的形状。所以我确实有很多点,我的数据在世界的某些地方很方便。英国、德国、荷兰和比利时。我对“地图投影”不是很熟悉,你能指点我一些阅读材料吗?
  • 顺便说一句,我运行了查询 geo_location:"Intersects(Circle(-0.141964,51.515580 d=0.0590))" 仅一百万次没有结果,然后我意识到 Circle 期望点在 (Latitude, Longitude radius) 格式,所以运行 geo_location:"Intersects(Circle(51.515580,-0.041964 d=0.010))" 成功让我回到 SOHO 并让我开心
  • 对于非 WKT(Circle 语法有点 hack),您可以使用“x y”或“y,x”。 RE 投影,您可以使用 Proj4j 来帮助您投影数据。维基百科(和谷歌搜索),你会发现大量关于投影的有趣信息。我不声称自己是该主题的专家。我还没有使用这种技术。
  • @DavidSmiley - 有没有办法从作者发布的原始多边形查询中获取距离?
  • 没有。我认为 JTS 可能有一些东西,但你需要做一些工作才能在 Lucene/Solr 中利用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2023-03-30
  • 1970-01-01
  • 2011-12-10
  • 2022-01-27
  • 2017-10-01
相关资源
最近更新 更多