Wie kann ich die räumlichen Typen von SQL Server aus einer .NET-Anwendung verwenden?


14

Für ein anstehendes Projekt besteht eine der Anforderungen darin, grundlegende geografische Daten als Teil einer vorhandenen SQL-Server / .Net-Anwendung zu speichern und zu verwenden.

Es liegt auf der Hand, dass wir die SQL Spatial-Typen verwenden könnten, es scheint jedoch keine Möglichkeit zu geben, sie aus dem Ergebnis einer SQL-Abfrage zu lesen oder einen aktualisierten POI / ein aktualisiertes Polygon zu speichern.

Müssen Entwickler die Konvertierung wirklich selbst auf der Ebene der gespeicherten Prozeduren durchführen, oder gibt es eine Möglichkeit, die Typen nativ zu verwenden?


Dies kann bei StackOverflow besser gefragt werden, wenn Sie nach der Programmierung fragen.
Ian

2
@ Ian Der Umfang dieser Site wurde ursprünglich als "Q & A-Site für Programmierer , Datenbankadministratoren , Kartographen, Geographen und alle, die sich professionell für GIS interessieren" (Schwerpunkt Mine) definiert
Rowland Shaw

Antworten:


16

Handelt es sich um eine Desktop-Anwendung oder um eine Silverlight-Anwendung? Wenn es webbasiert ist, müssen Sie durch einige Reifen springen. Sie können eine Ansicht erstellen, die WKT verfügbar macht, und dann die WKT-Clientseite in WPF / Silverlight-Geometrien zerlegen.

Wenn es sich um eine Desktop-Anwendung handelt, ist es um einiges einfacher. Es gibt ein gutes Beispiel für das Code-Projekt eines SQL Geometry-Viewers, das sowohl für den Desktop als auch für das Web hilfreich ist.

Sie müssen auf Microsoft.SqlServer.Types.dll verweisen, das sich unter SQL Server Install / 100 / SDK / Assemblies befindet, um SQLGeometry oder SQLGeography direkt verwenden zu können.

Technologien wie RIA verstehen diese Typen nicht, aber es gibt eine Problemumgehung. Im Wesentlichen erstellen Sie eine Ansicht, in der die Geometrie als Varbinary (max) umgewandelt wird, und verwenden sie in Ihrem OR-Mapper, RIA, LINQ usw.. Anschließend konvertieren Sie sie wieder auf dem Client. Es ist ein gutes Tutorial hier

Sehr späte Bearbeitung: Silverlight akzeptiert sie auch nicht, da die zuvor genannten DLLs nicht mit Silverlight kompiliert wurden. Das Erhalten von Silverlight-kompatiblen Versionen steht ganz oben auf der Wunschliste vieler Leute!



2

Sie können SQL Server-Datentypen verwenden, diese erhalten Sie von Nuget oder hier: http://www.microsoft.com/en-us/download/details.aspx?id=16177 (am Ende der Seite)

Danach können Sie fließend nhibernate verwenden, wieder von Nuget oder über diesen Link: (Link konnte hier nicht eingefügt werden, da es so aussieht, als hätte ich keine 10 Wiederholungen ...)

Danach benötigen Sie einen benutzerdefinierten UserType, um den SQL-Typ dem CLR-Typ in nhibernate zuzuordnen. Glücklicherweise hat dieser Typ einen erstellt: http://blogs.ugidotnet.org/mik/archive/2010/03/26/map-sql-server-2008-geography-type-with-fluent-nhibernate.aspx

Hoffe das hilft !




1

Mit der FDO-Bibliothek (Feature Data Objects) können Sie über eine einzige einheitliche Gruppe von Schnittstellen auf verschiedene Geodatenformate (einschließlich SQL Server) zugreifen.

Die Bibliothek befindet sich in C ++, die Bibliothek wird jedoch auch mit einem .NET-Wrapper geliefert.

http://fdo.osgeo.org


0

Hast du dir nHibernate angesehen ? Es verwendet die räumlichen .NET-Typen (wie oben von dmbrubac beschrieben), kann jedoch auch mit anderen DB-Systemen als SQL Server kommunizieren.

Ich weiß nicht, ob Sie auch nach dem UI-Level gefragt haben, aber hier sind meine 2 Cent: Ich habe vor ein paar Jahren mit SharpMap, GeoAPI und Rest gearbeitet. Sie sind großartig, haben aber noch nie ein Stadion erreicht, in dem man sagen kann, dass sie ausgereift genug sind, um in einer Geschäftsanwendung verwendet zu werden. Ich habe vor einem Jahr mit der Silverlight- und WPF-API von ESRI experimentiert und zwei Prototypen erstellt, die die API verwendeten. Es ist großartig, es ist nicht kostenlos, aber es ist wirklich solide, auf dem neuesten Stand der Technik und es macht all die Dinge, die Sie wollen und vieles mehr.


Das UI-Bit ist das einfache Bit, da wir unsere Visualisierungs-Engine haben.
Rowland Shaw

0

Wenn Sie einen Web-Client schreiben, können Sie den ArcGIS Spatial Data Service verwenden, der derzeit mit dem MapIt-Produkt von Esri geliefert wird (siehe http://resources.esri.com/MapIt ). Der Dienst macht SQL Server-Tabellen über einen RESTful-Webdienst verfügbar. Der Web-Service verwendet das ArcGIS-JSON-Format, sodass Tabellen mit räumlichen SQL Server-Daten als FeatureLayers in den ArcGIS-Web-APIs verwendet werden können. Wenn Sie einen Desktop-Client möchten, können Sie die WPF-API verwenden.

Eine Alternative für die Desktop-Entwicklung ist die Verwendung der SQL Server-CLR-Typen, die in den SQL Server-Feature-Packs enthalten sind. Die Downloadseite für das 2008 R2 Feature Pack finden Sie hier: http://www.microsoft.com/downloads/de/details.aspx?displaylang=de&FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52 . Scrollen Sie nach unten oder suchen Sie nach "CLR-Typen", um den Download-Link zu finden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.