繁体   English   中英

在 C# 客户端使用 SqlGeography 类型

[英]using SqlGeography types in C# client-side

在 C# 客户端,我正在尝试使用 SQLServerTypes (SqlServerSpatial140.dll) 程序集(编辑:直接这样做, SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory) )来测量 pl.net 上各点之间的距离,在一个街道地址和另一个街道地址之间,通常相距在 50 英里以内(但有时更远)。 每个位置都表示为纬度/经度对。

这是一个框架应用程序,使用 NuGet package。

这段代码正确吗? 我认为不可能,因为我得到的distance值太小了,例如24.35946...当两个点相距数百英里时,例如两个城镇,其中一个在北卡罗来纳州和波多黎各的另一个。 米不是标准单位吗?

        foreach (Origin o in Origins)
        {
            o.loc = SqlGeometry.Point(o.lat, o.lon, 4326);
            foreach (Destination d in Destinations)
            {
                SqlDouble distance = o.loc.STDistance(SqlGeometry.Point(d.lat, d.lon, 4326));
                <snip>                   
            }
        }

4326是正确的 SRID 吗? 如果 SRID 为零,我会得到相同的结果。 此外,向 Point 提供参数的顺序 (lat,lon) 或 (lon,lat) 不会使距离数字变大。

PS 在 Brian 的帮助下,我能够让它工作。 这是我实例化点的方式:

 public Microsoft.SqlServer.Types.SqlGeography CreateGeographyPoint(double longitude, double latitude)
        {
            var text = string.Format("POINT({0} {1})", longitude, latitude);
            var ch = new System.Data.SqlTypes.SqlChars(text);
            return Microsoft.SqlServer.Types.SqlGeography.STPointFromText( ch, 4326);
        }

您应该使用 Sqlgeography class 和 4326 的 Srid 将为您提供以米为单位的结果。

SqlGeometry 用于笛卡尔坐标 (x, y),而 SqlGeography 用于地理空间坐标 Long、Lat 的顺序。

将 SqlGeometry 替换为 SqlGeography。

这实际上更像是一个 GIS 问题,而不是一个编程问题。

SRID是空间参考ID; 记录该表中数据的空间参考,或者您在处理或显示数据时要使用的空间参考。 看:

https://desktop.arcgis.com/en/arcmap/10.3/manage-data/using-sql-with-gdbs/what-is-an-srid.htm

https://learn.microsoft.com/en-us/sql/relational-databases/spatial/spatial-reference-identifiers-srids

您可以查询表中的数据以查看它记录在哪个空间参考中。请参阅:

https://learn.microsoft.com/en-us/sql/t-sql/spatial-geometry/stsrid-geometry-data-type?view=sql-server-ver15

至于那个 SRID 是否正确,那取决于你。 输入数据时使用的是什么 SRID? 如果您希望它具有相同的空间参考,请使用相同的 SRID。 如果您希望在不同的空间参考中输出结果,请使用不同的 SRID。 4326 是 WGS84:

https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM