6 votos

Aumentar el área de cada polígono a la misma área

enter image description here Estoy utilizando ArcGIS Desktop 10.2.

Tengo muchos polígonos (edificios) con varias áreas y quiero la misma área para todos mis polígonos: 100m². El objetivo final es agregarlos y construir la aglomeración urbana.

Estaba pensando en crear un buffer con un valor para cada polígono y usar el valor del campo para generar el buffer, pero el reto es encontrar el valor.

2 votos

Por favor, añada una captura de pantalla de los polígonos

3 votos

Aunque teóricamente es posible, podría tomar días de CPU para iterar a través de todos los posibles valores de radio. Sería mucho más sencillo construir un rectángulo, un cuadrado, un círculo u otro polígono regular en el centro de la forma original. Por favor, editar la pregunta para proporcionar más información sobre sus requisitos y lo que ha intentado. Un par de docenas de líneas de código Python no serían inapropiadas.

2 votos

Si muestra una imagen, será más fácil entender la imagen completa.

3voto

FelixIP Puntos 4035

Similar a esta pregunta su tarea no tiene solución analítica. Afortunadamente, se puede encontrar una estimación precisa numéricamente a través de iteraciones y utilizando técnicas de búsqueda de raíces.

Cree una copia de sus edificios, llámela "polígonos" en la tabla de contenido mxd activa y ejecute este script:

import arcpy
target,tolerance=500,0.001
maxR=pow(target/3.141593,0.5)

mxd = arcpy.mapping.MapDocument("CURRENT")
buffers = arcpy.mapping.ListLayers(mxd,"POLYGONS")[0]
with arcpy.da.UpdateCursor(buffers,"SHAPE@") as cursor:
    for i,row in enumerate(cursor):
        shp=row[0]; area=shp.area
        arcpy.AddMessage('Processing polygon No %i'%i)
        if area>=target:continue
        low,high=0,maxR
        while True:
            middle=0.5*(low+high)
            newPgon=shp.buffer(middle)
            if (high-low)<tolerance: break
            curArea=newPgon.area
            if curArea<target:low=middle
            else:high=middle
        cursor.updateRow((newPgon,))

SALIDA:

enter image description here

Nota: es necesario modificar el valor objetivo, por ejemplo, cambiarlo a 100. Script probado en shapefile, usted tiene que iniciar la sesión de edición, si "polígonos" almacenados en la base de datos, por lo que ArcGIS será capaz de volver a calcular Shape_Area campo. La precisión de la solución sólo depende de la capacidad de ArcGIS para calcular el búfer.

Se necesitó menos de 2 segundos para completar la tarea para 95 polígonos mostrados en mi muy viejo PC.

2voto

5ulo Puntos 186

Puede utilizar el siguiente algoritmo:

Pasos:
1) recorrer todos los polígonos, obtener el área del polígono x .
2) comprobar si está por debajo o por encima de los 100m2.
3) utilice el código python en el siguiente enlace para aumentar la escala de su polígono con una porción muy pequeña como :

scale_geom(some_geom, 0.01)  

¿Existe una herramienta de ArcPy para cambiar el tamaño de los polígonos como la herramienta de Escala de la barra de herramientas de Edición Avanzada en ArcMap?

4) Compruebe el área de la geometría escalada devuelta por la función anterior, entonces tendrá el valor de cuántos m2 por 0,01 %.

5) una vez que sepas cuántos m2 por cada 0,01%, puedes hacer los cálculos para obtener cuántos m2 y porcentaje se necesitan para escalar el polígono hasta alcanzar el área de 100m2 .

6) llamar a la función scale_geom con el porcentaje de escala (ya sea por +ve o -ve ) necesario y voila la geometría devuelta.

NB:

  • Para obtener el número más cercano de 100m2, puede ser necesario aumentar el decimal y el porcentaje. En lugar de obtener m2 por 0,01, utilice un valor más pequeño como m2 por 0,0001 en oreder para alcanzar el número más cercano de 100m2 por polígono.

  • El porcentaje debe ser negativo si se quiere disminuir el área del polígono original y debe ser positivo si se quiere aumentar el área del polígono original.

  • Yo estaba a punto de añadir la zona de amortiguación como segunda solución, pero no refleja la misma forma de los edificios y también por encima de la función (scale_geom) reservar los anillos dentro de las formas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X