2013-10-15 11 views
10

Mam listę punktów (w rzeczywistości współrzędne sklepów) i muszę ustalić, czy leżą one w określonych granicach.Jak ustalić, czy punkt współrzędnych GeoCom znajduje się w granicach

W języku C# Wiem, jak utworzyć punkt z łac & LNG

var point = new GeoCoordinate(latitude, longitude); 

Ale w jaki sposób można sprawdzić, czy ten punkt jest zawarty w prostokącie określonym przez tych dwóch punktach:

var swPoint = new GeoCoordinate(bounds.swlat, bounds.swlng); 
    var nePoint = new GeoCoordinate(bounds.nelat, bounds.nelng); 

Czy istnieje metoda klasy, której mogę użyć?

+0

Nie możesz po prostu sprawdzić, czy punkt długości/długości punktu to> = punkt sw długości/długości i <= punkt n jest długi/długi? –

+0

Potrzebujemy więcej szczegółów. Używasz http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.geolocation.geocoordinate lub http://msdn.microsoft.com/en-us/library/system.device .location.geocoordinate.aspx? – philologon

+0

Tak Używam System.Device.Location.GeoCoordinate, ale jeśli to nie jest właściwe rozwiązanie, mogę użyć czegoś innego. –

Odpowiedz

10

Jeśli używasz http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.aspx

Musisz napisać swój własny sposób, aby ten czek. Możesz zrobić to metoda rozszerzenie (Dużo środków dostępnych na Extension Methods on-line).

Wtedy jest prawie tak proste jak

public static Boolean isWithin(this GeoCoordinate pt, GeoCoordinate sw, GeoCoordinate ne) 
{ 
    return pt.Latitude >= sw.Latitude && 
      pt.Latitude <= ne.Latitude && 
      pt.Longitude >= sw.Longitude && 
      pt.Longitude <= ne.Longitude 
} 

Jest jeszcze jedna sprawa do rozważenia rogu. Powyższa metoda zakończy się niepowodzeniem, jeśli pole zdefiniowane przez sw, ne przekroczy 180-stopniową długość geograficzną. Tak więc dodatkowy kod będzie musiał zostać napisany, aby objąć ten przypadek, spowalniając w ten sposób wydajność metody.

+0

Twoje rozwiązanie nie bierze pod uwagę podczas przekraczania równika, myślę, że gdyby granice obejmujące równik nie działałyby. –

+0

W rzeczywistości przekraczanie równika nie stanowi problemu dla danego rozwiązania, ponieważ szerokości geograficzne na południe od równika są po prostu liczbami ujemnymi. Tylko przekroczenie linii 180-milowej wymaga więcej kodu. – philologon

+0

@Max Favilli Ale ja/miałem/mylę się mówiąc, że istnieje tylko jeden przypadek rogu. Jeśli twoje pudełko z długim/długim otworem obejmuje jeden z biegunów, to musi to być kolejna kontrola. Ale, co interesujące, ta sprawa nie może być reprezentowana przez podanie tylko w dwóch rogach, więc nie jest to wielkim problemem, chyba że wiesz, że musisz to uwzględnić. Jeśli potrzebujesz pudełka, które może zawierać tyczki, musisz zebrać te dwa punkty w klasie i dodać Boolean spansPole; członek. – philologon

Powiązane problemy