我遇到以下错误:
错误: SqlException:例行执行或用户定义的聚合“地理位置”期间的.NET Framework错误: System.ArgumentException:24204:空间参考标识符(SRID)无效。指定的SRID必须与sys.spatial_reference_systems目录视图中显示的受支持SRID之一匹配。
当我尝试将这样创建的点保存到SQL DB时引发此错误
new Point(it.Lat, it.Lng)
之后,我尝试使用像这样的GeometryFactory
:
public static class GeometryHelper
{
public static IGeometryFactory GeometryFactory { get; set; }
= NtsGeometryServices.Instance.CreateGeometryFactory();
}
...
geometryFactory.CreatePoint(new Coordinate(it.Lat, it.Lng))
什么都没有。
还尝试设置特定的SRID:
public static class GeometryHelper
{
public static IGeometryFactory GeometryFactory { get; set; }
= NtsGeometryServices.Instance.CreateGeometryFactory(4326);
}
但随后出现此错误:
SqlException:例行执行或用户定义的聚合“地理位置”期间的.NET Framework错误: System.FormatException:所标识的元素之一具有无效的格式。 System.FormatException:
答案 0 :(得分:1)
发布问题后几分钟即可解决。关于第一个错误,解决问题的正确方法是执行问题中的工作:创建几何工厂并使用4326作为SRID。您必须检查所使用的SRID是否在数据库表(sys.spatial_reference_systems catalog view
)中。显然4326
是标准的,就像Microsft文档中的一样。
public static class GeometryHelper
{
public static IGeometryFactory GeometryFactory { get; set; }
= NtsGeometryServices.Instance.CreateGeometryFactory(4326);
}
第二个错误与点和lat-lng对象之间的映射有关。
经度和纬度 NTS中的坐标以X和Y值表示。要表示经度和纬度,请使用X代表经度,Y代表纬度。请注意,这与通常会看到这些值的纬度,经度格式相反。
答案 1 :(得分:1)
我也遇到了这个问题。这就是我最终解决它的方式。
new Point(geoLocation.Longitude, geoLocation.Latitude) { SRID = 4326 }
在创建新的Point实例时,我只是分配了SRID,而不是创建工厂和创建点。