Güncelleme için
Teşekkür: - Google Maps API kullanarak mevcut tüm kasaba ile
Döngü ben http://www.mullie.eu/geographic-searches/
bu spesifik konuda daha detaylı bir blog yayınını yukarı yazdım Enlemlerini & boylamı getir. Bunları bir yere kaydedin (veritabanı). - Dikkat edin, Google çok fazla sayıda çağrı kabul etmeyecek, bu yüzden aramalarınızı kısın.
- Kendi veritabanı: Yukarıdaki kodu hakkında
public static function getNearby($lat, $lng, $type = 'cities', $limit = 50, $distance = 50, $unit = 'km')
{
// radius of earth; @note: the earth is not perfectly spherical, but this is considered the 'mean radius'
if ($unit == 'km') $radius = 6371.009; // in kilometers
elseif ($unit == 'mi') $radius = 3958.761; // in miles
// latitude boundaries
$maxLat = (float) $lat + rad2deg($distance/$radius);
$minLat = (float) $lat - rad2deg($distance/$radius);
// longitude boundaries (longitude gets smaller when latitude increases)
$maxLng = (float) $lng + rad2deg($distance/$radius/cos(deg2rad((float) $lat)));
$minLng = (float) $lng - rad2deg($distance/$radius/cos(deg2rad((float) $lat)));
// get results ordered by distance (approx)
$nearby = (array) FrontendDB::getDB()->retrieve('SELECT *
FROM table
WHERE lat > ? AND lat < ? AND lng > ? AND lng < ?
ORDER BY ABS(lat - ?) + ABS(lng - ?) ASC
LIMIT ?;',
array($minLat, $maxLat, $minLng, $maxLng, (float) $lat, (float) $lng, (int) $limit));
return $nearby;
}
Notlar: Bir kasaba getirirken
Ardından, belirli bir aralık Withing şehirler kapmak için aşağıdaki koda benzer bir kod kullanabilirsiniz Sarıcı kullanılır, bu nedenle mysql_query, PDO, ... 'ya dönüşür.
- Bu tam olarak doğru olmaz. DB'deki kesin hesaplamaları yapamayız, bu nedenle üst & alt enlemi & boylam limitlerini aldık. Bu temel olarak, mesafenizden biraz daha uzak olan bir konum anlamına gelir (örneğin, gerçek yarıçapın hemen dışında, uzak yarıçapın hemen hemen dışında), fakat yine de maksimum enlemi & boylam içinde (çünkü . o Bu sadece Yarıçapınızı withing şehirlerin kaba ama somun% 100 doğru seçim verecektir) veritabanında sınırlarını kare
bu durumu gösteren çalışacağım.
_________________
| /\ |
| Y/ \ |
|/ \ |
|( X )|
| \ /|
| \ / |
|______\_/______|
yukarıda daire (biraz), X konumuna bağlı olarak, içinde konum bulmak istediğiniz gerçek yarıçaptır. Bu, DB'nizden doğrudan elde etmek için çok zor, Yani DB'den aldığımız şey çevredeki karedir. Görebildiğiniz gibi, (Y) gibi konumların, gerçekte istenen yarıçapa sahip olmadıkları halde, bu max & min sınırlarının içine düşmesi mümkündür. Bunlar daha sonra PHP ile filtrelenebilir.
Bu son sayının üstesinden gelmek için, tüm sonuçları döngüden geçirebilir ve gerçekte kendi yarıçapınızın içinde olup olmadıklarını hesaplamak için hem kök konumunuz hem de bulunan eşleşmeler arasındaki tam mesafeyi hesaplayabilirsiniz. kaba db geçmek konum X ve konumu Y arasındaki
public static function getDistance($lat1, $lng1, $lat2, $lng2, $unit = 'km')
{
// radius of earth; @note: the earth is not perfectly spherical, but this is considered the 'mean radius'
if ($unit == 'km') $radius = 6371.009; // in kilometers
elseif ($unit == 'mi') $radius = 3958.761; // in miles
// convert degrees to radians
$lat1 = deg2rad((float) $lat1);
$lng1 = deg2rad((float) $lng1);
$lat2 = deg2rad((float) $lat2);
$lng2 = deg2rad((float) $lng2);
// great circle distance formula
return $radius * acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($lng1 - $lng2));
}
Bu (quasi) hesaplar kesin mesafeyi ve sonra yeterince yakın olduğunu tam olarak bu şehirler filtreleyebilirsiniz: Bunun için, bu kodu kullanabilirsiniz -Topak, ama sadece sınırların içinde olmak için yeterince yakın değil.
Bir kaç umut vaat eden Soru ve Cevap: http://stackoverflow.com/search?q=radius+search+google+maps+php - hangileri kontrol ettiniz ve neden sorununuzu çözmenize yardımcı olmadılar? – Gordon
Bunlara bir göz atacağım, soruyu yazarken önerilen mesajlara baktım ama çok yararlı şeyler görmedim. Royal Mail aptalca para ödemeden İngiltere posta kodu veritabanını nereden bulabileceğimi biliyor musun? Ben wikileaks yayımladı ama bu 2009 yılında tam olarak güncel değil –
hiçbir fikrim yok, üzgünüm diye bir makale gördüm. Hızlı bir google, https://www.ordnancesurvey.co.uk/opendatadownload/products.html adresini oluşturdu ancak bunların ücretsiz olup olmadığını bilmiyor. – Gordon