如何使用NHibernate Spatial在地图上另一个点的距离内获取点 - 不使用SQL

时间:2016-05-25 12:03:32

标签: c# nhibernate spatial

我们正在尝试使用NHibernate Spatial在参考位置的距离内显示数据点的地图。但是,我们能找到的最接近的是:

Get Points Within a Radius using NHibernate Spatial

我们需要在不使用任何SQL或HQL的情况下执行此操作。 NHibernate Spatial v4.0.0.x在github上没有像日期那样实现IsWithinDistance()函数(询问这个问题):

IsWithinDistance not implemented in NHibernate Spatial

如果你能指出我们解决这个问题的话会很棒。

提前致谢。

修改 相关问题:

Almost the same question here - 但这个关闭了。我不认为那些是低质量的答案。有人应该重新打开它。 我在这里的问题是一个更普遍的问题,另一个问题更具体的是调查。

1 个答案:

答案 0 :(得分:1)

如果您正在使用PostGIS并且完全不使用SQL / HQL,我建议使用ST_DWithin()函数(请参阅here)。对于其他提供程序(例如MSSQL),您可以使用缓冲区并与查询相交。

这种“缓冲和交叉”策略也可以在QueryOver语句中使用,以避免使用SQL / HQL。例如:

Point referenceLocation; // Will have been initialized somewhere else
double distance = 1000; // Set to whatever distance you need
var polygon = (Polygon) referenceLocation.Buffer(distance); // You can also pass in some BufferParameters here

var dataPoints = Session.QueryOver<your_data_point_entity_type>()
    .WhereSpatialRestrictionOn(x => x.point_geom_column)
    .Intersects(polygon)
    .List();

顺便说一下,当我有空闲时间时,我可能会在IsWithinDistance()内最终实现NHibernate.Spatial函数:)请参阅GitHub上的this issue