2016-04-19 4 views
0

Hie, ich versuche, ein Geojson-Objekt aus einem Array von Objekten zu erstellen. Ich verwende einen $.each() durch das Array zu durchlaufen und zu versuchen, eine Anordnung des Objekts zurückzukehren i kendofeatures genannt (a GeoJSON Objekt) so etwas wie dieses:

kendofeatures.type = "Feature"; 
    kendofeatures.properties = { 
     "id": _id, 
     "Id": _id, 
     "FaultType": _faulttype, 
     "EntryGUID": _entryguid, 
     "Date": _datcaptured, 
     "Status": _status, 
     "Area": _area, 
     "Zone": _zones, 
     "Latitude": _latutude, 
     "Longitude": _longitude, 
     "Comments": _comments, 
     "User": _fullname, 
     "UserID": _idnumber, 
     "UserPhone": _phonenumber, 
     "UserMail": _email 
    }; 
    kendofeatures.geometry = { 
     "type": "Point", 
     "coordinates": [ 
      _latutude, 
      _longitude 
     ] 
    }; 

der Code ich etwas bin mit sieht wie folgt aus:

function displayFilterResults() { 
var kendofeatures = {}; 
var dataSource = $("#grid").data("kendoGrid").dataSource; 
console.log(dataSource); 
// TODO:Gets the filter from the dataSource 
var filters = dataSource.filter(); 
console.log(filters); 
// TODO:Gets the full set of data from the data source 
var allData = dataSource.data(); 
console.log(allData); 
// TODO:Applies the filter to the data 
var query = new kendo.data.Query(allData); 
console.log(query); 
var filteredData = query.filter(filters).data; 
console.log(filteredData); 
var geoJsonObject = { 
    "type": "FeatureCollection", 
    "features": [] 
}; 
$(filteredData).each(function (index, item) { 

    var _area = item.Area; 
    var _email = item.C_Email; 
    var _fullname = item.C_FullName; 
    var _idnumber = item.C_IDNumber; 
    var _phonenumber = item.C_MobileNumber; 
    var _comments = item.Comments; 
    var _datcaptured = item.DateTimeCaptured; 
    var _faulttype = item.FaultType; 
    var _id = item.Id; 
    var _entryguid = item.RecordID; 
    var _reportedvia = item.ReportedVia; 
    var _status = item.Responce; 
    var _latutude = item.XCoordinate; 
    var _longitude = item.YCoordinate; 
    var _zones = item.Zone; 

    kendofeatures.type = "Feature"; 
    kendofeatures.properties = { 
     "id": _id, 
     "Id": _id, 
     "FaultType": _faulttype, 
     "EntryGUID": _entryguid, 
     "Date": _datcaptured, 
     "Status": _status, 
     "Area": _area, 
     "Zone": _zones, 
     "Latitude": _latutude, 
     "Longitude": _longitude, 
     "Comments": _comments, 
     "User": _fullname, 
     "UserID": _idnumber, 
     "UserPhone": _phonenumber, 
     "UserMail": _email 
    }; 
    kendofeatures.geometry = { 
     "type": "Point", 
     "coordinates": [ 
      _latutude, 
      _longitude 
     ] 
    }; 
    console.log(kendofeatures); 
    geoJsonObject.features.push(kendofeatures); 

}); 
console.log(geoJsonObject); 

}

anstelle eines Arrays mit unterschiedlichen Eigenschaften in Objekten filteredData, featureCollection wird in einer Anordnung von dem gleichen Objekt mit den gleichen Eigenschaften ergibt, Geometrie usw. Meine Frage ist, wie ich die gewünschte featureCollection zurückgeben kann. so dass meine geoJsonObject kann etwas wie folgt aussehen:

{ 
"type": "FeatureCollection", 
"features": [ 
    { 
     "type": "Feature", 
     "properties": { 
      "id": 1, 
      "Id": 1, 
      "FaultType": "Sewer Burst", 
      "EntryGUID": "0ectey-yu78ee7e-01", 
      "Date": "2016/04/01", 
      "Status": "Assigned", 
      "Area": "Senga", 
      "Zone": "Residential", 
      "geometry": { 
       "type": "Point", 
       "coordinates": [ 
     24.960937499999996, 
     11.178401873711785 
    ] 
      } 
     }, 
     { 
      "type": "Feature", 
      "properties": {}, 
      "geometry": { 
       "type": "Point", 
       "coordinates": [ 
     30.585937499999996, 
     -19.642587534013032 
    ] 
      } 
     }, 
     { 
      "type": "Feature", 
      "properties": { 
       "id": 2, 
       "Id": 2, 
       "FaultType": "Water Burst", 
       "EntryGUID": "0ectey-yu78yre7e-01", 
       "Date": "2016/02/01", 
       "Status": "Closed", 
       "Area": "CBD", 
       "Zone": "CBD", 
      }, 
      "geometry": { 
       "type": "Point", 
       "coordinates": [ 
     24.43359375, 
     -9.535748998133627 
    ] 
      } 
     }, 
     { 
      "type": "Feature", 
      "properties": { 
       "id": 3, 
       "Id": 3, 
       "FaultType": "Pot Hole", 
       "EntryGUID": "07yye54y-yu78ee7e-01", 
       "Date": "2016/03/21", 
       "Status": "Unassigned", 
       "Area": "Riverside", 
       "Zone": "Residential", 
      }, 
      "geometry": { 
       "type": "Point", 
       "coordinates": [ 
     45.439453125, 
     -17.476432197195518 
    ] 
      } 
     } 
     ] 
} 

filteredData wie folgt aussieht:

   [ 
       { 
        Area: "Senga" 
        C_Email: "[email protected]" 
        C_FullName: "Takudzwa Kain Mawarire" 
        C_IDNumber: "29-279485 B 27" 
        C_MobileNumber: "+263779960053" 
        Comments: "Main hole burst near the far end" 
        DateTimeCaptured: Fri Apr 15 2016 01: 14: 40 GMT + 0200(South Africa Standard Time) 
        FaultType: "Sewer Burst" 
        Id: 1 
        RecordID: "a63c8656-437c-4d7a-9fe3-dad5edf73e08" 
        ReportedVia: "Web Application" 
        Responce: "Assigned" 
        XCoordinate: 29.8395538 
        YCoordinate: 
         -19.51572 
        Zone: "Institution" 
       }, 
       { 
        Area: "Senga" 
        C_Email: "[email protected]" 
        C_FullName: "Takudzwa Kain Mawarire" 
        C_IDNumber: "29-279485 B 27" 
        C_MobileNumber: "+263779960053" 
        Comments: "Sewer burst near football pitch" 
        DateTimeCaptured: Fri Apr 15 2016 23: 58: 40 GMT + 0200(South Africa Standard Time) 
        FaultType: "Sewer Burst" 
        Id: 2 
        RecordID: "c776808c-3f09-4221-99e6-11a44bcec692" 
        ReportedVia: "Web Application" 
        Responce: "Unassigned" 
        XCoordinate: 29.8392315 
        YCoordinate: 
         -19.5195084 
        Zone: "Institution" 
       }, { 
        Area: "Senga" 
        C_Email: "[email protected]" 
        C_FullName: "Takudzwa Kain Mawarire" 
        C_IDNumber: "29-279485 B 27" 
        C_MobileNumber: "+263779960053" 
        Comments: "Water bleading from the ground" 
        DateTimeCaptured: Sat Apr 16 2016 01: 18: 08 GMT + 0200(South Africa Standard Time) 
        FaultType: "Water Pipe Burst" 
        Id: 7 
        RecordID: "aff0ece0-b084-4031-8cc8-43ca66f6adb5" 
        ReportedVia: "Web Application" 
        Responce: "Closed" 
        XCoordinate: 29.8388252 
        YCoordinate: 
         -19.5002327 
        Zone: "Institution" 
       } 

      ] 

Antwort

0

Verschieben featureCollection = []; außerhalb der jeder Schleife. Sie möchten mit einem leeren Array vor der Schleife beginnen und dann während einer Iteration ein Objekt auf dieses Array schieben.

var featureCollection = []; 

$(filteredData).each(function(index, item) { 
    var kendofeatures = {}; 
    // ... 
    featureCollection.push(kendofeatures); 
}); 

var geoJsonObject = { 
    "type": "FeatureCollection", 
    "features": featureCollection 
}; 

Oder Ihre geoJsonObject zunächst definieren, und dass direkt in der Schleife verwenden:

var geoJsonObject = { 
    "type": "FeatureCollection", 
    "features": [] 
}; 

$(filteredData).each(function(index, item) { 
    var kendofeatures = {}; 
    // ... 
    geoJsonObject.features.push(kendofeatures); 
}); 
+0

i in vergeblich versucht, dass ich immer noch die gleichen Ergebnisse zu erhalten, das Problem bleibt, habe ich die Frage bearbeitet zu überlegen, was du gerade vorgeschlagen hast –

+1

Du hast 'kendofeatures' aus der Schleife entfernt. Das wollen Sie in der Schleife, damit bei jeder Iteration ein neues Kendo-Objekt erstellt wird. Ansonsten überschreibst du es einfach jedes Mal. – Quantastical

+0

Ohhhh, danke. Ich schätze deine Hilfe sehr, ich habe es nicht einmal bemerkt, jus reran das Skript und ich bekomme genau das richtige Ergebnis –

Verwandte Themen