В настоящее время используется Grimzy Laravel MySQL Spatial, но в основном это просто преобразование его в правильные запросы SQL.
Мне нужно выяснить, пересекается ли область, пересекается ли она или находится внутри или равна или содержит многоугольник, хранящийся в БД.
public function __construct($areaPerimeterCoordinates = null)
{
$this->area = Polygon::fromJson($areaPerimeterCoordinates);
}
public function handle()
{
//this is the first query - it is working and returning result
//need to refine it to check contains/same
//$query = Property::intersects('area_perimeter', $this->area);
//working on this query - this returns empty
$query = Property::where(function($qry) {
$qry->intersects('area_perimeter', $this->area);
})->orWhere(function($qry) {
$qry->overlaps('area_perimeter', $this->area);
})->orWhere(function($qry) {
$qry->within('area_perimeter', $this->area);
})->orWhere(function($qry) {
$qry->equals('area_one_perimeter', $this->area);
})->orWhere(function($qry) {
$qry->contains('area_perimeter', $this->area);
});
$properties = $query->get();
if(!$properties->isEmpty()) {
throw new PropertyExistsException(null, $properties);
}
}
Примечание: согласно проверке первого запроса и редактированию его для использования группировок путем добавления замыкания, он также возвращает пустой. Weird
$query = Property::where(function($qry) {
$qry->intersects('area_perimeter', $this->area);
});
$properties = $query->get();//empty
Дополнительное примечание: теперь этот ST_intersect иногда работает, а иногда не работает ...
Действительно ценю любой совет. Спасибо.