RavenDB - 如何将WKT圆形添加到索引中?

时间:2014-11-23 15:46:28

标签: indexing ravendb spatial

如何将计算形状添加到索引中?

我有一个班级

public class Partner
{
   public double Latitude { get; set; }
   public double Longitude { get; set; }
   public double WorkingRadius { get; set; }
   public double WorkingRadiusShape 
   { 
      get
      { 
         return string.Format("Circle({0},{1}, d={2})", Latitude, Longitude, WorkingRadius);
      }
   }
}

使用以下索引

public class PartnersByLocation : AbstractIndexCreationTask<Partner>
{
   public PartnersByLocation()
   {
      Map = partners => from doc in partners
                              select new
                              {
                                WorkingRadiusShape = doc.WorkingRadiusShape
                              };

      Spatial(x => x.WorkingRadiusShape, options => options.Geography.Default());
    }
 }

我重建并运行我的应用程序,但索引PartnersByLocation为空。我不确定我做错了什么。索引报告没有错误,我已检查合作伙伴集合是否为写入WorkingRadiusShape属性的属性设置了值。我的语法或方法是否存在根本性的错误?

1 个答案:

答案 0 :(得分:0)

我明白了。

Map = partners => from doc in partners
                              where doc.AbilityKeyIds != null
                              select new
                              {
                                WorkingRadiusShape = string.Format("Circle({0},{1}, d={2})", doc.Latitude, doc.Longitude, doc.WorkingRadius)
                              };



Spatial(x => x.WorkingRadiusShape, options => options.Geography.Default());

关键是在索引时移动赋值WorkingRadiusShape,否则该属性仅在文档读/写时更新。因此,如果存在任何已弃用/无效的条目,则在写入索引时将不会更新这些条目,并且索引将中断。就我而言,我在其中一个合作伙伴条目中为WorkingRadius存储了10000。此值导致索引中断,因为最大值为180,可以作为“d”传递。在分配形状时要注意最大值。