diff --git a/src/app/scripts/php/libs/Filter.class.php b/src/app/scripts/php/libs/Filter.class.php index 4ac7e205..95ada6e7 100644 --- a/src/app/scripts/php/libs/Filter.class.php +++ b/src/app/scripts/php/libs/Filter.class.php @@ -180,6 +180,45 @@ public function lower($name, $than, $orEqual = false) { $this->greateOrLower($name, $than, $orEqual, "<"); } + public function geoContains(callable $template, $latitudeName, $longitudeName) { + $parent = $this->current->peek(); + + $instance = new FilterModel(); + $this->current->push($instance); + $template(); + $this->current->pop(); + + $area = $instance[0]; + if (!empty($area)) { + $latitudeName = $this->formatColumnName($parent, $latitudeName); + $longitudeName = $this->formatColumnName($parent, $longitudeName); + $parent[] = "ST_CONTAINS($area, point($latitudeName, $longitudeName))"; + } + } + + public function geoPolygon(callable $template) { + $instance = $this->current->peek(); + + $parentPoints = $this->points; + $this->points = []; + + $template(); + + $points = implode(", ", $this->points); + if (!empty($points)) { + $instance[] = "ST_GEOMFROMTEXT('POLYGON(($points))')"; + } + + $this->points = $parentPoints; + } + + private $points; + + public function geoPoint($latitude, $longitude) { + $this->points[] = "$latitude $longitude"; + } + + public function getProperty($name) { return $this->instances[$name]; } diff --git a/src/app/scripts/php/libs/Filter.xml b/src/app/scripts/php/libs/Filter.xml index 7f533f25..7549546e 100644 --- a/src/app/scripts/php/libs/Filter.xml +++ b/src/app/scripts/php/libs/Filter.xml @@ -203,6 +203,45 @@ Zda stejná hodnota má být zahrnuta ve výsledku. + + geoContains + geoContains + Volání funkce ST_CONTAINS. V těle je možné používat "filter:geoPolygon". + + latitudeName + string + Název sloupce obsahující "latitude" hodnotu záznamu. + + + + longitudeName + string + Název sloupce obsahující "longitude" hodnotu záznamu. + + + + + geoPolygon + geoPolygon + Volání funkce POLYGON. V těle je možné používat "filter:geoPoint". + + + geoPoint + geoPoint + Přidá do aktuální kolekce points nové souřadnice. + + latitude + string + Hodnota "latitude". + + + + longitude + string + Hodnota "longitude". + + + Slouží k získání dříve deklarovaného filtru. Název proměnné odpovídá názvu při deklaraci.