GeoJSON arbeiten mit Mungo/Mongodb Node.js
Ich Baue eine map die web-app mit dem MEEN-stack mit Node.js -, Express -, Mongo, Mungo-und Mapbox-api.
Bisher wurde es spannend. Die Daten, die ich anzeigen lassen möchten Polygone, die aus einem shapefile, dass Attribute zugeordnet.
Bisher habe ich es geschafft zum laden der Daten in Mongodb und konfigurieren eines Mongoose Modell mit einem schema. In der Knoten-app, die ich auf die Daten zugreifen kann, aber nicht laden Sie es in die anzeigen-api.
Bekomme ich die Fehlermeldung "Uncaught Error: Invalid GeoJSON-Objekt."
Vom inspizieren des Objekts im devtools-Konsole kann ich sehen, dass die geometrie-Datensatz ist leer. Ich nehme an, dies wird durch eine fehlerhafte Konfiguration in das schema.
Unten einen Datensatz aus der Mongodb Befehlszeile. Ich entfernte ein paar Elemente zum Schutz der Privatsphäre. Es sieht aus wie erwartet:
{
"_id" : ObjectId("56c77259336aac299181a207"),
"type" : "Feature",
"properties" : {
"TNRTPCD" : "P",
"TNRSBTPCD" : "C",
"PRCNTOWNER" : 100,
"NTRTMSTMP" : "20140908161622",
"TNRSBTPDSC" : "CLAIM",
"TRMNTNTPDS" : null,
"TAG_NUMBER" : null,
"OBJECTID" : 40495,
"NTRSRD" : "MTA_ONLINE",
"NUM_OWNERS" : 1,
"PROTECTED" : "N",
"PDTSRD" : "MTA_ONLINE",
"TNRTPDSCRP" : "Placer",
"TNRNMBRD" : 1030842,
"RVSNNMBR" : 0,
"FCODE" : null,
"TRMNTNDT" : null,
"RNHCTRS" : 20.3496,
"TTLTPCD" : "PCX"
},
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[
-121.88883540217063,
50.97489195799901,
0
],
[
-121.88883523174192,
50.97072525131302,
0
],
[
-121.8950854466247,
50.97072527980969,
0
],
[
-121.89508560169767,
50.97489198254216,
0
],
[
-121.88883540217063,
50.97489195799901,
0
]
]
]
}
}
Hier ist der code von meinem Modell-Datei:
//Claim Model
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//Schema Defined Here
var claimSchema = new Schema({
gid: Number,
tnrtpcd: String,
ttltpdsc: String,
tnrsbtpcd: String,
prcntowner: Number,
ntrtmstmp: String,
tnrsbtpdsc: String,
owner_name: String,
trmntntpds: String,
tag_number: String,
objectid: Number,
gdtdt: String,
ntrsrd: String,
claim_name: String,
num_owners: Number,
clientnum: Number,
issue_date: String,
protected: String,
pdtsrd: String,
pdttmstmp: String,
tnrtpdscrp: String,
tnrnmbrd: Number,
rvsnnmbr: Number,
fcode: String,
trmntndt: String,
rnhctrs: Number,
ttltpcd: String,
geometry: { type: [String], index: '2dsphere'}
}, { collection : 'docs' });
mongoose.model('Claim', claimSchema);
Routing scheint zu funktionieren in der app.js da bin ich auf die Daten zugreifen. Hier ist der relevante Teil des Codes in meine Datei anzeigen:
script.
L.mapbox.accessToken = 'pk.[ommited]';
//- var geojson = mongoose.model('Claim').find({'properties.CLIENTNUM': 278107});
var geojson = $.getJSON('/claims/nick',function(result){
return result;
});
L.mapbox.map('map', 'mapbox.outdoors')
.featureLayer.setGeoJSON(geojson);
Also die große Frage ist, wie kann ich richtig definieren das schema für den geometrie-Daten? Unter der Annahme, dass ist mein problem.
InformationsquelleAutor ngust | 2016-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie Verwirrung mehr "geben" als ein Feld name und "Typ", wie eine Erklärung über den Mungo-schema.
Flexibel lassen Sie ein paar GeoJSON-Typen, die Sie im Grunde wollen, dass Ihre "geometrie" Bereich:
Können Sie hinzufügen
enum
für "Point", "Polygon" etc, wenn Sie wollen, aber in der Regel eine lose "Koordinaten" als array[]
entspricht den Regeln in diesen Fällen.Etwas suchen sollten zeigen, dass die Menschen geschaffen haben "Typen" für diese vor.
InformationsquelleAutor Blakes Seven
OK hab es behoben bis jetzt. Dank Blakes Sieben für die Beratung.
Änderte ich das schema als Blakes Sieben vorgeschlagen. Ich hatte auch eine änderung der mapbox nennen, so dass es Anrufe von innerhalb der getJSON-Rückruf. Das sieht dann so aus:
Nein, ich kann die Anzeige abgefragten Daten auf der Karte!
InformationsquelleAutor ngust