5 votos

MySQL a GeoJSON - Problema de Formato

Estoy tratando de hacer un select en una tabla mysql y, a continuación, escribir a un archivo geojson. Me estoy acercando pero hay un par de problemas. He aquí lo que tengo hasta ahora:

<?php
require("dbinfo.php");

// Opens a connection to a mySQL server
$connection=mysql_connect ($hostname, $username, $password);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}

// Set the active mySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

// json output
$query = 'SELECT * FROM markers LIMIT 5';
$dbquery = mysql_query($query);
// $rows = array();
// while($r = mysql_fetch_assoc($dbquery)) {
//  $coords = $rows['lng'] . ", ";
//     // $rows[] = $r;
// }

if(! $dbquery )
{
  die('Could not get data: ' . mysql_error());
}

// Parse the dbquery into geojson 
// ================================================
// ================================================
// Return markers as GeoJSON
$geojson = array(
    'type'      => 'FeatureCollection',
    'features'  => $feature
 );

while($row = mysql_fetch_assoc($dbquery)) {
    $feature = array(
        'type' => 'Feature', 
      'geometry' => array(
        'type' => 'Point',
        'coordinates' => array($row['lng'], $row['lat'])
            ),
      'properties' => array(
            'name' => $row['name'],
        'comment' => $row['comment']
            )
        );
    array_push($geojson, $feature);
};
mysql_close($connection);

// // Return routing result
    header("Content-Type:application/json",true);
    //header("Location:map.html");
    echo json_encode($geojson);
?>

El resultado que obtengo es:

{"type":"FeatureCollection","features":null,"0":{"type":"Feature","geometry":{"type":"Point","coordinates":["-122.677811","45.569889"]},"properties":{"name":"Bear on a Box","comment":"Bear on a box."}},"1":{"type":"Feature","geometry":{"type":"Point","coordinates":["-122.653770","45.542503"]},"properties":{"name":"test","comment":"aksdhvah"}},"2":{"type":"Feature","geometry":{"type":"Point","coordinates":["-122.675400","45.515690"]},"properties":{"name":"Bike Art","comment":"Bike pile."}},"3":{"type":"Feature","geometry":{"type":"Point","coordinates":["-122.688789","45.517735"]},"properties":{"name":"Goose","comment":"lipsumLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ut urna dolor. Sed iaculis velit quis nis"}},"4":{"type":"Feature","geometry":{"type":"Point","coordinates":["-122.649132","45.513401"]},"properties":{"name":"Goose","comment":"lorem ipsum"}}}

Así, el problema es que las "características" punto de no aguantar el resto de la información como una matriz. Sigue 'null'. A continuación, aparece la posición del array está escrito en el resultado de lo que no quiero. Por último, tengo que deshacerme de las comillas alrededor de las coordenadas de modo que pueda ser leído correctamente por el Prospecto del GeoJSON constructor. Estoy agitando con matrices y probablemente no la reciben. Quiero decir, no todo lo que se inserta en una matriz tiene que estar entre comillas? Gracias de antemano por cualquier ayuda.

4voto

Evan Anderson Puntos 118832

No he sido de codificación en PHP, pero últimamente creo que simplemente no estás de capas de las estructuras de datos correctamente. Usted está empujando la $feature onto $geoson cada vez. Trate de hacer 'funciones' una matriz tal que así:

$features = array();
$geojson = array(
    'type'      => 'FeatureCollection',
    'features'  => $features
 );

A continuación, empuje cada una de las $feature in your loop onto $características en lugar de $geojson.

array_push($features, $feature);
instead of
array_push($geojson, $feature);

Las comillas. Supongo que tu lat y lon son cadenas de texto en la base de datos de manera que se ven como cadenas en su json . Usted debe ser capaz de echar a un número de punto flotante. ver http://stackoverflow.com/questions/481466/php-string-to-float

4voto

Ben Puntos 16

Yo tenía el mismo problema. Intenta esto, trabajó para mí:

$geojson = array( 'type' => 'FeatureCollection', 'features' => array() );

y cambiar el array_push a:

array_push($geojson['features'], $feature);

Saludos Henrik

1voto

Craig Puntos 111

Usted está empujando cada una de las $feature onto $geojson sin índice, mientras que teniendo ya dos índices asociativos ('tipo' y 'funciones'), de modo que cada uno va como un ordinario numéricamente indexados en el punto (0, 1, 2...). A continuación, los índices se están mostrando, ya que ahora tenemos un array asociativo en lugar de sólo una normal numérica.

Intente algo como (pseudo-código):

  1. $cuenta = array();
  2. Cada bucle: $características[] = array('tipo' => 'Característica'...
  3. $geojson['features'] = $características

Luego de su última matriz sólo tiene implícito índices numerados (que es lo que $var []) y usted no debe obtener los índices saliendo en su json_encode().

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X