Join 如何在ravendb中执行空间连接
我收集了大量包含地理空间点数据(以及其他数据)的文档。我有另一个包含多边形(以及其他数据)的大型文档集合 我想通过点是否包含在任何具有特定属性的多边形中来过滤对点数据的查询 我可以用RavenDB做这个吗?如果可以,怎么做 我想的事情: 我不知道如何使用索引实现这一点,因为索引只映射(和/或减少),所以我无法逐个查询一个集合Join 如何在ravendb中执行空间连接,join,ravendb,spatial,Join,Ravendb,Spatial,我收集了大量包含地理空间点数据(以及其他数据)的文档。我有另一个包含多边形(以及其他数据)的大型文档集合 我想通过点是否包含在任何具有特定属性的多边形中来过滤对点数据的查询 我可以用RavenDB做这个吗?如果可以,怎么做 我想的事情: 我不知道如何使用索引实现这一点,因为索引只映射(和/或减少),所以我无法逐个查询一个集合 我不能只进行查询并依赖Raven的结果缓存,因为通过多边形集进行查询会很快使查询长度超过任何合理的查询长度限制。在RavenDB中,您可以定义索引来处理空间数据。 假设您有
我不能只进行查询并依赖Raven的结果缓存,因为通过多边形集进行查询会很快使查询长度超过任何合理的查询长度限制。在RavenDB中,您可以定义索引来处理空间数据。 假设您有一个定义为WKT的空间多边形文档: (WKT-->众所周知的文本标记) 我说的多边形WKT是指
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
然后您可以定义处理WKT的索引,如下所示:
public class EventsWithWKT_ByNameAndWKT : AbstractIndexCreationTask<EventWithWKT>
{
public EventsWithWKT_ByNameAndWKT()
{
Map = events => from e in events
select new
{
Name = e.Name,
WKT = e.WKT
};
Spatial(x => x.WKT, options => options.Geography.Default());
}
}
具有kt_byname和wkt:AbstractIndexCreationTask的公共类事件
{
公共活动,按名称和WKT()
{
Map=events=>来自事件中的e
选择新的
{
Name=e.Name,
WKT=e.WKT
};
Spatial(x=>x.WKT,options=>options.Geography.Default());
}
}
通过调用索引定义中的“Spatial”方法,RavenDB创建了一个特殊的列,然后可以使用空间查询来查询该列
现在,可以通过以下查询过滤某个点是否在文档的多边形内:
var results = session
.Query<EventWithWKT, EventsWithWKT_ByNameAndWKT>()
.Customize(x => x.RelatesToShape("WKT", "POINT (30 10)", SpatialRelation.Within))
.ToList();
var结果=会话
.Query()
.Customize(x=>x.RelatesToShape(“WKT”,“点(30-10)”,空间关系内))
.ToList();
这不是定义和使用空间数据的唯一方法。您可以在这些文档文章中阅读有关RavenDB空间索引的更多信息:
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
然后您可以定义处理WKT的索引,如下所示:
public class EventsWithWKT_ByNameAndWKT : AbstractIndexCreationTask<EventWithWKT>
{
public EventsWithWKT_ByNameAndWKT()
{
Map = events => from e in events
select new
{
Name = e.Name,
WKT = e.WKT
};
Spatial(x => x.WKT, options => options.Geography.Default());
}
}
具有kt_byname和wkt:AbstractIndexCreationTask的公共类事件
{
公共活动,按名称和WKT()
{
Map=events=>来自事件中的e
选择新的
{
Name=e.Name,
WKT=e.WKT
};
Spatial(x=>x.WKT,options=>options.Geography.Default());
}
}
通过调用索引定义中的“Spatial”方法,RavenDB创建了一个特殊的列,然后可以使用空间查询来查询该列
现在,可以通过以下查询过滤某个点是否在文档的多边形内:
var results = session
.Query<EventWithWKT, EventsWithWKT_ByNameAndWKT>()
.Customize(x => x.RelatesToShape("WKT", "POINT (30 10)", SpatialRelation.Within))
.ToList();
var结果=会话
.Query()
.Customize(x=>x.RelatesToShape(“WKT”,“点(30-10)”,空间关系内))
.ToList();
这不是定义和使用空间数据的唯一方法。您可以在这些文档文章中阅读有关RavenDB空间索引的更多信息: