Recientemente estoy tratando de utilizar la API de PyQGIS para ayudar al mapeo automático en QGIS, y la superposición de algunos símbolos en un mapa que se va a imprimir a una determinada escala no está de acuerdo con los principios de la cartografía.
Para resolver este problema de la forma más sencilla, uno de los dos rasgos se "ocultará" estableciendo el tamaño de su símbolo en 0 si la distancia entre los dos rasgos es menor que la suma del tamaño del símbolo de los dos rasgos en metros convertida a partir del tamaño en milímetros, utilizo directamente Diameter=MaxSymbolSize*CanvasScale/1000
para hacer la conversión, donde Diámetro representa el tamaño en metros, MaxSymbolSize=TestLayer.renderer().symbol().size()
y CanvasScale=iface.mapCanvas().scale()
. Esto realmente puede manejar el problema de superposición de símbolos correctamente, pero creo que debe haber algunos errores si la región de mapeo es considerablemente grande.
Intento buscar la API relacionada en PyQGIS y encuentro algunas funciones como convertFromMapUnits()
, convertMetersToMapUnits()
y convertToMapUnits()
en QgsRenderContext()
clase. Pero la definición de MapUnits y demás en QGIS me resulta un poco confusa y sus respectivos valores de retorno parecen los mismos en diferentes escalas de mapa.
Me pregunto cómo entender correctamente sobre el QgsRendererContext()
y cómo convertir el tamaño de un símbolo en milímetros en el de un metro mediante PyQGIS.