2011-01-13 7 views
4

Ich habe eine riesige Liste (60 000+) von Koordinaten und ich habe keinen Weg gefunden, die äußeren Grenzen zu erkennen.Finden der äußeren Grenzen aus der Liste der zufälligen Koordinaten

Die Liste der Koordinaten ist ziemlich zufällig, aber sie definieren einen bestimmten Bereich.

Ich sollte in der Lage sein, einen Bereich zu zeichnen, indem Sie diese Liste verwenden, indem Sie OpenLayers verwenden, also sollten sie auch in Reihenfolge sein.

Dies schien relativ einfach zu brechen, aber hat sich als ziemlich schwierig erwiesen.

Was könnte der beste Ansatz für dieses Problem sein?

  • Heikki
+4

Was ist die "äußere Grenze" hier? Willst du die "konvexe Hülle" (google it) oder nur die Bounding Box? – Spacedman

+0

Convex Rumpf ist, was ich suche –

Antwort

4

Sind Sie auf der Suche nach einem convex hull?

+0

@Heikki Mustonen: Beachten Sie, dass einige der Kommentare zu dem ActiveState-Skript, mit dem Sie in Ihrer eigenen Antwort verknüpft sind, auf den Code angewendet werden können, der mit diesem verknüpft ist (was im Wesentlichen dasselbe ist). – martineau

1

Wenn Sie nur den Begrenzungsrahmen wollen, ist es einfach genug:

min_x = MAX_INT; 
min_y = MAX_INT; 
max_x = MIN_INT; 
max_y = MIN_INT; 

for p in points: 
    if p.x < min_x then min_x = p.x; 
    if p.y < min_y then min_y = p.y; 
    if p.x > max_x then max_x = p.x; 
    if p.y > max_y then max_y = p.x; 

Wenn gibt es keine einfache Äquivalent MAX_INT und MIN_INT auf Ihrer Plattform, wählen Sie einfach die erste In der Liste. Es ist möglicherweise weniger "schöner" Code, aber es ist möglicherweise auch schneller durch eine bedeutungslose Menge.

Natürlich, wenn Ihre Daten in einer signifikanten Weise bestellt wurden, könnten Sie etwas schlauer als das Iterieren über 60.000 Elemente und das Durchführen von 240k-Vergleichen machen. (Denken Sie daran, dass die Bestellung von 60k-Punkten in einer signifikanten Weise nur für diese möglicherweise nicht für sich selbst zahlen.)

+0

Das ist eine gute Idee, aber die Auflösung der Box ist nicht hoch genug. Wir müssen in der Lage sein, einen mehrdimensionalen Bereich zu definieren. –