/** * GeocoderBehaviorTest::testDistance() * * @return void */ public function testDistance() { $res = $this->Addresses->distance(12, 14); $expected = '6371.04 * ACOS(COS(PI()/2 - RADIANS(90 - Addresses.lat)) * COS(PI()/2 - RADIANS(90 - 12)) * COS(RADIANS(Addresses.lng) - RADIANS(14)) + SIN(PI()/2 - RADIANS(90 - Addresses.lat)) * SIN(PI()/2 - RADIANS(90 - 12)))'; $this->assertEquals($expected, $res); $this->Addresses->removeBehavior('Geocoder'); $this->Addresses->addBehavior('Geo.Geocoder', ['lat' => 'x', 'lng' => 'y']); $res = $this->Addresses->distance(12.1, 14.2); $expected = '6371.04 * ACOS(COS(PI()/2 - RADIANS(90 - Addresses.x)) * COS(PI()/2 - RADIANS(90 - 12.1)) * COS(RADIANS(Addresses.y) - RADIANS(14.2)) + SIN(PI()/2 - RADIANS(90 - Addresses.x)) * SIN(PI()/2 - RADIANS(90 - 12.1)))'; $this->assertEquals($expected, $res); $this->Addresses->removeBehavior('Geocoder'); $this->Addresses->addBehavior('Geo.Geocoder', ['lat' => 'x', 'lng' => 'y']); $res = $this->Addresses->distance('User.lat', 'User.lng'); $expected = '6371.04 * ACOS(COS(PI()/2 - RADIANS(90 - Addresses.x)) * COS(PI()/2 - RADIANS(90 - User.lat)) * COS(RADIANS(Addresses.y) - RADIANS(User.lng)) + SIN(PI()/2 - RADIANS(90 - Addresses.x)) * SIN(PI()/2 - RADIANS(90 - User.lat)))'; $this->assertEquals($expected, $res); }