Table of Contents

Spatial database :: CartoDB

Première "CartoTable"

INSERT INTO my4capitals (cartodb_id, name, the_geom) VALUES ( 0, 'Paris', ST_GeometryFromText( 'POINT(2.333 48.867)', 4326)); 
INSERT INTO my4capitals (cartodb_id, name, the_geom) VALUES ( 1, 'Bern', ST_GeometryFromText( 'POINT(7.433 46.95)', 4326));
INSERT INTO my4capitals (cartodb_id, name, the_geom) VALUES ( 2, 'Rome', ST_GeometryFromText( 'POINT(12.5 41.883)', 4326));
INSERT INTO my4capitals (cartodb_id, name, the_geom) VALUES ( 3, 'Madrid', ST_GeometryFromText( 'POINT(-3.71 40.41)', 4326));
SELECT * from my4capitals

Utilisation de la SQL API de CartoDB

La classe Connection du GeoManager précédent est maintenant remplacée par un appel à une API Web. On peut y lancer des requêtes SQL spatiales. Par exemple :

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$api_key = "2e957be5f1e9c0793ca1725aab08274a795f2c3f";
$q = "select name, ST_AsGeoJSON(the_geom) as geom from my4capitals";

$url = "http://oertz.cartodb.com/api/v2/sql?api_key=" . $api_key. "&q=" . urlencode($q);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

header("Content-type: application/json");
echo $result;
?>

TODO

  1. Adapter le géoservice Get4Capitals.php en utilisant l'API SQL de CartoDB pour afficher les 4 villes dans votre application OpenLayers (la classe FeatureCollection du GeoManager qui permet d'encoder un flux GeoJSON peut toujours être utile).
<?php
require_once 'GeoManager.php';

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$api_key = "2e957be5f1e9c0793ca1725aab08274a795f2c3f";
$q = "select name, ST_AsGeoJSON(the_geom) as geom from my4capitals";

$url = "http://oertz.cartodb.com/api/v2/sql?api_key=" . $api_key. "&q=" . urlencode($q);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);
$rows = json_decode($result)->rows;

header("Content-type: application/json");

$i = 0;
$fc = new FeatureCollection();
foreach ($rows as $row) {
    $fc->addFeature(new Feature($i++, json_decode($row->geom), array("name" => $row->name)));
}

echo json_encode($fc);

?>