6 votos

¿Cómo especificar la posición, estilo y unidades de la ScaleBar en pyqgis?

Me gustaría añadir una barra de escala a mi composición usando la consola de python y, a continuación, exportar a una imagen de trama.
Estoy siguiendo el MapRendering tutorial con la "salida mediante la asignación de compositor" enfoque sin embargo,la Escala del elemento de la Barra de ejemplo no tienen muchas características.

Me gustaría

  • una barra de escala con 2 garrapatas, uno al principio, uno en la final
  • unidades en km
  • finalmente, la vuelta a la más cercana km
  • colóquelo en la parte superior derecha de mi figura.
  • establecer un fondo transparente

Al igual que en el escritorio versión de QGIS. ¿Cuáles son las opciones ? Hasta ahora he encontrado

item = QgsComposerScaleBar(c)
item.setStyle("Line Ticks Up") # optionally modify the style
item.setComposerMap(composerMap)
c.addItem(item)

Va a la barra de escala "en escala" ? Gracias por su ayuda

Yo no encontrar nada de esa página ScalBar clase

5voto

alexis.kennedy Puntos 402

"La barra de escala "en escala" ?"

Su barra de escala es la escala relativa a los ya existentes compositor elemento del mapa que se le asigna: QgsComposerScaleBar.setComposerMap(mymap_item_obj_here). Así que usted tendrá que crear el compositor elemento del mapa en primer lugar, por lo que la escala se puede hacer referencia a la barra de escala.

"Yo no encontrar nada de esa página ScalBar clase"

He encontrado casi todas las funciones necesarias para crear la costumbre de la barra de escala que desee en la página.

Una vez que el compositor mapa de referencia es el conjunto de todos los demás QgsComposerScaleBar atributos se pueden establecer mediante la clase de funciones miembro públicas, o aquellas funciones heredadas por la escala de la barra de la clase base, QgsComposerItem, como setItemPosition().

Base class

La Base de la herencia de clases diagrama de

Yo adivinando aquí, pero para el ajuste de la opacidad del fondo a cero, es probable que desee para ajustar el QBrush utilizado en QgsComposerScaleBar.setBrush(QBrush) para tener una QColor con un alfa de 0.


EDITAR (respuesta a tus preguntas/aclaraciones):

Con respecto a la escala de vuelta groundI se han de tratar el siguiente :

brush = ScaleBar.brush() 
brush.setColor(QColor(255, 0, 0, 0))
QgsComposerScaleBar.setBrush(brush)

Yo era incorrecto asumir el QBrush en cuestión pertenecía a la abarcando marco. El pincel es en realidad el color de la barra de escala de la fuente. El marco y el fondo son parte de la heredada QgsComposerItem clase. Trabajar de manera efectiva con sus métodos de un nombre similar (setBrush() en este ejemplo), usted necesita para acceder a ella a través de Python super() función (utilizando tu ScaleBar objeto aquí):

scalebaritem = super(QgsComposerItem, ScaleBar)
scalebaritem.setBrush(QColor(0,0,0,0))

Esto hará referencia a la super clase del objeto, y configurarlo para que transparente negro, tanto como el ajuste de los parámetros en la sección de opciones Generales para un compositor elemento.


Yo no podía cambiar el tamaño de la fuente !

ScaleBar.font().toString()
PyQt4.QtCore.QString(u'Ubuntu,12,-1,5,50,0,0,0,0,0')
>>> ScaleBar.font().setPointSize(8)
>>> ScaleBar.font().pointSize()
12

Usted necesita para crear un QFont, definir su tamaño, a continuación, establezca la barra de escala de la fuente. Usted puede comenzar tirando en el QFont de la barra de escala.

f = ScaleBar.font()
f.setPointSize(8)
ScaleBar.setFont(f)

2voto

andrewtj Puntos 411

Muchas gracias, realmente apreciaría un poco de más ayuda. Yo podría manejar las unidades de metros (unidades de mapa) a km

He modificar setNumMapUnitsPerScaleBarUnit() parámetro y cambiar la etiqueta de las unidades :

ScaleBar = QgsComposerScaleBar(c)
ScaleBar.setComposerMap(composerMap)
ScaleBar.setStyle('Line Ticks Middle') # optionally modify the style
ScaleBar.setFrame(False)
ScaleBar.setUnitLabeling(QString("km"))
ScaleBar.setNumMapUnitsPerScaleBarUnit(1000)

Con respecto a la escala de vuelta groundI se han de tratar el siguiente :

brush = ScaleBar.brush() 
brush.setColor(QColor(255, 0, 0, 0))
QgsComposerScaleBar.setBrush(brush) 

Pero nada parece cambiar en mi salida. Yo termine mi código :

ScaleBar.setItemPosition(50,40)
ScaleBar.applyDefaultSize()
#ScaleBar.update()
c.addItem(ScaleBar)

El color de fondo sigue en blanco. ¿Qué es un QBrush por el camino ?

Yo no podía cambiar el tamaño de la fuente !

ScaleBar.font().toString()
PyQt4.QtCore.QString(u'Ubuntu,12,-1,5,50,0,0,0,0,0')
>>> ScaleBar.font().setPointSize(8)
>>> ScaleBar.font().pointSize()
12

Gracias

0voto

Jason Puntos 143

hacer ScaleBar.setBackgroundEnabled(0) en Qgis 2.4

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