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)
{
}
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)