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

如何在不使用EF的SQL Server中使用NetTopologySuite?

在SQL Server中读写NetTopologySuite Geometry对象(不使用Entity Framework)

所需依赖

首先安装以下NuGet包:

  • NetTopologySuite:核心空间数据处理库
  • Microsoft.Data.SqlClient:SQL Server官方数据访问库(替代旧版System.Data.SqlClient)
  • NetTopologySuite.IO.SqlServerBytes:专门处理SQL Server空间类型与NTS对象的转换

写入Geometry到SQL Server

将NTS的Geometry对象转换为SQL Server兼容的字节流,通过参数化查询写入数据库:

using NetTopologySuite.Geometries;
using NetTopologySuite.IO;
using Microsoft.Data.SqlClient;

// 创建示例NTS点对象(指定SRID为WGS84坐标系)
var point = new Point(116.397, 39.908) { SRID = 4326 };

// 转换为SQL Server可识别的字节数组
var sqlBytesWriter = new SqlServerBytesWriter();
var geometryBytes = sqlBytesWriter.Write(point);

// 执行写入操作
using var conn = new SqlConnection("你的SQL Server连接字符串");
conn.Open();
using var cmd = new SqlCommand("INSERT INTO YourTable (GeoColumn) VALUES (@geo)", conn);
cmd.Parameters.AddWithValue("@geo", geometryBytes);
cmd.ExecuteNonQuery();

从SQL Server读取Geometry

从数据库读取字节流,转换回NTS的Geometry对象:

using NetTopologySuite.Geometries;
using NetTopologySuite.IO;
using Microsoft.Data.SqlClient;

using var conn = new SqlConnection("你的SQL Server连接字符串");
conn.Open();
using var cmd = new SqlCommand("SELECT GeoColumn FROM YourTable WHERE Id = @id", conn);
cmd.Parameters.AddWithValue("@id", 1);

using var reader = cmd.ExecuteReader();
if (reader.Read())
{
    var geometryBytes = reader.GetSqlBytes(0);
    if (!geometryBytes.IsNull)
    {
        // 转换为NTS Geometry对象
        var sqlBytesReader = new SqlServerBytesReader();
        var geometry = sqlBytesReader.Read(geometryBytes.Value);
        // 示例:输出坐标信息
        Console.WriteLine($"坐标:X={geometry.Coordinate.X}, Y={geometry.Coordinate.Y}");
    }
}

注意事项

  • 确保SQL Server表中字段类型为geometry或geography,且SRID与NTS对象的SRID保持一致(如常用的4326对应WGS84坐标系)
  • 若处理geography类型,只需将SqlServerBytesWriter/SqlServerBytesReader替换为SqlServerGeographyBytesWriter/SqlServerGeographyBytesReader即可

内容的提问来源于stack exchange,提问作者mxcolin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:24:47