2016-04-07 49 views
1

Pek çok konum kaydına sahip bir veritabanım var (& enlem depolama).
Yeni potansiyel kayıt geldiğinde, mevcut kayıtlardan herhangi birine 50 metre'dan daha yakınsa - bunu veritabanına eklememelidir.
Coğrafi kodlama, konum veritabanının başka konumlarına yakın olup olmadığını bilir

İki konum arasındaki mesafeyi hesaplama olanağı olduğunu biliyorum.
Fakat bunu yapabilmek için veritabanımdan tüm kayıtlarına ihtiyacım var ve döngü içinde potansiyel kaydı her mevcutla karşılaştır. Sanırım biraz zaman alacak. ve bu delta 50 metre uzaklıkta bana mesafe yarıçapı verecekti -

Ben G/azalış enlem potansiyel kaydının & boylam artırabilir bazı delta, istiyorum.

public boolean needsToBeIncluded(double newLat, double newLng) { 
     int delta = 0; 
     Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM myLocations WHERE latitude between " + (newLat - delta) + " and " + (newLat + delta) + 
       " AND longitude between " + (newLng - delta) + " and " + (newLng + delta), null); 
     return c.getCount() > 0; 
    } 

mümkün mü yoksa enlem & boylam hakkında yanlış hayal gücü var: Örneğin

, ben böyle bir şey olsun isterim? Teşekkürler.

+1

Bulunduğunuz bölgeye/bölgeye göre yaklaşık 50x50 metrelik bir ızgara veren bir delta kesinlikle alabilirsiniz, daha sonra yalnızca bu noktaları ızgara içinde kontrol etmeniz yeterlidir. –

+0

Lütfen bana daha fazla bilgi verin - bölgeye göre nasıl delta hesaplayın? Teşekkürler. –

+1

Tüm mevcut noktalarınızın min ve max 'lat' değerlerini bilmeniz gerekir, çünkü her bir lat, 'lon' değerine bakılmaksızın yaklaşık 111km'ye çevrilir; bu, her bir lon'un derecesine olan uzaklığa bağlıdır. '(yani ekvatorda daha uzun ve kutup noktasında sıfırdır). Min ve maksimum enlemlerde bir lon'un ne dereceye dönüştürüleceğine bakmak için http://www.nhc.noaa.gov/gccalc.shtml adresini kullanın. Ardından minonum deltaları 50 metrede min ve maksimum enlemlerde alabilirsiniz. İki değerden daha büyük kullanın. –

cevap

1

Konum kayıtlarınızın her birinin geohash değerini hesaplayabilirsiniz. Yer kayıtlarının önek bölümlerinin karşılaştırılması 'geohash değerleri yakınlıklarını belirlemeyi sağlar. Bu GIS Stack Exchange entry, geohashes'ı açıklamaya yardımcı olurken, bu Stack Exchange girişi, bitişik geohash hücrelerinin doğruluğunu açıklarken, iki geohash dizisinin farklılık göstermeye başladığı nokta, deltalarını belirler.

+0

Harika cevap, teşekkürler, ama aslında istediğim gibi değil. Söz konusu anlatımda anlattığım neredeyse bir yöntem olurdu - önce tüm kayıtları alın, sonra da döngüde yeni noktaya uzaklaşın. Ama bilgin bilmek çok faydalı. –

+0

Ayrıca, 50 metreye kadar olan mesafeyi belirlememe izin vermeyecekti, örneğin (3. bağlantı mesafeleri yaklaşık 19 ve 188 metredir). –