Стиль не применяется к временному слою внутри холста карты пользовательского интерфейса плагина QGIS.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Стиль не применяется к временному слою внутри холста карты пользовательского интерфейса плагина QGIS.

Сообщение Anonymous »

У меня есть этот код внутри функции плагина qgis

def addMainElements_spatial(self):
self.mapCanvas = QgsMapCanvas(self.spatial)
self.mapCanvas.setGeometry(QtCore.QRect(50, 150, 1100, 720))
self.mapCanvas.setObjectName("mapCanvas")

# Set canvas properties
self.mapCanvas.setCanvasColor(QtCore.Qt.white)
self.mapCanvas.enableAntiAliasing(True)

# Load the OSM basemap
osm_url = "type=xyz&url=https://tile.openstreetmap.org/{z}/{x}/{y}.png"
self.osm_layer = QgsRasterLayer(osm_url, "OSM Basemap", "wms")
self.osm_layer.setCrs(QgsCoordinateReferenceSystem(3857))

if self.osm_layer.isValid():
self.mapCanvas.setDestinationCrs(QgsCoordinateReferenceSystem(3857))
self.mapCanvas.setLayers([self.osm_layer])
self.mapCanvas.setExtent(QgsRectangle(221068, 5672193, 1870902, 7456160))
else:
print("Failed to load the OSM basemap layer")

Я отобразил эту базовую карту на вкладке пользовательского интерфейса плагина, но не могу увидеть символы, примененные к слою, загруженному на эту карту на основе запроса.
Вот что я пробовал с символами заливки, но этот стиль применяется к слою, если я добавляю его внутри QgsProject.instance(). Проблема в том, что этот стиль не применяется к слою в QgsMapCanvas внутри пользовательского интерфейса плагина. Карта масштабируется до экстента слоя, но я не вижу никакого стиля, примененного к многоугольнику.
# Create a memory layer for the query results
layer = QgsVectorLayer("MultiPolygon?crs=EPSG:3857", "Query Result", "memory")
layer_data_provider = layer.dataProvider()

# Loop through rows and add features to the memory layer
for row in rows:
attributes = row[:-1] # All columns except WKT geometry
geom_wkt = row[-1] # WKT Geometry as the last column
feature = QgsFeature()
feature.setGeometry(QgsGeometry.fromWkt(geom_wkt)) # Set geometry from WKT
feature.setAttributes(list(attributes)) # Set the attributes for the feature
layer_data_provider.addFeatures([feature])

layer.updateExtents()

# Apply symbology
symbol = QgsFillSymbol.defaultSymbol(layer.geometryType())
symbol.setColor(QColor(255, 0, 0, 127)) # Red fill with 50% opacity
symbol_layer = symbol.symbolLayer(0)
if symbol_layer:
symbol_layer.setStrokeColor(QColor(0, 0, 0)) # Black border
symbol_layer.setStrokeWidth(0.5)

renderer = QgsSingleSymbolRenderer(symbol)
layer.setRenderer(renderer)

# Ensure the OSM basemap layer is at the bottom and the query result layer is on top
layers = self.mapCanvas.layers()
osm_layer = next((layer for layer in layers if isinstance(layer, QgsRasterLayer) and layer.name() == "OSM Basemap"), None)

# Add layers to map canvas
if osm_layer:
self.mapCanvas.setLayers([osm_layer, layer]) # Add basemap layer first, then the query result layer
else:
self.mapCanvas.setLayers([layer]) # Add only the query result layer if no basemap

# Refresh canvas and set extent to fit the query result
self.mapCanvas.setExtent(layer.extent())
self.mapCanvas.refresh()


Подробнее здесь: https://stackoverflow.com/questions/792 ... ui-map-can
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»