2016-05-10 8 views

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; 
}) 
+0

nice =) Dank dafür! – zcaudate

Verwandte Themen