Ich hoffe, einen Filter von Polygonen kleiner als ein bestimmtes Gebiet zu tun. kann dies mit rethinkdb erreicht werden, ohne vorher den Bereich zu berechnen?mit rethinkdb, um die Fläche eines Polygons zu berechnen
1
A
Antwort
2
Ich habe das mit einigen meiner eigenen Daten arbeiten, aber eine kleine Variation davon sollte funktionieren. Hier stelle ich eine Funktion zum Filtern zur Verfügung, die den Bereich berechnet und true
oder false
zurückgibt, abhängig davon, dass sie größer als REQ_AREA
ist. Sie könnten auch einen Index erstellen, der diese Berechnung automatisch durchführt, indem Sie eine anonyme Funktion an .createIndex('area', function(doc) { ... }
übergeben und dann eine getAll
mit diesem Index ausführen.
Die .slice
und prepend
| appending
dreht einfach die x- und y-Koordinaten für eine einfachere Multiplikationsabbildung.
Hier ist aus der ReQL Flächenberechnung wie wenn aussieht:
r.db('geography').table('area_polygons').filter((doc) => {
// Retrieve just the points of the polygon
var coords = doc('polygon').toGeojson()('coordinates').nth(0)
var x_coords = coords.map((point) => {return point.nth(0)}).coerceTo('array');
var y_coords = coords.map((point) => {return point.nth(1)}).coerceTo('array');
// Move item from beginning to end
y_coords = y_coords.append(y_coords.slice(0,1).nth(0)).deleteAt(0);
var x = r.map(x_coords, y_coords, (l, r) => { return l.mul(r) }).sum();
// Reset y and now move first x item to end
y_coords = y_coords.prepend(y_coords.slice(-1).nth(0)).deleteAt(-1);
x_coords = x_coords.append(x_coords.slice(0,1).nth(0)).deleteAt(0);
var y = r.map(x_coords, y_coords, (l, r) => { return l.mul(r) }).sum();
// Return area
return x.sub(y).div(2) > REQ_SIZE ? true : false;
})
nice =) Dank dafür! – zcaudate