条件SpatialRestrictions.IsWithinDistance NHibernate.Spatial

有没有人实现这一点,或知道是否会很难实现这个/有任何指针?

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance) { // TODO: Implement throw new NotImplementedException(); } 

从NHibernate.Spatial.Criterion.SpatialRestrictions

我可以在hql中使用“where NHSP.Distance(PROPERTY,:point)”。 但是想要将这个查询与我现有的Criteria查询结合起来。

目前我正在创build一个粗糙的多边形,并使用

 criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon)); 

编辑有一个通过重载SpatialRelationCriterion构造函数,添加新的SpatialRelation.Distance的原型工作

 public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance) { return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance); } 

向SpatialRelationCriterion添加了一个新字段

 private readonly double? distance; public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, double distance) : this(propertyName, relation, anotherGeometry) { this.distance = distance; } 

编辑ToSqlString

 object secondGeometry = Parameter.Placeholder; if (!(this.anotherGeometry is IGeometry)) { secondGeometry = columns2[i]; } if (distance.HasValue) { builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, distance.Value, true)); } else { builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, true)); } 

重载了ISpatialDialect.GetSpatialRelationString

在MsSql2008SpatialDialect中实现了重载

 public SqlString GetSpatialRelationString(object geometry, SpatialRelation relation, object anotherGeometry, double distance, bool criterion) { var x = new SqlStringBuilder(8) .AddObject(geometry) .Add(".ST") .Add(relation.ToString()) .Add("(") .AddObject(anotherGeometry) .Add(")"); if (criterion) { x.Add(" < "); x.AddObject(distance.ToString()); } return x.ToSqlString(); } 

不知道为什么AddParameter不被使用?

是的,我认为重新编译DLL是目前最好的解决scheme。

我们正在GitHub上调查这个问题。 感谢您提供很好的见解和可能的解决scheme。 这里有一个问题的链接: https : //github.com/nhibernate/NHibernate.Spatial/issues/61

修复后我会尽快发布新的NuGet软件包。