簡體   English   中英

是否可以在使用 .NET 4.8 的 ASP.NET 應用程序中使用 SQL Server 2017 的 Geography 數據類型?

[英]Is it possible to use Geography data type of SQL Server 2017 in ASP.NET application using .NET 4.8?

我無法在 ASP.NET 應用程序中配置為在 SQL Server 2017 中使用具有Geography數據類型的數據庫。

在我的另一個問題中,我概述了各種不起作用的解決方法。 鏈接: SO問題

任何人都可以在 ASP.NET 應用程序中成功使用 SQL Server 2017 中的Geography類型進行確認。 如果是,配置是什么?

唯一的解決方法是將geography數據轉換為字符串,然后在客戶端反序列化它,這是一種可怕的做事方式......

我在一個解決方案中使用了 OData v4 API,該解決方案允許農民繪制他們的農場和圍場的地圖,並且他們可以在這些地圖上放置大門。

在您的模型中,使用System.Data.Entity.Spatial.DbGeography作為您希望在 SQL 中成為Geography 的字段的數據類型

在我們的解決方案在圍場存儲在DbGeography領域的多邊形MULTIPOLYGON,門都存儲在DbGeography領域POINT。 我們可以查詢邊界框中的所有圍場,計算面積和距離......幾乎所有我們的客戶可以向我們提出的地理空間查詢......

值得注意的當前包(但是相同包的先前版本已在去年運行):

  • 實體框架 6.4.0
  • Microsoft.AspNet.OData 7.3.0
  • 微軟.AspNet.WebApi 5.2.7
  • 微軟空間 7.6.2
  • Microsoft.SqlServer.Types 14.0.1016.290
  • Newtonsoft.Json 12.0.1

如果您需要與 GeoJSON 源進行交互,無論是導入還是導出,我也使用這些包,但您應該能夠在沒有它們的情況下編寫包含的應用程序:

  • GeoJSON.Net 1.1.72
  • GeoJSON.Net.Contrib.EntityFramework 0.1.3
  • GeoJSON.Net.Contrib.MsSqlSpatial 0.3.2
  • GeoJSON.Net.Contrib.Wkb 0.1.3

OData 序列化程序在序列化或反序列化這些類型時沒有造成任何問題,對其中一個邊界的查詢返回:

{
    "@odata.context": ".../$metadata#Paddocks(17518)/Perimeter",
    "Geography": {
        "CoordinateSystemId": 4326,
        "WellKnownText": "POLYGON ((145.27786016464236 -37.855119294600946, 145.27687250851116 -37.855329119608058, 145.276149480753 -37.855902375057504, 145.27588481613736 -37.856685463693672, 145.2761494445584 -37.857468560509645, 145.27687247231654 -37.85804183231879, 145.27786016464236 -37.858251665505662, 145.27884785696818 -37.85804183231879, 145.27957088472633 -37.857468560509659, 145.27983551314736 -37.856685463693672, 145.27957084853173 -37.855902375057504, 145.27884782077356 -37.855329119608058, 145.27786016464236 -37.855119294600946))"
    }
}

如果您在客戶端使用 Geography 數據類型時遇到問題,您會發現它只是語法,因此可以克服,但您需要發布您遇到的更具體的問題,您可能會發現更多的工具和通用如果您在客戶端使用 GeoJSON,那么像Leaflet js這樣的映射組件本身就使用GeoJSON,所以如果您從頭開始使用映射解決方案,您可能會發現直接進行 GeoJSON 集成更容易。

在我的另一個問題中,我概述了各種不起作用的解決方法

由於您沒有包含任何指向您之前問題的鏈接,我不確定您之前的相關問題是什么,但我希望這能讓您有信心堅持解決方案。


更新

而不是遵循有關SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

我在部署期間手動將類型 dll 的 x86 版本復制到 bin 文件夾中(因為服務器運行的是 IIS 32 位。如果您的服務器在 64 位模式下運行,請使用 x64 版本)

我還在 web.config 中添加了這個綁定重定向:

<assemblyBinding>
    <dependentAssembly>
        <assemblyIdentity name="Microsoft.SqlServer.Types" 
                          publicKeyToken="89845dcd8080cc91" culture="neutral" />
        <bindingRedirect oldVersion="10.0.0.0" newVersion="14.0.0.0" />
    </dependentAssembly>
</assemblyBinding>

連接字符串或其他任何東西都沒有什么特別之處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM