在C#客户端中使用SqlGeography类型

问题描述

在C#客户端中,我尝试使用SQLServerTypes(SqlServerSpatial140.dll)程序集(编辑:直接进行操作,SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory))来测量地球上各点之间,一个街道地址与另一个街道地址,通常相距不超过50英里(但有时更远)。每个位置都表示为纬度/经度对。

这是一个Framework应用程序,并使用NuGet包。

此代码正确吗?我认为不可能,因为我为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提供参数的顺序(纬度,经度)或(纬度,经度)不会使距离数变大。

P.S。在Brian的帮助下,我能够使它工作。这是我实例化Point的方法:

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)