Как использовать postGIS с CakePHP 3

Мы запускаем CakePHP v3.x с базой данных Postgres. Мне нужно выбрать несколько записей, широта и долгота которых находятся на расстоянии X от другой точки. PostGIS имеет функцию, которая делает именно это но кажется, что я должен исправить необработанные запросы SQL, чтобы использовать его.

Я не прошу помощи в написании необработанного запроса, но я ищу подтверждение того, является ли подход необработанного запроса правильным способом использования этого расширения при наилучшем использовании инфраструктуры. Я искал и не нашел никаких библиотек для расширения CakePHP ORM, чтобы включить это. Возможно, есть третий вариант, о котором я не думал.

[ПРИМЕЧАНИЕ: это не работает …]
public function fetch()
{
$maxMetersAway = 10 * 1000;
$lat = $this->request->query['lat'];
$lng = $this->request->query['lng'];

$stops = $this->Stops->find('all')
->where("ST_DWithin( POINT($lng,$lat), POINT(Stops.lng,Stops.lat), $maxMetersAway")
->toArray();

$this->set(['stops'=>$stops, '_serialize' => true]);
}

4

Решение

Я получил запрос CakePHP, работающий с этим:

$stops = $this->Stops->find('all')
->where(['ST_DWithin( ST_SetSRID(ST_MakePoint(' . $longitude . ', ' . $latitude . '),4326)::geography, ST_SetSRID(ST_MakePoint(Stops.longitude, Stops.latitude),4326)::geography, ' . $maxMetersAway . ')'])
->toArray();

обновленный: Оригинал не работал с $maxMetersAway должным образом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]