İki Enlem Arasındaki Mesafe Bulmak için en hızlı Yol Uzun Puan
Ben şu anda tüm enlem ve boylam bilgileri ile mysql veritabanı hemen altında bir milyon yerleri var.
Bir nokta ve bir sorgu ile birçok nokta arasındaki mesafeyi bulmak için çalışıyorum. Özellikle 100 hit olmak istiyorum kadar hızlı bir ikinci değil.
Daha hızlı bir sorgu ya da daha hızlı bir sistem bunun için mysql dışında muhtemelen var mı? Bu sorgu kullanıyorum:
SELECT
name,
( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) )
* cos( radians(locations.lng) - radians(-71.35368)) sin(radians(42.290763))
* sin( radians(locations.lat)))) AS distance
FROM locations
WHERE active = 1
HAVING distance < 10
ORDER BY distance;
CEVAP
MyISAM
tablodaki puanGeometry
veri türleriPoint
değerleri kullanarak oluşturunBu noktalar üzerinde
SPATIAL
Bir dizin oluşturunMBRContains()
değerleri bulmak için kullanın:SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon 10 / ( 111.1 / cos(RADIANS(@lon))) , ' ' , @lat 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
veya, MySQL 5.1
ve üstü:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point (
@lon 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat 10 / 111.1
),
Point (
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
Bu puan yaklaşık kutusu (@lat /- 10 km, @lon /- 10km)
içinde seçer.
Bu aslında bir kutu, ama küresel bir dikdörtgen değil: kürenin enlem ve boylam bağlı bir bölüm. Bu düz bir dikdörtgen farklı olabilirFranz Joseph Araziama çok yakın en çok yaşadığı yerler.
Daire içinde her şeyi seçmek için ek filtre (Kare) uygulayın
Muhtemelen geçerli ek güzel, büyük daire mesafesi (büyük mesafeler için) için hesap için filtreleme
Bir şekilde hızlı, Visual Studio 2010 ...
Olan asal sayıları bulmak için en hızl...
Eğer bir bağlantı noktası bulmak için ...
Grafik İki Keyfi Tepe Noktaları Arasın...
En yüksek set bit (msb) C bir tam sayı...