@@ -4554,19 +4554,37 @@ public function getType(string $table): string
4554
4554
return $ this ->reflection ->getType ($ table );
4555
4555
}
4556
4556
4557
- private function getGeometryColumnName (string $ tableName , string $ geometryParam ): string
4557
+ private function getGeometryColumnName (string $ tableName , array & $ params ): string
4558
4558
{
4559
+ $ geometryParam = isset ($ params ['geometry ' ]) ? $ params ['geometry ' ][0 ] : '' ;
4559
4560
$ table = $ this ->reflection ->getTable ($ tableName );
4561
+ $ geometryColumnName = '' ;
4560
4562
foreach ($ table ->getColumnNames () as $ columnName ) {
4561
4563
if ($ geometryParam && $ geometryParam != $ columnName ) {
4562
4564
continue ;
4563
4565
}
4564
4566
$ column = $ table ->getColumn ($ columnName );
4565
4567
if ($ column ->isGeometry ()) {
4566
- return $ columnName ;
4568
+ $ geometryColumnName = $ columnName ;
4569
+ break ;
4567
4570
}
4568
4571
}
4569
- return "" ;
4572
+ if ($ geometryColumnName ) {
4573
+ $ params ['mandatory ' ][] = $ tableName . ". " . $ geometryColumnName ;
4574
+ }
4575
+ return $ geometryColumnName ;
4576
+ }
4577
+
4578
+ private function setBoudingBoxFilter (string $ geometryColumnName , array &$ params )
4579
+ {
4580
+ $ boundingBox = isset ($ params ['bbox ' ]) ? $ params ['bbox ' ][0 ] : '' ;
4581
+ if ($ boundingBox ) {
4582
+ $ c = explode (', ' , $ boundingBox );
4583
+ if (!isset ($ params ['filter ' ])) {
4584
+ $ params ['filter ' ] = array ();
4585
+ }
4586
+ $ params ['filter ' ][] = "$ geometryColumnName,sin,POLYGON(( $ c [0 ] $ c [1 ], $ c [2 ] $ c [1 ], $ c [2 ] $ c [3 ], $ c [0 ] $ c [3 ], $ c [0 ] $ c [1 ])) " ;
4587
+ }
4570
4588
}
4571
4589
4572
4590
private function convertRecordToFeature ( /*object*/ $ record , string $ geometryColumnName )
@@ -4581,11 +4599,9 @@ private function convertRecordToFeature( /*object*/$record, string $geometryColu
4581
4599
4582
4600
public function _list (string $ tableName , array $ params ): FeatureCollection
4583
4601
{
4584
- $ geometryParam = isset ($ params ['geometry ' ]) ? $ params ['geometry ' ][0 ] : '' ;
4585
- $ geometryColumnName = $ this ->getGeometryColumnName ($ tableName , $ geometryParam );
4586
- $ params ['mandatory ' ][] = $ tableName . ". " . $ geometryColumnName ;
4602
+ $ geometryColumnName = $ this ->getGeometryColumnName ($ tableName , $ params );
4603
+ $ this ->setBoudingBoxFilter ($ geometryColumnName , $ params );
4587
4604
$ records = $ this ->records ->_list ($ tableName , $ params );
4588
-
4589
4605
$ features = array ();
4590
4606
foreach ($ records ->getRecords () as $ record ) {
4591
4607
$ features [] = $ this ->convertRecordToFeature ($ record , $ geometryColumnName );
@@ -4595,9 +4611,8 @@ public function _list(string $tableName, array $params): FeatureCollection
4595
4611
4596
4612
public function read (string $ tableName , string $ id , array $ params ): Feature
4597
4613
{
4598
- $ geometryParam = isset ($ params ['geometry ' ]) ? $ params ['geometry ' ][0 ] : '' ;
4599
- $ geometryColumnName = $ this ->getGeometryColumnName ($ tableName , $ geometryParam );
4600
- $ params ['mandatory ' ][] = $ tableName . ". " . $ geometryColumnName ;
4614
+ $ geometryColumnName = $ this ->getGeometryColumnName ($ tableName , $ params );
4615
+ $ this ->setBoudingBoxFilter ($ geometryColumnName , $ params );
4601
4616
$ record = $ this ->records ->read ($ tableName , $ id , $ params );
4602
4617
return $ this ->convertRecordToFeature ($ record , $ geometryColumnName );
4603
4618
}
0 commit comments