PHP posta kodları arasındaki mesafeyi hesaplayarak

9 Cevap php

I grabbed a database of the zip codes and their langitudes/latitudes, etc from this This page. It has got the following fields:

ZIP, enlem, boylam, CITY, DEVLET İLÇE, ZIP_CLASS

Veriler bir metin dosyasına oldu ama ben bir MySQL tabloya takılmış. Benim sorum şimdi, nasıl ben bir kullanıcı web sitesinde girebilirsiniz iki posta kodları arasındaki mesafeyi hesaplamak için yukarıdaki alanlar yararlanabilirler mi? PHP çalışan kod takdir edilecektir

9 Cevap

Ayrıca mesafe kalk bir web hizmeti isabet deneyebilirsiniz. Başkasının ağır kaldırma yapalım.

http://www.codebump.com/services/PlaceLookup.asmx

Bu magic numbers için bazı açıklamalarla Mike'ın cevaptır. Bu some test data benim için para cezası çalışmak gibiydi:

function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

    $distance = ($radius * pi() * sqrt(
                ($point1['lat'] - $point2['lat'])
                * ($point1['lat'] - $point2['lat'])
                + cos($point1['lat'] / $deg_per_rad)  // Convert these to
                * cos($point2['lat'] / $deg_per_rad)  // radians for cos()
                * ($point1['long'] - $point2['long'])
                * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;  // Returned using the units used for $radius.
}

Bu sadece matematik ile yapılabilir ...

function calc_distance($point1, $point2)
{
    $distance = (3958 * 3.1415926 * sqrt(
    		($point1['lat'] - $point2['lat'])
    		* ($point1['lat'] - $point2['lat'])
    		+ cos($point1['lat'] / 57.29578)
    		* cos($point2['lat'] / 57.29578)
    		* ($point1['long'] - $point2['long'])
    		* ($point1['long'] - $point2['long'])
    	) / 180);

    return $distance;
}

İki nokta arasındaki büyük daire mesafeleri hesaplamak için Haversine formula göz atın. Biraz daha örnekler bulunabilir here

Haversine formül:

  • R = dünyanın yarıçapı (ortalama yarıçapı = 6,371 km)
  • Δlat = lat2-lat1
  • Δlong = long2-long1
  • a = sin ² (Δlat / 2) + cos (lat1). cos (lat2). sin ² (Δlong / 2)
  • c = 2.atan2 (√ a, √ (1-a))
  • d = R.c

(Note that angles need to be in radians to pass to trig functions).

SO soru Geospatial Coordinates and Distance in Kilometres içgörü ve bağlantılar için bkz. Mil ve kilometre arasında dönüşüm tartışıldı; Eğer mil olarak cevap almak için atlayabilirsiniz. Tartışma da dış bilgi kaynaklarına URL'leri içermektedir.

(http://williams.best.vwh.net/avform.htm) Hiç bu gibi şeyler hesaplamak için ihtiyacınız olabilir daha fazla formüller için Havacılık Formulary göz atın.

Aslında micah carrick tarafından yazılmış posta kodları arasındaki mesafe dahil bu tür bir şey, kullanım için mükemmel bir php sınıfı vardır. Ben yardımcı olabilir bunu uygulamak için adım adım bir araya getirdik. http://go.sparkfire.net/2009/09/search-by-location-miles-from-zipcode-in-php/

Zip tablosunda Eğer mesafe almak istediğiniz için iki nokta (uzun lat) koordinatlarını kapmak gerekir.

Daha sonra SQL veya PHP ile mesafe hakkını hesaplayabilirsiniz ya. Her iki yöntem de bu yazı özetlenmiştir:

http://dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

Örnekteki hesaplama zaten bu parçacığı tartışılan formüle dayanmaktadır. Bu, her iki birimde de iki nokta arasındaki mesafeyi almak sağlayacak böylece mil ve kilometre hem de toprak için yarıçapı sağlar.

Hesaplanması için yöntem, herhangi bir sihirli numaraları, yeryüzünün sadece yarıçapı içermediği için yukarıdaki linki harika!

https://developers.google.com/maps/documentation/distancematrix/ - şehir, devlet, ülke ve Postane bir coğrafi kodlama içerir.