I had a function in php:
//simple method with array() $sensors = array(); $query = "select id, x(transform(wkb_geometry,". $epsg . ")) as lon, y(transform(wkb_geometry,". $epsg . ")) as lat from mytable;"; $result = pg_query($query) or die('Query failed: ' . pg_last_error()); while ($row = pg_fetch_assoc($result)) { //var_dump($row); $mySensor = new sensor($row['id'],$row['lat'],$row['lon']); $sensors[] = $mySensor->geoJSON(); } echo json_encode($sensors);
which outputs:
"features": [{ "type": "Feature", "id": 1579028, "x": 4.85310557823, "y": 52.7205622103, "geometry": { "type": "Point", "coordinates": [4.85310557823, 52.7205622103], "crs": { "type": "OGC", "properties": { "urn": "urn:ogc:def:crs:OGC:1.3:CRS84" } }
Now I rewrote the array to become such an object:
//advanced method with arrayObject: class sensors extends ArrayObject { function __construct($epsg){ $query = "select id, x(transform(wkb_geometry,". $epsg . ")) as lon, y(transform(wkb_geometry,". $epsg . ")) as lat from mytable;"; $result = pg_query($query) or die('Query failed: ' . pg_last_error()); while ($row = pg_fetch_assoc($result)) { //var_dump($row); $mySensor = new sensor($row['id'],$row['lat'],$row['lon']); $this[] = $mySensor->geoJSON(); } } } $newsensors = new sensors($epsg); echo echo json_encode($newsensors);
But this changes the output to:
"features": { "0": { "type": "Feature", "id": 1579028, "x": 4.85310557823, "y": 52.7205622103, "geometry": { "type": "Point", "coordinates": [4.85310557823, 52.7205622103], "crs": { "type": "OGC", "properties": { "urn": "urn:ogc:def:crs:OGC:1.3:CRS84" } } } },
This makes it unusable as geoJSON for OpenLayers. Why does the json_encode function behave like this? Can I disable the installation of index numbers? Is this a possible small mistake?