Nasıl hesaplamak ve PHP / MySQL ile endeks Coğrafi veriler için bir Morton (z-index) değeri kullanılır?

1 Cevap php

Ben bir enlem / Ing koordinat ile kayıtların bir MySQL tablo, her vardır. Aramalar bir merkez noktasına göre bu veriler üzerinde yapılır ve bir yarıçap (yarıçap içinde herhangi bir kayıt döndürülür). Sorgumda içindeki mesafe hesaplamak için cosines küresel yasasını kullanarak ediyorum. Benim sorunum Geodata indeksleme (lat / Ing değerleri yüzen olarak depolanır) korkunç verimsiz olmasıdır. MySQL mekansal uzantılarını kullanarak bir seçenek değildir. Boyutu 100k etrafında setleri ile sorgu yürütmek için zaman mantıksız bir miktar alır.

Ben biraz araştırma yaptım ve bir z-index yani Morton numarasını yardımcı olabilir kullanarak gibi görünüyor. Ben ekleme üzerinde her kayıt için Morton sayısını hesaplamak ve sonra Dünya'nın yarıçapı / merkez noktası / arama yarıçapı verilen dayalı bir sınırlayıcı kutu için yüksek / düşük Morton değerini hesaplayabilirsiniz.

Ben sadece bu yüzden bu işe tamamen emin değilim, ve de ben PHP Morton sayısını hesaplayabiliriz nasıl bilmiyorum benim app oluşturmak için bu şeyler hakkında yeterli biliyorum. Bu bir bit operasyonu olabilir mi?

1 Cevap

Lütfen yarıçapı Dünya'nın büyüklüğüne göre küçük ise, o zaman muhtemelen basit 2D Pythagorus ziyade pahalı 3D küresel geometri ile alabilirsiniz. Bu yakınsanız kutuplara almak muhtemelen daha az doğrudur, bu yüzden penguenler veya kutup ayıları haritalama değil umut!

Sonra, sorun için sınırlayıcı kutuları düşünüyorum. Arama noktasının $ yarıçapı - onlar + / içinde olmalıdır biliyorum. Dereceye arama yarıçapı dönüştürmek ve enlem / boylam arama merkezinin + / tarafından tanımlanan kutunun içindeki tüm kayıtları bulmak - $ radiusindegrees.

Önce bu aramayı yapmak ve olası eşleşmeler listesi ile gelip o zaman sadece ortaya çıkan veri setinden arama kutusunun köşeleri filtre var. Eğer enlem / boylam Eğer PHP mesafe hesaplamak ve tablodaki tüm noktaları için bunu hesaplamak zorunda önleyebilirsiniz eşleşen puan geri almak. Bu mantıklı mı?

Bir kare sınırlayıcı kutunun içinde sığan her şeyi bulmak ve daha sonra istenen yarıçapı dışında olan bu noktaları filtrelemek için PHP kullanmak veritabanını kullanır.