Rumah >Java >javaTutorial >Bagaimana untuk Mencari Lokasi Terdekat dengan Cekap dalam SQLite Tanpa Fungsi Tersuai?
Mendapatkan Lokasi Terdekat dalam SQLite Menggunakan Formula Haversine
Menyimpan koordinat latitud dan longitud dalam pangkalan data SQLite anda membuka pelbagai kemungkinan untuk berasaskan lokasi aplikasi. Satu tugas biasa ialah mendapatkan semula lokasi terdekat ke titik tertentu berdasarkan formula Haversine. Walaupun MySQL secara asli menyokong ini dengan fungsi tersuai, SQLite memerlukan pendekatan yang lebih terlibat.
Fungsi Luar Tersuai untuk Formula Haversine
SQLite menyokong fungsi luaran tersuai untuk melaksanakan pengiraan lanjutan. Walau bagaimanapun, mencipta dan menyepadukan fungsi ini boleh memperkenalkan kerumitan yang tidak perlu dan overhed prestasi. Selain itu, mengisih hasil mengikut jarak memerlukan penambahan lajur jarak pada pangkalan data, yang kedua-duanya tidak cekap dan tidak praktikal.
Penapisan Cekap dengan Segi Empat Sempadan
Penyelesaian praktikal untuk cabaran ini melibatkan penapisan pangkalan data dengan segi empat tepat terikat. Dengan mengira empat penjuru segi empat tepat berdasarkan titik yang diberikan dan jejari yang dipratentukan, anda boleh menghapuskan kebanyakan data yang tidak berkaitan dan mengurangkan dengan ketara jumlah pemprosesan yang diperlukan. Latitud dan longitud terbitan kemudiannya boleh digunakan untuk membina klausa WHERE untuk pertanyaan SQL:
PointF center = new PointF(x, y); final double mult = 1.1; // Mult for more reliable results PointF p1 = calculateDerivedPosition(center, mult * radius, 0); PointF p2 = calculateDerivedPosition(center, mult * radius, 90); PointF p3 = calculateDerivedPosition(center, mult * radius, 180); PointF p4 = calculateDerivedPosition(center, mult * radius, 270); strWhere = " WHERE " + COL_X + " > " + String.valueOf(p3.x) + " AND " + COL_X + " < " + String.valueOf(p1.x) + " AND " + COL_Y + " < " + String.valueOf(p2.y) + " AND " + COL_Y + " > " + String.valueOf(p4.y);
Mengira Jarak Dalam Keputusan Ditapis
Setelah data ditapis, anda boleh lelaran melalui keputusan dan mengira jarak sebenar menggunakan Haversine formula:
public static boolean pointIsInCircle(PointF pointForCheck, PointF center, double radius) { if (getDistanceBetweenTwoPoints(pointForCheck, center) <= radius) return true; else return false; } public static double getDistanceBetweenTwoPoints(PointF p1, PointF p2) { // Haversine formula for calculating distance in meters // ... }
Dengan menggabungkan penapisan cekap dengan pengiraan jarak yang tepat, anda boleh mendapatkan semula lokasi terdekat daripada pangkalan data SQLite anda tanpa bergantung pada fungsi luaran tersuai atau lajur jarak berterusan.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Lokasi Terdekat dengan Cekap dalam SQLite Tanpa Fungsi Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!