Ejemplo n.º 1
0
 /**
  * Compute distance (in radians) to a geo point
  *
  * @param GeoPoint $point Other geo point
  * @return number
  */
 public function radiansTo(GeoPoint $point)
 {
     $d2r = M_PI / 180.0;
     $lat1rad = $this->getLatitude() * $d2r;
     $lon1rad = $this->getLongitude() * $d2r;
     $lat2rad = $point->getLatitude() * $d2r;
     $lon2rad = $point->getLongitude() * $d2r;
     $deltaLat = $lat1rad - $lat2rad;
     $deltaLon = $lon1rad - $lon2rad;
     $sinLat = sin($deltaLat / 2);
     $sinLon = sin($deltaLon / 2);
     $a = $sinLat * $sinLat + cos($lat1rad) * cos($lat2rad) * $sinLon * $sinLon;
     $a = min(1.0, $a);
     return 2 * asin(sqrt($a));
 }
Ejemplo n.º 2
0
 /**
  * @covers GeoPoint::getLongitude
  */
 public function testGetLongitude()
 {
     $this->assertSame($this->lonDegrees, $this->instance->getLongitude());
     $this->instance->setOutputFormat(GeoPoint::RADIANS);
     $this->assertSame($this->lonRad, $this->instance->getLongitude());
 }
 public function addNearCondition($field, GeoPoint $point, $booleanOperator = 'AND')
 {
     if ($point->hasAllDistances()) {
         $prepared = ['$near' => ['$geometry' => ['type' => 'Point', 'coordinates' => [$point->getLatitude(), $point->getLongitude()]]], '$minDistance' => $point->getMinDistance(), '$maxDistance' => $point->getMaxDistance()];
     } else {
         if ($point->hasMaxDistance()) {
             $prepared = ['$near' => ['$geometry' => ['type' => 'Point', 'coordinates' => [$point->getLatitude(), $point->getLongitude()]]], '$maxDistance' => $point->getMaxDistance()];
         } else {
             if ($point->hasMinDistance()) {
                 $prepared = ['$near' => ['$geometry' => ['type' => 'Point', 'coordinates' => [$point->getLatitude(), $point->getLongitude()]]], '$minDistance' => $point->getMinDistance()];
             } else {
                 $prepared = ['$near' => ['$geometry' => ['type' => 'Point', 'coordinates' => [$point->getLatitude(), $point->getLongitude()]]]];
             }
         }
     }
     $this->addRawCondition($field, $prepared, $booleanOperator);
 }