Bestimmen Sie die Mindestanzahl von Polygonen aus dem Shapefile, um einen interessierenden Bereich abzudecken

10

Ich habe eine große Anzahl von Shapefiles, die Bereiche von Interesse für eine Analyse darstellen, die unter Verwendung verschiedener Quellen von Satellitenbildern (IKONOS, RapidEye usw.) durchgeführt wird. Leider verwenden die Bilder kein Pfadpflegesystem wie beispielsweise Landsat, sodass die Ausmaße sehr unterschiedlich sind.

Ich habe Shapefiles an jedem AOI abgeschnitten, die den Umfang verschiedener Bilderfassungen darstellen, die alle bereits als akzeptabel eingestuft wurden. Einige dieser Shapefiles haben 500 oder mehr Polygone.

Ich muss einen Ansatz finden, vorzugsweise einen, der automatisiert werden kann (Python und ArcInfo 10, vorzugsweise wäre auch FOSS akzeptabel), um die geringste Anzahl von Polygonen zu bestimmen, die jeden meiner Interessenbereiche abdecken.

Chad Hawkins
quelle
3
Im Allgemeinen ist dies ein schwieriges NP-Problem, daher ist wahrscheinlich eine leistungsstarke Software erforderlich. Ein Ansatz besteht darin, es als ganzzahliges lineares Programm zu gestalten: Die Polygone zerlegen den AOI in "atomare" Polygone, und jedes ursprüngliche Polygon deckt jedes atomare Polygon entweder vollständig ab oder nicht. Diese Informationen können in binären Vektoren codiert werden. Sie möchten die Anzahl solcher Vektoren minimieren, deren Summe in jeder Komponente 1 oder mehr beträgt. Beispiele zur Lösung ähnlicher Probleme finden Sie unter mathematica.stackexchange.com/a/6888 und gis.stackexchange.com/a/27678 .
whuber

Antworten:

3

Wie bereits erwähnt, wäre es schwierig, diese Art von Problem zu verallgemeinern, um eine qualitativ hochwertige Lösung zu finden, aber dieser Ansatz könnte Sie ohne viel Arbeit nahe genug bringen. Hier ist ein Pseudocode, der auf den folgenden Annahmen basiert:

  1. Interessengebiet A.
  2. Satz von Polygonen Y, die A vollständig abdecken

    Start loop
     Iterate through Y
       Select the polygon x from Y that has greatest area of intersection with A
    
     Clip A with polygon x
     Remove x from Y 
     If A is null then end program

Die Idee ist, dass Sie Ihren Interessenbereich iterativ mit der Satellitenausdehnung reduzieren, die die größte Überlappung mit dem verbleibenden Interessenbereich aufweist. Der AOI wird mit jeder Iteration kleiner, bis nichts mehr übrig ist. Dies wird wahrscheinlich keine optimale Lösung sein, sollte aber vernünftig sein und ziemlich schnell laufen.

dblanchett
quelle
0

Ok, Sie haben also Bereich A, der einen Bereich darstellt, und eine Reihe von Bildbereichen, die als Satz Y definiert werden können.

Wenn ich das richtig habe, können Sie eine Reihe verschiedener Funktionen ausführen:

  1. Beschneiden der Bildbereiche durch den Bereich A.
  2. Führen Sie eine Auswahl nach Position mithilfe der Extent-Polygone und der Option "Vollständig enthält" durch

Sie können dann die Bereiche der einzelnen Bereiche untersuchen und feststellen, ob Sie selbst auswählende Polygone haben, indem Sie eine räumliche Geometriesortierung mit ArcPy und Cursorn durchführen.

Ich hoffe das hilft.

Codebasis 5000
quelle
1
Können Sie noch näher erläutern, wie Sie die Cursor verwenden würden? Als ich hineinging, ging ich davon aus, dass es irgendwie darauf ankommen würde, aber ich konnte keine Methodik entwickeln. Ich habe darüber nachgedacht, mit den obersten n Polygonen im Bereich zu beginnen, diejenigen, die vollständig enthalten sind, aus den verbleibenden Polygonen zu entfernen und auf diese Weise weiter zu iterieren. Dies mag ein Anfang sein, aber natürlich haben die Polygone mit den größten Flächen möglicherweise keine sehr unterschiedlichen Ausmaße.
Chad Hawkins