4

我正在使用空间数据开始我的第一个项目。我使用 VS 2012 和 SQL 2012 我已经引用了 System.Data.Entity 并且可以在我的代码中使用 DbGeography 但是当我尝试创建一个点时,我得到了上述错误并且不明白为什么

这是我的代码

var text = string.Format(CultureInfo.InvariantCulture.NumberFormat,
                "POINT({0} {1})", submitted.Long, submitted.Lat);
            // 4326 is most common coordinate system used by GPS/Maps
            try
            {
                var wkb = DbGeography.PointFromText(text, 4226);
            }
            catch (Exception exc)
            {
            }
4

2 回答 2

2

OP 使用的语法是正确的,导致此错误的实际问题是 SRID,4226 不是已知的 SRID,但您已经知道这一点。因为它在您的评论中:)

在您的场景中正确使用的一个示例是:

var wkb = DbGeography.PointFromText($"POINT({submitted.Long} {submitted.Lat})", 4326);

不过你哪里做错了?每当你得到一个

System.Reflection.TargetInvocationException

带有一条消息

调用的目标已抛出异常

您必须立即检查内部异常以获取有关实际错误的详细信息,在这种情况下,它会为您清楚地概述:

24204: 空间参考标识符 (SRID) 无效。指定的 SRID 必须与 sys.spatial_reference_systems 目录视图中显示的支持的 SRID 之一匹配。

我意识到这是一个旧线程,但 IMO 这是人们不断在 SO 上发布的第二个最常见的 .Net 开发人员问题的示例。在拔头发之前,请通读完整的异常堆栈。

我只是猜测,但我认为 NullReferenceException 问题将是最常见的:)

于 2016-08-19T00:10:00.543 回答
-3
is wrong to order the lat and long

正确的是:

DbGeography.PointFromText(POINT(lat long), 4226);

完整类:

public static DbGeography CreatePoint(double latitude, double longetude, int srid = 4326)
    {
        var lon = longetude.ToString(CultureInfo.InvariantCulture);
        var lat = latitude.ToString(CultureInfo.InvariantCulture);

        var geo = $"POINT({lat} {lon})";

        return DbGeography.PointFromText(geo, srid);
    }

称呼:

CreatePoint(-46.55377, 23.11817)
于 2016-08-11T16:01:35.383 回答