5 votos

Rotar y mover polígonos a diferentes ángulos usando ModelBuilder/ArcPy?

Tengo unos cuantos miles de polígonos (todos cuadrados) que necesito rotar a varios ángulos que están en la tabla de atributos, y luego mover para que cada polígono se mueva 3/4 hacia arriba desde el centroide original, que tengo como un shapefile de puntos. Se vería así:

enter image description here

Lo ideal sería construir un modelo de este proceso para poder repetirlo en el futuro. No me siento muy cómodo con Python, pero si es la única manera de obtener el resultado deseado, estaré dispuesto a probarlo. Tengo arcGIS 10 con una licencia de ArcView.

1voto

ihorko Puntos 106

Hice esto usando un script de python y numpy para ayudarme con el álgebra matricial para la rotación y la traslación de cada punto.

Esta es la función clave. Tienes que desempaquetar los vértices de la característica, transformar y volver a montar la característica.

import arcpy
import math
import numpy

def trans(px,py,tx,ty,angle):
    '''
    Rotate a point px,py around origin 0,0
    Sense clockwise or anticlockwise
      (default clockwise)
    Transform to plot coords tx,ty
    Does not handle z or m values
    '''
    # angle in degrees +/- 360
    th = math.radians(angle) # theta (radians)
    if sense == 'anticlock':
        matrix = [[math.cos(th),-math.sin(th),tx],
                  [ math.sin(th), math.cos(th),ty],
                  [0,0,1]]
    elif sense == 'clock':
        matrix = [[ math.cos(th),math.sin(th),tx],
                  [-math.sin(th),math.cos(th),ty],
                  [0,0,1]]
    else:
        raise Exception, "sense error in DrawPlotR"
    a = numpy.array(matrix)
    b = numpy.array([px,py,1])
    c = numpy.dot(a,b)
    return (c[0],c[1])

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