csf csf - 5 months ago 19
JSON Question

Read Json and format as GeoJSON in Javascript

I'm reading a JSON file and formatting for GeoJSON

function getAddress(id,search,vagas, next) {
geo.geocode({address:search}, function (results,status)
{
if (status == google.maps.GeocoderStatus.OK) {
$scope.go = false;
var latlng = results[0].geometry.location;
var objSuccess =
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
latlng.lng(), latlng.lat()
]
},
"properties": {
"id": id,
"endereco" : search,
"vagas" : vagas
}
}
]
};

$scope.success.push(objSuccess);
console.log(objSuccess);
$scope.geocodes=true;
$scope.$apply();
}
else {
// === se houver over_query_limit error dá o delay e segue do próximo address
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
nextAddress--;
console.log("over_query_limit:"+nextAddress);
delay++;
} else {
//alert("Error:"+status);
var objError= {
Id:id,
Endereco: search,
Erro: status
}
$scope.error.push(objError);
if ($scope.error.length >1){
$scope.errors=true;
}
$scope.$apply();
}
}
next();
}
);
}


Output:The header type featureCollection repeats. I need to create the header before and after only go adding features. Does anyone have an example of how I can do this in JavaScript?

{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-51.21582910000001,
-30.0331466
]
},
"properties":{
"id":3,
"endereco":"Av. Osvaldo Aranha, n° 632",
"vagas":18
}
}
]
},
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-51.2141699,
-30.0338833
]
},
"properties":{
"id":4,
"endereco":"Av. Osvaldo Aranha, n° 806",
"vagas":17
}
}
]
},
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-51.21328779999999,
-30.0343426
]
},
"properties":{
"id":5,
"endereco":"Av. Osvaldo Aranha, n° 908",
"vagas":14
}
}
]
},
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-51.212449600000014,
-30.0348684
]
},
"properties":{
"id":6,
"endereco":"Av. Osvaldo Aranha, n° 1004",
"vagas":12
}
}
]
},
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-51.21169850000001,
-30.0352397
]
},
"properties":{
"id":7,
"endereco":"Av. Osvaldo Aranha, n° 1092",
"vagas":17
}
}
]
},
........

Answer

Create your object outside of the iterator and add the header first:

var objSuccess = {}
var objSuccess["type"] = "FeatureCollection"
var objSuccess["features"] = []

Then for adding new features to the object, make it so your getAddress function returns an object like this on success:

            {
                "type": "Feature",
                "geometry": {
                     "type": "Point",
                    "coordinates": [
                      latlng.lng(), latlng.lat()
                    ]
                },                         
                "properties": {
                  "id": id,
                  "endereco" : search,
                  "vagas" : vagas
                }
            }

Then run that instead, pushing what it returns into objSuccess.

Edit: This has been solved, but just clarifying to other users that I meant push the return value of the function into objSuccess["features"]. My apologies for any confusion

Hope this helps. :)

Comments