You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NHibernate.Spatial 8结合NetTopologySuite 2.0如何处理IPoint移除问题

解决NHibernate.Spatial 8 + NetTopologySuite 2.0的类型转换问题

问题根源

NetTopologySuite 2.0彻底移除了对GeoAPI库的依赖,原GeoAPI.Geometries命名空间下的所有接口(如IPoint)已被迁移至NetTopologySuite.Geometries命名空间,且NTS自身提供了完整的接口实现,无需自行实现。

代码更新步骤

1. 替换命名空间引用

将代码中所有using GeoAPI.Geometries;替换为using NetTopologySuite.Geometries;,同时移除项目中旧的GeoAPI NuGet包。

2. 修正类型声明

  • 原使用GeoAPI.Geometries.IPoint的地方,直接替换为NetTopologySuite.Geometries.IPoint或具体类NetTopologySuite.Geometries.Point
  • 示例修正:
    // 旧代码
    GeoAPI.Geometries.IPoint oldPoint = new NetTopologySuite.Geometries.Point(0,0);
    
    // 新代码
    NetTopologySuite.Geometries.IPoint newPoint = new NetTopologySuite.Geometries.Point(0,0);
    // 或直接使用具体类
    NetTopologySuite.Geometries.Point concretePoint = new NetTopologySuite.Geometries.Point(0,0);
    

NHibernate.Spatial 8中使用NTS 2.0的正确方式

创建空间点

推荐使用NtsGeometryServices提供的工厂类创建,保证与NHibernate Spatial的兼容性:

// 获取全局GeometryFactory
var geometryFactory = NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory();
// 创建Point
var locationPoint = geometryFactory.CreatePoint(new Coordinate(116.397, 39.908));

也可以直接实例化Point类:

var simplePoint = new NetTopologySuite.Geometries.Point(116.397, 39.908);

实体映射配置

Fluent NHibernate示例

public class LocationMap : ClassMap<Location>
{
    public LocationMap()
    {
        Id(x => x.Id);
        // 映射Point类型属性
        Map(x => x.Coordinate).CustomType<NHibernate.Spatial.Type.PointType>();
    }
}

XML映射示例

<class name="Location">
    <id name="Id" />
    <property name="Coordinate" type="NHibernate.Spatial.Type.PointType, NHibernate.Spatial" />
</class>

空间查询操作

直接使用NTS的空间API构建查询条件,NHibernate.Spatial 8会自动转换为数据库对应的空间函数:

// 查询距离指定点1000米范围内的位置
var targetPoint = new Point(116.397, 39.908);
var nearbyLocations = session.Query<Location>()
    .Where(l => l.Coordinate.Distance(targetPoint) < 1000)
    .ToList();

内容的提问来源于stack exchange,提问作者PA-WARE ASSISTENZA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:10:07