El formato Json (JavaScript Object Notation) se volvio en pocos años un formato muy popular de intercambio y "manipulación" de datos.
"It is easy for humans to read and write. It is easy for machines to
parse and generate." (json.org)
En resumen, se puede considerar como una buena alternativa al XML ya que es facil de manejar y compatible con muchos lenguajes de programación....
El Json se escribe de la siguiente forma, son pares de nombres y valores, separados por coma si son varios
Ej. 1: {'nombre': 'Juan'}
Ej. 2: {'nombre': 'Juan', 'apellido': 'Torres', 'edad': 43}
Tambien se pueden escribir Arrays (coleccion de valores), entre corchetes:
Ej. 3: {'role':'admin', 'permisos': ['insert','update','delete']}
El GeoJSON no es muy diferente, pues se estructura de la misma forma, solo que puede almacenar geometrias de cualquier tipo:
Point, LineString,
Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection.
Ej. 4: { "type": "Point", "coordinates": [-90.5, 14.43] }
En fin podemos almacenar en un GeoJSON tanto geometrias como attributos:
Ej. 5: { "type": "Feature",
"geometry": {
"type": "Point", "coordinates": [-90.5, 14.43]
},
"properties": { "nombre": "Las cien puertas", "tipo": "bar"
}
}
La mayoridad de los servidores de mapas (Mapserver, GeoServer) permiten la generación de servicios en formato GeoJSON, pero a bajo les présentaré una solucion en PHP util en ciertos casos, cuando no se tiene o no se quiere un servidor de mapas por ejemplo.
<?PHP
...
...
//Request SQL en postgis para retraer los datos + las geometrias en formato GeoJSON (st_asgeojson())
$sql = "
SELECT id,
name,
st_asgeojson(the_geom) as geom FROM capas.puntos_de_interes
WHERE tipo = 'bar' ";
$res = pg_query($sql) or die(pg_last_error());
//Generacion del GeoJSON
$str = '';
$str .= '{
"type": "FeatureCollection",
"features": [';
$i = 1;
while ($result = pg_fetch_array($res)) {
$str .= '{
"geometry":'.$result['geom'].',
"id": '.$i++.',
"type": "Feature",
"properties": {
"id": "'.$result['id'].'",
"name": "'.$result['name'].'"
}
},';
}
// Ahi quito la ultima coma que esta sobrando.
$str2 = substr($str,0,strlen($str)-1);
//Cerrando el GeoJson
$str2 .= ']}';
//el GeoJSON es listo, lo imprimo con un echo
echo $str2;
?>
<?PHP
...
...
//Request SQL en postgis para retraer los datos + las geometrias en formato GeoJSON (st_asgeojson())
$sql = "
SELECT id,
name,
st_asgeojson(the_geom) as geom FROM capas.puntos_de_interes
WHERE tipo = 'bar' ";
$res = pg_query($sql) or die(pg_last_error());
//Generacion del GeoJSON
$str = '';
$str .= '{
"type": "FeatureCollection",
"features": [';
$i = 1;
while ($result = pg_fetch_array($res)) {
$str .= '{
"geometry":'.$result['geom'].',
"id": '.$i++.',
"type": "Feature",
"properties": {
"id": "'.$result['id'].'",
"name": "'.$result['name'].'"
}
},';
}
// Ahi quito la ultima coma que esta sobrando.
$str2 = substr($str,0,strlen($str)-1);
//Cerrando el GeoJson
$str2 .= ']}';
//el GeoJSON es listo, lo imprimo con un echo
echo $str2;
?>
Si no usan PostGIS y sus maravillosas funciones espaciales, tambien pueden escribir la geometria a pie, usando un campo X y un campo Y concatenados...
{ "geometry":{"type":"Point",
"coordinates":[-630285.39089697576,7275892.760403757]},
"id": 1,
"type": "Feature",
"properties": { "id": 58, "name": "las 100 puertas", "tipo":"bar" }
},
....,
....
]}
header('Content-Type: application/json');
...{ "geometry":{"type":"Point",
"coordinates":['.$result['x'].','.$result['y'].']}...
Ejemplo de mis datos en formato GeoJSON:
{ "type": "FeatureCollection", "features": [{ "geometry":{"type":"Point",
"coordinates":[-630285.39089697576,7275892.760403757]},
"id": 1,
"type": "Feature",
"properties": { "id": 58, "name": "las 100 puertas", "tipo":"bar" }
},
....,
....
]}
En fin, una buena costumbre es usar un header adecuado en mi pagina php cuando se va a generar un JSON de salida:
header('Content-Type: application/json');
Las 100 puertas... jajaja json es bueno, y geojson está buenísimo!
ResponderBorrarJajaja si, solo quisiera mencionar que las coordenadas que aparecen ahi son falsas, solo sirvieron para el ejemplo.
Borrar