2012-09-12 23 views
6

Pracuję z nowym Entity-Framework 5 przy użyciu typu danych przestrzennych DbGeography jako część mojego modelu do przechowywania w jednym wystąpieniu, PUNKCIE iw innym na przykład POLYGON.Jak poprawić orientację pierścienia wielokąta za pomocą C# Entity Framework 5 DbGeography Dane przestrzenne

Podczas ustawiania wartości mojego POLYGON wszystkie zapisy bez błędu, jednak jest tak tylko w przypadku, gdy rysuję wielokąt na mapie w kolejności zgodnej z ruchem wskazówek zegara. Jeśli narysuję POLGON w kierunku przeciwnym do ruchu wskazówek zegara, otrzymam błąd na poziomie sql wskazujący, że dane są nieprawidłowym typem geograficznym.

Teraz po przeprowadzeniu własnych badań nad problemem wydaje się, że typ danych geograficznych jest dość ścisły, jeśli chodzi o orientację pierścienia wielokątów. Najczęstszym rozwiązaniem wydaje się tworzenie wieloboku jako geometrii, a następnie przekształcanie go w typ geograficzny.

Szukam rozwiązania w języku C#, które można zastosować do danych przed wysłaniem do sql. Zasadniczo coś, co automatycznie koryguje orientację pierścienia tablicy współrzędnych.

Próbowałem złapać błąd, a następnie odbudować ciąg przez odwrócenie tablicy. Działa to w niektórych przypadkach, ale po pierwsze nie jest niezawodne, a po drugie, złapanie błędu jest dużym hitem wydajności.

Dzięki Chris

Odpowiedz

0

sam problem tutaj, przy użyciu Bing Maps v7 a ich kształt zestaw narzędzi do rysowania wielokątów znaleźć tutaj: http://bingmapsv7modules.codeplex.com/wikipage?title=Shape%20Toolbox%20Module

+0

Cześć Adam, to wydaje się komentarz, który powinien być dodawany jako komentarz na pytanie , nie wysłano jako odpowiedzi. Skoro jesteś tu nowy, musisz się aktywować, aby zdobyć trochę więcej reputacji, więc możesz opublikować komentarz. – VKen

2

miałem wydać rozkaz mój własny, i rozwiązać go za pomocą funkcja MakeValidGeographyFromText z SQLSpatialTools użyłem go w następujący sposób wewnątrz SP:

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

Gdzie @pois to ciąg zawierający współrzędne w poprawnym formacie, ale nieprawidłowy obrót.

nie jestem pewien, jak łatwo jest zintegrować z EF-5, ale widzę dwa sposoby:

  1. użyć funkcji bezpośrednio z C#, przed skontaktowaniem się z prawidłową EF wielokąta.
  2. Zainstaluj sqlspatialtools na serwerze SQL i wykonaj tam przetwarzanie.
3

Witam miałem ten sam problem i rozwiązać go za pomocą

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

po więcej szczegółów patrz here