如何在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.TypesNuGet包(比如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
相关产品推荐
相关产品推荐

