J'ai quelques centaines de formes ( polygon
s et multipolygon
s) constitués chacun de plusieurs dizaines de milliers de points que je suis en train d'entrer dans SQL 2008.
Malheureusement, les formes que j'ai essayé d'importer sont "droitières" (le périmètre de chacune est tracé dans le sens des aiguilles d'une montre autour des points qu'il contient). Serveur SQL suppose « gauchers » formes ( dans le sens antihoraire autour de l'intérieur), au moins pour les geography
types. Cela signifie que SQL suppose que j'essaie de sélectionner la terre entière à l' exception de ma forme. Certaines personnes décrivent cela comme des formes "à l'envers".
De MSDN , qui ne dit pas avec frustration quelle orientation d'anneau on doit utiliser:
Si nous utilisons le
geography
type de données pour stocker l'instance spatiale, nous devons spécifier l'orientation de l'anneau et décrire avec précision l'emplacement de l'instance.
Si vous utilisez la mauvaise orientation de l'anneau dans SQL 2008, il se bloque avec l'erreur suivante (c'est moi qui souligne):
Une erreur .NET Framework s'est produite lors de l'exécution d'une routine définie par l'utilisateur ou d'une "géographie" agrégée: Microsoft.SqlServer.Types.GLArgumentException: 24205: L'entrée spécifiée ne représente pas une instance géographique valide car elle dépasse un seul hémisphère. Chaque instance de géographie doit tenir dans un seul hémisphère. Une raison courante de cette erreur est qu'un polygone a la mauvaise orientation d'anneau.
L'importation des formes au geometry
lieu de geography
fonctionne très bien, mais j'aimerais utiliser geography
si je le peux.
Dans SQL 2012, il semble assez trivial de résoudre ce problème, mais je suis lié à 2008.
Comment dois-je convertir les formes?
la source
Réponses:
Le blog de Spatial Ed avait une solution concise. Voici du SQL démontrant la transformation:
Et un extrait du post d' Ed:
la source
Dans> = SQL Server 2012, la méthode ReorientObject () devrait accomplir cela. Pour <SQL Server 2012, voici une méthode alternative.
Pour une géographie SQL existante @g, le code ci-dessous extrait les points et recrée un polygone avec des points (sommets) dans l'ordre inverse:
(NOTE 1: fonctionne pour les polygones simples, pas pour les multipolygones ou les polygones avec des anneaux / centroïdes)
(NOTE 2: en utilisant le système de coordonnées SRID 4326 (WGS 84))
la source
Il semble que je puisse utiliser un hybride impie de SQL et C # de SQL Server Spatial Tools , comme suggéré sur Stack Overflow .
Remarque: Au moment où cette réponse a été publiée, il n'y avait pas beaucoup d'informations. N'essayez pas cette méthode sauf si vous avez déjà besoin des outils spatiaux SQL Server pour autre chose. Au lieu de cela, essayez l'une des autres réponses ici ou sur Stack Overflow .
la source