6

Sto lavorando con il nuovo Entity-Framework 5 utilizzando il tipo di dati spaziali DbGeography come parte del mio modello per la memorizzazione in un'istanza, un POINT e in un altro esempio un POLIGONO.Come correggere l'Orientamento poligonale utilizzando C# Entity Framework 5 DbGeography Dati spaziali

Quando si imposta il valore del mio POLIGONO tutto salva senza errori tuttavia questo è solo il caso se disegno il poligono sulla mappa in senso orario. Se disegno il POLGON in senso antiorario ottengo un errore il livello sql che indica che il dato è un tipo geografico non valido.

Ora, dopo aver svolto le mie ricerche sul problema, sembra che il tipo di dati geografici sia piuttosto rigido in termini di orientamento dei poligoni. La soluzione più comune sembra creare il poligono come una geometria e quindi convertirlo in un tipo di geografia.

Sto cercando una soluzione in C# che possa essere applicata ai dati prima che venga inviata a sql. Fondamentalmente qualcosa che correggerà automaticamente l'orientamento dell'anello di un array di coordinate.

Ho provato a rilevare l'errore e quindi a ricostruire la stringa invertendo l'array. Questo funziona in alcuni casi, ma in primo luogo non è affidabile e in secondo luogo l'errore è rappresentato da un grande successo in termini di prestazioni.

Grazie Chris

risposta

0

Stesso problema qui, utilizzando Bing v7 cartine e la loro toolkit forma per disegnare poligoni trovate qui: http://bingmapsv7modules.codeplex.com/wikipage?title=Shape%20Toolbox%20Module

+0

Ciao Adam, questo mi sembra un commento che deve essere aggiunto come un commento alla domanda , non pubblicato come risposta. Dato che sei nuovo qui, devi diventare attivo per guadagnare un po 'più di reputazione, quindi puoi pubblicare un commento. – VKen

2

che ho avuto l'ordine di rilasciare la mia auto e ho risolto utilizzando il funzione MakeValidGeographyFromText da SQLSpatialTools ho usato in questo modo all'interno di un SP:

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

Dove @pois è una stringa contenente le coordinate in un formato valido, ma rotazione errata.

non sono sicuro di come questo è facile da integrare con EF-5, ma vedo due modi:

  1. utilizzare la funzione direttamente da C#, prima di chiamare EF con il poligono corretta.
  2. Installare sqlspatialtools sul server SQL ed eseguire l'elaborazione lì.
3

Hi Ho avuto lo stesso problema e risolto utilizzando

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

Per maggiori dettagli vedi here

Problemi correlati