Estoy tratando de crear un algoritmo similar al cuadro delimitador mínimo (aunque puede que no se parezca en nada). En este caso, el ángulo se pasará como parámetro y, dado el ángulo, necesito el rectángulo más pequeño que cubra todos mis puntos / polígonos. Hasta ahora, mi línea de pensamiento es encontrar el centro de mis puntos (algoritmo centroide), y desde allí crear dos líneas paralelas con el mismo ángulo que el ángulo del parámetro, y dos líneas más perpendiculares a ellas. Luego, utilizando la iteración, mueva estas líneas hacia afuera (en direcciones opuestas) hasta que contengan todos los puntos. Tampoco tiene que ser un cuadro de límite mínimo exacto, trabajos aproximados (supongo que dependerá del tamaño de cada paso de iteración).
Aquí está mi código hasta ahora. Ya he disuelto todos mis polígonos en uno. Luego tomo un casco convexo para reducir los vértices. Luego pongo todos los vértices en una lista, no estoy seguro si esto ayuda todavía ...
a = layer.getFeatures()
for feat in a:
geom = feat.geometry()
a = geom.convexHull()
vertexId = QgsVertexId()
vertices = []
b = a.constGet().nextVertex(vertexId)
while b[0]:
vertices.append(b[1])
b = a.constGet().nextVertex(vertexId)
Notas: En algún momento necesito pasar el ángulo de la caja. Estoy usando QGIS 3 y necesito crear esto en Python. La 'capa' de capa tiene una geometría, el polígono disuelto de todos los demás polígonos, tal vez no sea necesaria la iteración para acceder a ella.
Avíseme si debo transmitir más detalles / información.
Respuestas:
Aquí está el código completo. Contiene demasiadas líneas (mucho más de lo necesario) pero funciona. Ahora puedes limpiarlo si quieres.
En resumen, el algoritmo calcula la distancia máxima entre líneas paralelas que tienen la pendiente definida por el parámetro de rotación y pasan por los puntos. Para cada punto se creará una línea 'horizontal' y 'vertical'. Estos nombres son orientativos, ya que se definen en la posición 0 (rotación = 0). Entonces, para cada punto externo se crearán estas 2 líneas posibles y luego, iterativamente, se creará el polígono basado en los 4 externos, o dicho de otra manera, donde la distancia de las líneas paralelas es máxima.
Una última cosa: está hecho para usarse en QGIS 3.8 con hierba.
fuente