DbGeography.调用的目标抛出了PointFromText错误异常

本文关键字:PointFromText 错误 异常 调用 目标 DbGeography | 更新日期: 2023-09-27 18:01:45

我正在使用空间数据开始我的第一个项目。我使用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)
            {
            }

DbGeography.调用的目标抛出了PointFromText错误异常

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

在您的场景中,正确用法的一行示例是:

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

你到底哪里做错了?当你得到

System.Reflection.TargetInvocationException

带有

的信息

异常被调用的目标抛出

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

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

我意识到这是一个旧的线程,但在我看来,这是第二个最常见的。net开发人员问题的例子,人们一直在SO上发帖。请仔细阅读完整的异常堆栈,然后再拔头发。

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

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)