簡體   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