3 votos

Coloque la etiqueta del punto perpendicular al segmento de línea

Tengo un shapefile de puntos con atributos y quiero que la etiqueta sea perpendicular a un shapefile de líneas, ¿es esto posible? Básicamente mis puntos representan casas y quiero que la etiqueta de la casa aparezca perpendicular al segmento de línea (carretera). Mis segmentos de línea no siguen todos la misma dirección, por lo que tengo que girar manualmente mis etiquetas y me preguntaba si había una manera de crear automáticamente la etiqueta para que sea perpendicular. Mis puntos tampoco están en las líneas, hay espacio entre ellos. Estoy utilizando arcmap 10.3

1voto

kervin Puntos 7620

Usando el motor de etiquetado Maplex, haz clic en Administrador de etiquetas y selecciona tu capa de puntos. Ve a propiedades y luego a Posición de etiqueta. Dentro de Posición de etiqueta, elige rotar por atributo y haz clic en opciones. Allí puedes ajustar la rotación de la etiqueta por un campo o por Tipo de Alineación, siendo perpendicular una de ellas. ¡Espero que esto te ayude!

1voto

FelixIP Puntos 4035
  1. Agregue el campo ANGLE, tipo flotante a sus puntos.
  2. Agregue el campo STREET_REC, tipo entero largo a sus líneas centrales de calle.
  3. Popúlelo utilizando la calculadora de campos con números secuenciales, por ejemplo. [FID]
  4. Renombrar la capa de carretera a CALLES
  5. Agregue unir espacialmente al punto como se muestra a continuación

introduzca aquí la descripción de la imagen

Ejecute esta expresión de calculadora de campos en el campo ANGLE de la tabla SJ

import math
pi=math.pi
def getAngle(shp,n):
 mxd = arcpy.mapping.MapDocument("CURRENT")
 lr=arcpy.mapping.ListLayers(mxd, "CALLES")[0]
 q=r'"STREET_REC"='+str(n)
 with arcpy.da.SearchCursor(lr, "Shape@",q) as cursor:
  for row in cursor:
   street=row[0];break
 pointPosition= street.measureOnLine(shp)
 f=max(0,pointPosition-0.01)
 t=min(street.length, pointPosition+0.01)
 p1=street.positionAlongLine(f).firstPoint
 p2=street.positionAlongLine(t).firstPoint
 dX=p2.X-p1.X
 dY=p2.Y-p1.Y
 if dX==0:dX=0.0001
 if dY<0: return math.atan(dY/dX)/pi*180-90
 return math.atan(dY/dX)/pi*180+90

introduzca aquí la descripción de la imagen

Utilice el campo ANGLE en el diálogo de etiquetado.

RESULTADO:

introduzca aquí la descripción de la imagen

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