Ben yakın bir şey yaşıyorum anlamaya

4 Cevap php

Ben mevcut konum enlem uzun var ve ben yerlerde bir liste var ve orada uzun lat.

Ne yapmak istiyorum ben yerlerden yakın biriyim eğer, yakın 100 m gibi bir şey olacağını anlamaya olduğunu. Ben bunun yanında olduğumu eğer sadece bilmek, bir harita göstermek istemiyorum.

Php kütüphaneleri ne tür konum / lat uzun karşılaştırma için kullanılabilir? Ya ben matematik ile bunu çözebilir?

Teşekkürler

4 Cevap

Using Longitude and Latitude to Determine Distance

This problem can be most easily solved by using spherical coordinates on the earth. Have you dealt with those before? Here's the transformation from spherical coordinates to normal rectangular coordinates, where a=latitude and b=longitude, and r is the radius of the earth:

x = r Cos[a] Cos[b]
y = r Cos[a] Sin[b]
z = r Sin[a]

Sonra nokta ürünün (notaya [p, q]) aşağıdaki özelliğini kullanacağız:

[P, q] = Uzunluk [p] * Uzunluk [q] * Cos [açı p arasındaki & q]

(...)

at least, if height isn't important to you. if you need the height and/or distance dependend on roads or walkability (is this even a word?), i think google maps would be more exact.

Bu onların küresel koordinatlar (enlem / boylam) verilen iki nokta arasındaki mesafeyi hesaplamak zor değil. Google'da "enlem boylam mesafe" için hızlı arama denklemini ortaya koymaktadır.

Anlaşılan o ki, böyle bir şey var:

acos(cos(a.lat) * cos(a.lon) * cos(b.lat) * cos(b.lon) +
     cos(a.lat) * sin(a.lon) * cos(b.lat) * sin(b.lon) +
     sin(a.lat) * sin(b.lat)) * r

burada a ve b sizin noktaları ve r dünyanın ortalama yarıçapı (6371 km).

Onların koordinatları verilen iki nokta arasındaki uzaklığı hesaplamak mümkün olduğunuzda, tüm önemli noktalara döngü isteyeceksiniz ve mevcut konum birine yakın olup olmadığını görmek.

Eğer birçok yerler varsa Ancak, (belki bir Quadtree veya benzer bir veri yapısı kullanılarak) bir mekansal arama algoritması kullanmak isteyebilirsiniz.

Ben bu sorun için yazılım kütüphaneleri ile aşina değilim. 2D uzayda söz varsa, o zaman burada aklıma gelen bazı matematik:

Bu hesaplamayı kullanarak 2D uzayda herhangi bir 2 puan mesafeyi bulabilirsiniz:

mesafe = sqrt ((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)

inwhich ^ 2 ile güçlendirilmiş 2 demektir.

böylece le'ts Eğer noktaları neighbored hangi öğrenebilirsiniz bu şekilde (burada Noktalar için basit bir sınıf tanımlamak) Nokta nesneleri bir dizi var ki:

class Point {
    protected $_x = 0;
    protected $_y = 0;

    public function __construct($x,$y) {
         $this->_x = $x;
         $this->_y = $y;
    }
    public function getX() {
         return $this->_x;
    }

    public function getY() {
    return $this->_y;
    }    

    public function getDistanceFrom($x,$y) {
        $distance = sqrt( pow($x - $this->_x , 2) + pow($y - $this->_y , 2) );
        return $distance;
    }

    public function isCloseTo($point=null,$threshold=10) {
        $distance = $this->getDistanceFrom($point->getX(), $point->getY() );
        if ( abs($distance) <= $threshold ) return true;
        return false;
    }

    public function addNeighbor($point) {
        array_push($this->_neighbors,$point);
        return count($this->_neighbors);
    }

    public function getNeighbors() {
        return $this->_neighors;
    }
}

$threshold = 100; // the threshold that if 2 points are closer than it, they are called "close" in our application
$pointList = array();
/*
 * here you populate your point objects into the $pointList array.
*/
// you have your coordinates, right?
$myPoint = new Point($myXCoordinate, $myYCoordinate);

foreach ($pointList as $point) {
   if ($myPoint->isCloseTo($point,$threshold) {
       $myPoint->addNeighbor($point);
   }
}

$nearbyPointsList = $myPoint->getNeighbors();

edit: Özür dilerim, doğrusal uzaklık formülü unutmuştu. X ve Y ekseni mesafesi değerleri her 2 tarafından desteklenmektedir edilmeli ve daha sonra bunların toplamı sqrt sonucudur. kod artık düzeltilir.

I'm not familiar with the package, but GeoClass may be useful.

Ben FreeGIS sitesinde buldum. O aradığınız oldukça ne değilse, yazılım bölümünde listelenen diğer birçok php paketleri vardı.