Có ai đã thực hiện điều này, hoặc biết nếu nó sẽ khó khăn để thực hiện điều này / có bất kỳ hướng dẫn?
public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
{
// TODO: Implement
throw new NotImplementedException();
}
từ NHibernate.Spatial.Criterion.SpatialRestrictions
Tôi có thể sử dụng "where NHSP.Distance (PROPERTY,: point)" trong hql. Nhưng muốn kết hợp truy vấn này với truy vấn Tiêu chí hiện có của tôi.
hiện tại tôi đang tạo một đa giác thô và sử dụng
criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon));
EDIT Có một nguyên mẫu hoạt động bằng cách nạp chồng hàm tạo trên SpatialRelationCriterion, thêm SpatialRelation mới.
public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
{
return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance);
}
đã thêm một trường mới vào SpatialRelationCriterion
private readonly double? distance;
public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, double distance)
: this(propertyName, relation, anotherGeometry)
{
this.distance = distance;
}
Đã chỉnh sửa 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));
}
quá tải ISpatialDialect.GetSpatialRelationString
thực hiện quá tải trong 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();
}
Bạn không chắc tại sao AddParameter không được sử dụng?