2012-09-12 11 views
6

Ich arbeite mit dem neuen Entity-Framework 5 mit dem Spatial-Datentyp DbGeography als Teil meines Modells für die Speicherung in einer Instanz, einem POINT und in einem anderen Beispiel ein POLYGON.Wie korrigiert man Polygonring Orientierung mit C# Entity Framework 5 DbGeography Räumliche Daten

Wenn ich den Wert meines POLYGON setze, werden alle Werte ohne Fehler gespeichert. Dies ist jedoch nur der Fall, wenn ich das Polygon auf der Karte im Uhrzeigersinn zeichne. Wenn ich das POLGON gegen den Uhrzeigersinn zeichne, erhalte ich einen Fehler der Sql-Ebene, der angibt, dass die Daten ein ungültiger geografischer Typ sind.

Nachdem ich nun selbst nach dem Problem geforscht habe, scheint es, dass der geografische Datentyp ziemlich streng ist, was die Ausrichtung eines Polygons angeht. Die gängigste Lösung scheint darin zu bestehen, das Polygon als Geometrie zu erstellen und dann in einen Geografie-Typ zu konvertieren.

Ich suche nach einer Lösung in C#, die auf die Daten angewendet werden kann, bevor es an SQL gesendet wird. Grundsätzlich etwas, das automatisch die Ringausrichtung eines Koordinatensystems korrigiert.

Ich habe versucht, den Fehler zu fangen und dann die Zeichenfolge neu aufzubauen, indem Sie das Array umkehren. Dies funktioniert in einigen Fällen, aber erstens ist es nicht zuverlässig und zweitens ist der Fehler zu groß, um einen Leistungseinbruch zu erzielen.

Dank Chris

Antwort

0

Das gleiche Problem hier für Bing Maps v7 und ihre Form Toolkit Polygone hier Zeichnung: http://bingmapsv7modules.codeplex.com/wikipage?title=Shape%20Toolbox%20Module

+0

Hallo Adam, scheint dies wie ein Kommentar, der als Kommentar auf die Frage hinzugefügt werden soll , nicht als Antwort gepostet. Da du neu hier bist, musst du aktiv werden, um ein bisschen mehr Ansehen zu bekommen, also kannst du einen Kommentar schreiben. – VKen

2

ich je hatte die Reihenfolge meiner selbst ausgeben, und ich löste es die Verwendung von MakeValidGeographyFromText Funktion von SQLSpatialTools habe ich es die folgende Art und Weise in einem SP:

SET @ge = dbo.MakeValidGeographyFromText(
    'POLYGON((' + @pois + '))', 4326); 

Wo @pois ist eine Zeichenfolge, die Koordinaten enthalten, in einem gültigen Format, aber falsche Rotation.

Ich bin nicht sicher, wie einfach das mit EF-5 zu integrieren ist, aber ich sehe zwei Möglichkeiten:

  1. die Funktion Verwenden Sie direkt von C#, bevor sie mit dem richtigen Polygon EF aufrufen.
  2. Installieren Sie sqlspatialtools auf dem SQL-Server, und führen Sie die Verarbeitung dort aus.
3

Hallo, ich hatte das gleiche Problem und löste es durch

var sqlGeography = SqlGeography.STGeomFromText().MakeValid() 
var invertedSqlGeography = sqlGeography.ReorientObject(); 

Weitere Details unter Verwendung finden here