Правило PostgreSQL для использования функции на полях определенного типа - PullRequest
0 голосов
/ 07 марта 2012

Я хочу запустить запрос в PostgreSQL следующим образом:

SELECT id,foo,bar,geom1,geom2 FROM mytable

Поля "geom1" и "geom2" относятся к типу "geometry".

Но то, что я хочу для вывода, это:

SELECT id,foo,bar
      ,ST_asGeoJson(transform(geom1,4326))
      ,ST_asGeoJson(transform(geom2,4326))
FROM mytable

Имя поля геометрии может быть любым. Также запросы могут иметь больше связей, чем один.

Каков наилучший способ сделать это? Я думал о системе правил в PostgreSQL. Запросы выполняются с использованием PHP / PDO.

Обновление : Я хочу переписать SQL в базе данных или в PHP. Я создаю SQL API и хочу сделать его проще для пользователей.

1 Ответ

0 голосов
/ 09 марта 2012

Я придумал это: Мой сценарий создает представление из отправленного запроса на выборку, как это:

$view = "public.myview"
$createView = "CREATE VIEW {$view} as {$q}"; // $q="select *,buffer(the_geom,1) from public.mytable"

// $createView is fired.

// By using pg_meta_data on public.myview I can get a array with
// field names and types.
// When I loop through the fields of public.myview like this:

foreach($arrayWithFields as $key=>$arr) {
        if ($arr['type']=="geometry"){
            $fieldsArr[] = "ST_asGeoJson(transform(".$key.",4326)) as ".$key;
        }
        else {
            $fieldsArr[] = $key;
        }
    }
    $sql = implode(",",$fieldsArr);
    $sql = "SELECT {$sql} FROM {$view}";

В конце представление отбрасывается.

Вывод такой:

ВЫБРАТЬ gid, id, ST_asGeoJson (transform (the_geom, 4326)) в качестве the_geom, ST_asGeoJson (transform (buffer, 4326)) в качестве буфера FROM public.myview

Этот метод, похоже, неограничивать использование функций PostGIS или SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...