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
Respuestas
¿Demasiados anuncios?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!
- Agregue el campo ANGLE, tipo flotante a sus puntos.
- Agregue el campo STREET_REC, tipo entero largo a sus líneas centrales de calle.
- Popúlelo utilizando la calculadora de campos con números secuenciales, por ejemplo. [FID]
- Renombrar la capa de carretera a CALLES
- Agregue unir espacialmente al punto como se muestra a continuación
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
Utilice el campo ANGLE en el diálogo de etiquetado.
RESULTADO: