Wie in der akzeptierten Antwort zum Identifizieren von überlappenden Sechsecken erwähnt, bin ich verwirrt darüber, wie wir vollständig enthaltene, teilweise enthaltene oder zusammenhängende Zellen eines Polygons identifizieren können (überprüfen Sie, ob es das Polygon schneidet).
Lösung des Problems
Die Veredelung des H3 polyfill
-Ausgangs ist im Allgemeinen ein zweistufiger Prozess:
Puffern Sie bei Bedarf die polyfill
Ausgabe so, dass sie Zellen enthält, die Ihren ausgewählten Kriterien entsprechen, aber keinen Mittelpunkt innerhalb des Polygons haben. Dies ist für teilweise geschlossene oder zusammenhängende Fälle erforderlich. Die Pufferoperation kann durchgeführt werden, indem kRing(cell, 1)
für jede Zelle genommen und die Ausgabe zu einem neuen Satz hinzugefügt wird (z. B. in JS: Set(cells.flatMap(cell => kRing(cell, 1)))
).
Filtern Sie den Satz von Zellen nach den von Ihnen gewählten Kriterien. Dies erfordert möglicherweise eine externe räumliche Bibliothek mit Funktionen wie touches
oder intersects
, oder Sie müssen diese möglicherweise selbst implementieren. Im Allgemeinen würden Sie die Grenze jeder Zelle nehmen und mit Ihrem Polygon vergleichen, z
cells.filter(cell => intersects(h3ToGeoBoundary(cell), myPolygon)))
Keine Kommentare:
Kommentar veröffentlichen