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

如何在VB.Net中将经纬度转换为SQL Server Geography列

解决SQL Server Geography类型存储经纬度的问题

你之前的尝试没成功,大概率是以下几个常见问题导致的,直接给你对应解决方案:

1. 经纬度参数顺序搞反了

SqlGeography.Point的参数要求是纬度在前,经度在后,很多人会惯性先写经度再写纬度,这是最容易踩的坑。如果你的GoogleLatitude是纬度值、GoogleLongitude是经度值,正确写法应该是:

GeometryData = Microsoft.SqlServer.Types.SqlGeography.Point(GoogleLatitude, GoogleLongitude, 4326);

注意:如果参数顺序反了,当经度值超出±90(比如120),会因为不符合纬度范围直接创建失败。

2. 经纬度值无效或为空

先检查你的经纬度值是否符合合法范围:

  • 纬度必须在 -90 到 90 之间
  • 经度必须在 -180 到 180 之间
    如果值为空、超出范围或者格式错误,都会导致创建失败,建议先加参数校验:
if (GoogleLatitude >= -90 && GoogleLatitude <= 90 
    && GoogleLongitude >= -180 && GoogleLongitude <= 180)
{
    GeometryData = Microsoft.SqlServer.Types.SqlGeography.Point(GoogleLatitude, GoogleLongitude, 4326);
}
else
{
    // 这里处理无效经纬度的逻辑,比如抛出提示或设为null
}

3. 确认依赖和数据库列类型

  • 确保项目安装了和SQL Server版本匹配的Microsoft.SqlServer.Types NuGet包(比如SQL Server 2019对应15.x版本),版本不兼容也会导致创建失败。
  • 数据库表的目标列必须是Geography类型,不能是Geometry类型,两者无法直接兼容。

排查错误的小技巧

如果还是有问题,可以输出创建后的对象状态来定位问题:

var geo = Microsoft.SqlServer.Types.SqlGeography.Point(GoogleLatitude, GoogleLongitude, 4326);
Console.WriteLine(geo.IsValid); // 输出是否有效
Console.WriteLine(geo.STAsText()); // 输出WKT格式,确认坐标是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:52:10