/** * @param $column * @param $latitude * @param $longitude * @param $distance * @param array $keyToInclude * * @return Collection|ParseObject[] */ public function within($column, $latitude, $longitude, $distance, $keyToInclude = []) { $location = new ParseGeoPoint($latitude, $longitude); for ($i = 0; $i < count($keyToInclude); $i++) { $this->query->includeKey($keyToInclude[$i]); } switch (config('parse.units', 'kilometers')) { case 'kilometers': $this->query->withinKilometers($column, $location, $distance); break; case 'miles': $this->query->withinMiles($column, $location, $distance); break; case 'radians': $this->query->withinRadians($column, $location, $distance); break; } return Collection::make($this->query->find($this->useMasterKey)); }
public function testGeoMaxDistance() { for ($i = 0; $i < 3; ++$i) { $obj = ParseObject::create('TestObject'); $point = new ParseGeoPoint(0.0, $i * 45.0); $obj->set('location', $point); $obj->set('id', $i); $obj->save(); } // baseline all $query = new ParseQuery('TestObject'); $point = new ParseGeoPoint(1.0, -1.0); $query->near('location', $point); $results = $query->find(); $this->assertEquals(3, count($results)); // all $query = new ParseQuery('TestObject'); $query->withinRadians('location', $point, 3.14 * 2); $results = $query->find(); $this->assertEquals(3, count($results)); // all $query = new ParseQuery('TestObject'); $query->withinRadians('location', $point, 3.14); $results = $query->find(); $this->assertEquals(3, count($results)); // 2 $query = new ParseQuery('TestObject'); $query->withinRadians('location', $point, 3.14 * 0.5); $results = $query->find(); $this->assertEquals(2, count($results)); $this->assertEquals(1, $results[1]->get('id')); // 1 $query = new ParseQuery('TestObject'); $query->withinRadians('location', $point, 3.14 * 0.25); $results = $query->find(); $this->assertEquals(1, count($results)); $this->assertEquals(0, $results[0]->get('id')); }