【问题标题】:Entity Framework Core + Spatial Data is Raising SRID not vaild errorEntity Framework Core + Spatial Data is Raising SRID not vaild 错误
【发布时间】:2019-09-19 01:11:00
【问题描述】:

我收到以下错误:

错误: 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:

【问题讨论】:

    标签: sql-server geospatial spatial ef-core-2.2 asp-net-core-spa-services


    【解决方案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 表示纬度。请注意,这与您通常看到这些值的纬度、经度格式相反。

    参考:Spatial in Ef Core

    【讨论】:

    • 4326(通常称为EPSG:4326)是WGS84,是当今最常用的坐标系。如果您不将空间对象与坐标系(空间参考)相关联,那么软件(在本例中为 DB)将不知道如何处理坐标。
    【解决方案2】:

    我也遇到过这个问题。这就是我最终解决它的方式。

    new Point(geoLocation.Longitude, geoLocation.Latitude) { SRID = 4326 }
    

    我只是在创建新的 Point 实例时分配了 SRID,而不是创建和工厂化并创建一个点。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2020-03-19
      • 2023-03-07
      • 2019-11-13
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多