2013-10-15 19 views
10

Noktaların bir listesini (aslında dükkanların koordinatları) aldım ve belirli sınırlar içinde olup olmadıklarını belirlemem gerekiyor. C# GeoCoordinate noktasının sınırlar içinde olup olmadığı nasıl bulunur?

ben lat & Ing

var point = new GeoCoordinate(latitude, longitude); 

bir nokta oluşturmak için biliyorum Ama konu bu bu diğer iki nokta ile tanımlanan dikdörtgenin içinde yer ise nasıl kontrol edebilirsiniz:

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

Kullanabileceğim herhangi bir sınıf yöntemi var mı?

+0

Sadece noktanızın lat/long değerinin> = sw noktasının lat/long ve <= ne noktanın lat/long olduğunu kontrol edemez misiniz? –

+0

Daha fazla ayrıntıya ihtiyacımız var. Http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.geolocation.geocoordinate veya http://msdn.microsoft.com/en-us/library/system.device kullanıyor musunuz? .location.geocoordinate.aspx? – philologon

+0

Evet, System.Device.Location.GeoCoordinate kullanıyorum, ancak bu doğru çözüm değilse, başka bir şey kullanabilirim. –

cevap

10

Eğer bu onay yapmak için kendi yöntemini yazmak zorunda kalacak http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.aspx

kullanıyorsanız. Sen (çevrimiçi Çok 'Uzatma Yöntemleri bulunan kaynakların.) Bir uzantısı yöntemi yapmak isteyebilirsiniz düşünün bir köşe durum vardır neredeyse basit

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 
} 

olarak

Sonra öyle. Sw tarafından tanımlanan kutu 180 derecelik Boylamı geçerse yukarıdaki yöntem başarısız olur. Dolayısıyla, bu vakayı kapsayacak şekilde ek kodun yazılması ve böylece yöntemin performansının yavaşlatılması gerekecektir.

+0

Sizin çözümünüz, ekvatorun sınırlarını aşarsa, ekvatorun sınırlarını aşmayacaksa, düşünmüyorum. –

+0

Ekvatorun güneyindeki enlemler basitçe negatif sayılar olduğundan, ekvatorun aslında geçişi verilen çözüm için bir problem değildir. Sadece 180 uzunluğundaki çizgiyi geçmek için daha fazla kod gerekir. – philologon

+0

@Max Favilli Ama sadece bir köşe davası olduğunu söyleyerek yanlış/yanlış. Eğer lat/long inklüzyon kutunuz kutuplardan birini kaplıyorsa, o zaman bunun bir başka kontrolüne ihtiyacı vardır. Ancak, ilginç bir şekilde, bu durum iki köşede geçerek temsil edilemez, bu yüzden bunu hesaba katmanız gerektiğini bilmediğiniz sürece büyük bir endişe değildir. Kutup içeren bir kutunuza sahip olmanız gerekiyorsa, iki noktayı bir sınıfa toplamanız ve bir Boolean spansPole eklemeniz gerekir; üyesi. – philologon

İlgili konular