// Anweisungen für MongoDB 5.0 // 14.2.2 Grundfunktionalität use geodb g = { "_id": 1, "name": "Flaggenmast", "geo": { "type": "Point", "coordinates": [10,11] } } db.GeoDbLand.insertOne (g) g = { "_id": 2, "name": "Steg", "geo": { "type": "LineString", "coordinates": [[4,4],[5,7],[8,8]] } } db.GeoDbLand.insertOne (g) g = { "_id": 3, "name": "Baumreihe", "geo": { "type": "MultiPoint", "coordinates": [[10,19],[12,19],[14,19]] }, "photo": { "name": "Baumreihe", "file": "img64774.jpg", "date": new Date("2021-09-15") } } db.GeoDbLand.insertOne (g) g = { "_id": 4, "name": "Wall", "geo": { "type": "LineString", "coordinates": [[1,15],[2.414,15.586],[3,17], [3.586,18.414],[5,19],[7,19]] } } db.GeoDbLand.insertOne (g) g = [ { "_id": 5, "name": "Haus", "geo": { "type": "Polygon", "coordinates": [[[9,9],[12,9],[12,10],[9,10],[9,9]]] } } , { "_id": 6, "name": "Land", "geo": { "type": "MultiPolygon", "coordinates": [[[[1,1],[19,1],[19,20],[1,20],[1,1]], [[4,5],[3,10],[7,14],[13,15],[17,12],[16,8],[13,5],[9,3],[4,5]]], [[[7,7],[12,7],[13,11],[10,13],[7,10],[7,7]]]] } } ] db.GeoDbLand.insertMany (g) db.GeoDbLand.find() db.GeoDbLand.find({}) db.GeoDbLand.find({"_id": 5}) db.GeoDbLand.find({"name": "Baumreihe"}) db.GeoDbLand.find({"_id": 5, "name": "Baumreihe"}) db.GeoDbLand.find({"photo": {"$exists": true}}) db.GeoDbLand.find({"photo.name": "Baumreihe"}) db.GeoDbLand.find({"geo.coordinates": 11}) db.GeoDbLand.find({"geo.coordinates": {"$elemMatch": {"$eq": 11}}}) db.GeoDbLand.find({"geo.coordinates": {"$elemMatch": {"$elemMatch": {"$eq": [9,9]}}}}) db.GeoDbLand.find({"_id": {"$lte": 3}}) db.GeoDbLand.find({"_id": {"$in": [1,3,5]}}) db.GeoDbLand.find({"_id": {"$gte": 2, "$lte": 4}}) db.GeoDbLand.find({"$or": [{"_id": 5}, {"name": "Baumreihe"}]}) db.GeoDbLand.find({}, {"name": 1, "geo.type": 1}) db.GeoDbLand.find({}, {"name": 1, "geo.type": 1, "_id": 0}) db.GeoDbLand.find().sort({"_id": -1}) db.GeoDbLand.find().sort({"geo.type": 1, "_id": -1}) db.GeoDbLand.updateOne({"_id": 1}, {"$set": {"name": "Fahnenmast"} }) db.GeoDbLand.updateOne({"_id": 1}, {"$set": {"foto": {"name": "flagge", "file": "img17.jpg"} } }) db.GeoDbLand.updateOne({"_id": 1}, {"$rename": {"foto": "photo"} } ) db.GeoDbLand.updateOne({"_id": 1}, {"$unset": {"photo.file": 1} } ) db.GeoDbLand.createIndex( {"name": 1} ) // 14.2.3 Räumliche Anfragen // Hier die Einfügeanweisungen aus GeoGemeindenMongoDB.txt ausführen db.GeoGemeinden.createIndex( {"geom": "2dsphere"} ) db.GeoGemeinden.getIndexes() db.GeoGemeinden.find( {"geom": {"$geoIntersects": {"$geometry": {"type": "Polygon", "coordinates": [[[8,53],[9,53],[9,54],[8,54],[8,53]]]} }}}) db.GeoGemeinden.find( {"geom": {"$geoWithin": {"$centerSphere": [ [8.008329, 53.180788], 50/40075*2*3.1415926 ]} } } ) db.GeoGemeinden.find( {"geom": {"$nearSphere": {"$geometry": {"type": "Point", "coordinates": [8.008329, 53.180788]}, "$maxDistance": 50000} } } ) // 14.2.4 Gruppierung und Aggregation db.GeoGemeinden.estimatedDocumentCount() db.GeoGemeinden.countDocuments({}) db.GeoGemeinden.countDocuments({"hektar": {"$gte": 2500}}) db.GeoGemeinden.distinct("status", {"einw19": {"$gte": 5000}}) db.GeoDbLand.aggregate ( [ { "$group": {"_id": "$geo.type", "total": {$count: {}} } } ] ) db.GeoGemeinden.aggregate ( [ { "$project": {"fläche": "$hektar", "status": 1, "einw19": 1} }, { "$match": {"fläche": {"$gte": 1000}} }, { "$group": {"_id": "$status", "einw": {"$sum": "$einw19" } } }, { "$sort": {"_id": 1} } ] ) db.GeoDbLand.aggregate ( [ { "$match": {"geo.type": "LineString"} }, { "$unwind": "$geo.coordinates" }, { "$group": { "_id": "$name", "x": {"$avg": {"$arrayElemAt":["$geo.coordinates",0]} }, "y": {"$avg": {"$arrayElemAt":["$geo.coordinates",1]} } } } db.GeoGemeinden.aggregate ( [ { "$project": {"name": 1, "geom": 1} }, { "$geoNear": { "key": "geom", "near": { "type": "Point", "coordinates": [8.008329, 53.180788] }, "maxDistance": 50000, "distanceField": "dist" } }, { "$sort": {"dist": 1} } ] ) db.GeoDbLand.mapReduce ( function() { emit( this.geo.type, 1 ) }, function(key, values) { return Array.sum(values) }, { "out": "GeomtypeCounts" } ) db.GeomtypeCounts.find() db.GeoGemeinden.mapReduce ( function() { function zValue(lat, lon, level) { var bits = 0, z = 0, mid; var minLon = -180, minLat = -90, maxLon = 180, maxLat = 90; while (bits < level) { mid = (maxLon + minLon) / 2; if (lon > mid) { z = (z << 1) + 1; minLon = mid; } else { z = (z << 1); maxLon = mid; } mid = (maxLat + minLat) / 2; if (lat > mid) { z = (z << 1) + 1; minLat = mid; } else { z = (z << 1); maxLat = mid; } bits += 2; } return z; } emit( zValue(this.geom.coordinates[0], this.geom.coordinates[1], 16), {x: this.geom.coordinates[0], y: this.geom.coordinates[1]} ); }, function(key, values) { var x = 0, y = 0; for (var i=0; i