Comment puis-je utiliser les types spatiaux de SQL Server à partir d'une application .Net?

14

Pour un projet à venir, l'une des exigences est de stocker et d'utiliser des données géogrpahiques de base dans le cadre d'une application SQL-Server / .Net existante.

Il semble évident que nous pourrions utiliser les types SQL Spatial, cependant, il ne semble pas y avoir de moyen (par exemple) de les lire à partir du résultat d'une requête SQL, ou de sauvegarder un POI / polygone mis à jour.

Les développeurs doivent-ils vraiment gérer eux-mêmes la conversion au niveau de la procédure stockée, ou existe-t-il un moyen d'utiliser les types nativement?

Rowland Shaw
la source
cela peut être mieux demandé sur StackOverflow car vous posez des questions sur la programmation.
Ian
2
@Ian La portée de ce site a été définie à l'origine comme «un site de questions-réponses pour les programmeurs , les administrateurs de bases de données , les cartographes, les géographes et toute personne intéressée par les SIG de manière professionnelle» (c'est moi qui souligne)
Rowland Shaw

Réponses:

16

S'agit-il d'une application de bureau ou, disons, d'une application Silverlight? S'il est basé sur le Web, vous devez sauter à travers certains cerceaux. Vous pouvez créer une vue qui expose WKT, puis analyser le côté client WKT dans les géométries WPF / Silverlight.

S'il s'agit d'une application de bureau, vous l'avez beaucoup plus facile. Il existe un bon exemple dans le projet de code d'une visionneuse de géométrie SQL qui vous aidera à la fois sur le bureau ou sur le Web.

Vous devez référencer Microsoft.SqlServer.Types.dll, disponible dans SQL Server Install / 100 / SDK / Assemblies pour utiliser SQLGeometry ou SQLGeography directement.

Des technologies comme RIA ne comprennent pas ces types, mais il existe une solution. Essentiellement, vous créez une vue qui transforme la géométrie en un varbinaire (max), l'utilisez dans votre mappeur OU, RIA, LINQ, etc., puis la reconvertissez sur le client. Il y a un bon tutoriel ici

Edition très tardive: Silverlight ne les acceptera pas non plus car les DLL mentionnées précédemment ne sont pas compilées avec Silverlight. Obtenir des versions compatibles avec Silverlight figure en bonne place sur la liste de souhaits de nombreuses personnes!

dmbrubac
la source
2

Vous pouvez utiliser les types de données du serveur SQL, vous pouvez les obtenir à partir de nuget ou ici: http://www.microsoft.com/en-us/download/details.aspx?id=16177 (vers la fin de la page)

Après cela, vous pouvez utiliser nhibernate fluide, encore une fois à partir de nuget ou de ce lien: (Impossible d'insérer le lien ici car il semble que je n'ai pas 10 répétitions ...)

Après cela, vous aurez besoin d'un UserType personnalisé pour mapper le type sql au type clr dans nhibernate. Heureusement pour vous, ce gars en a fait un: http://blogs.ugidotnet.org/mik/archive/2010/03/26/map-sql-server-2008-geography-type-with-fluent-nhibernate.aspx

J'espère que cela t'aides !

Alex Rouillard
la source
1

La bibliothèque FDO (Feature Data Objects) vous permet d'accéder à différents formats de données géospatiales (y compris SQL Server) via un ensemble unique d'interfaces.

La bibliothèque est en C ++, mais elle est également livrée avec un wrapper .net.

http://fdo.osgeo.org

jumpinjackie
la source
0

Avez-vous regardé nHibernate ? Il utilise les types spatiaux .NET (comme décrit par dmbrubac ci-dessus) mais pourrait également communiquer avec d'autres systèmes de base de données que SQL Server.

Je ne sais pas si vous avez également demandé le niveau d'interface utilisateur, mais voici mes 2 cents: j'ai travaillé avec SharpMap, GeoAPI et je me repose il y a quelques années. Ils sont super mais n'ont jamais atteint un stade où l'on peut dire qu'ils sont suffisamment matures pour être utilisés dans une application métier. J'ai expérimenté avec Silverlight et l'API WPF d'ESRI il y a un an et j'ai créé deux prototypes qui utilisaient l'API. C'est génial, ce n'est pas gratuit mais c'est vraiment solide, à la pointe de la technologie et il fait tout ce que vous voulez et plus encore.

Kitto
la source
Le bit d'interface utilisateur est le bit facile, car nous avons notre moteur de visualisation.
Rowland Shaw
0

Si vous écrivez un client Web, une option consiste à utiliser le service ArcGIS Spatial Data, qui est actuellement fourni avec le produit MapIt d'Esri (voir http://resources.esri.com/MapIt ). Le service expose les tables SQL Server via un service Web RESTful. Le service Web utilise le format ArcGIS JSON, de sorte que les tables contenant des données spatiales SQL Server peuvent être utilisées en tant que FeatureLayers dans les API Web ArcGIS. Si vous voulez un client de bureau, vous pouvez utiliser l'API WPF.

Une alternative pour le développement de postes de travail consiste à utiliser les types CLR SQL Server inclus dans les packs de fonctionnalités SQL Server. Vous pouvez trouver la page de téléchargement du pack de fonctionnalités 2008 R2 ici - http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52 . Faites défiler vers le bas ou recherchez "Types CLR" pour trouver le lien de téléchargement.

zwaap
la source