Использование ST_Intersects ST_Overlaps ST_within и ST_Equals одновременно - PullRequest
0 голосов
/ 05 мая 2019

В настоящее время используется 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 иногда работает, а иногда не работает ...

Действительно ценю любой совет. Спасибо.

...