require_once dirname(__FILE__) . '/helpers.php';
// Params
$map = get_map_path(@$_REQUEST['map']);
// Name of the layer to query
$layername = @$_REQUEST['layer'];
// Field name from where unique values are read
$field = @$_REQUEST['field'];
if (!$field) {
    err500('field parameter missing');
}
// Get project
$project = get_project($map);
// Get layer
$layer = get_layer($layername, $project);
try {
    $dbh = get_connection($layer, $project, $map);
    $ds_parms = get_layer_info($layer, $project);
    $_field = preg_replace('/[^A-z0-9_-]]/', '', $field);
    $stmt = $dbh->prepare("SELECT DISTINCT {$_field} FROM {$ds_parms['table']} ORDER BY {$_field}");
    $stmt->execute();
    while ($row = $stmt->fetchColumn()) {
        $result[] = $row;
    }
    $json_result = json_encode($result);
    header('Content-type: application/json');
    header('Content-length: ' . strlen($json_result));
    echo $json_result;
    exit;
} catch (PDOException $e) {
    err500('db error: ' . $e->getMessage());
}
Example #2
0
/**
 * Get connection from layer
 */
function get_connection($layer, $project, $map_path)
{
    $ds_parms = get_layer_info($layer, $project);
    if ($ds_parms['provider'] == 'postgres') {
        $PDO_DSN = "pgsql:host={$ds_parms['host']};port={$ds_parms['port']};dbname={$ds_parms['dbname']}";
    } else {
        // Spatialite
        // Calculate directory
        $dbpath = preg_replace("/'?([^']+)'?/", '\\1', $ds_parms['dbname']);
        if ($dbpath[0] != DIRECTORY_SEPARATOR) {
            $dbpath = dirname($map_path) . DIRECTORY_SEPARATOR . $dbpath;
        }
        if (!file_exists($dbpath)) {
            err500('sqlite fle not found.');
        }
        $PDO_DSN = "sqlite:{$dbpath}";
    }
    try {
        $dbh = new PDO($PDO_DSN, @$ds_parms['user'], @$ds_parms['password']);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        err500('db error: ' . $e->getMessage());
    }
    if ($ds_parms['provider'] == 'spatialite') {
        try {
            $sql = "SELECT load_extension('libspatialite.so');";
            $stmt = $dbh->prepare($sql);
            $stmt->execute();
        } catch (PDOException $e) {
            err500('db error loading spatialite: ' . $e->getMessage());
        }
    }
    return $dbh;
}