Skip to content

Commit

Permalink
fix style loading, improve readme
Browse files Browse the repository at this point in the history
  • Loading branch information
vvmruder committed Aug 30, 2024
1 parent e581a7a commit e543010
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 30 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,15 @@ If you want to save the output to a file, you can do by:

#### Supported output formats

`--output_format`

- `json` (default)
- `xml`

#### Unify layer names

`--unify_layer_names_by_group`

- `False` (default)
- `True`

Expand All @@ -218,3 +222,7 @@ So enabling this option, will produce the following names for the layers:
- `environment.ground_coverage.forest`
- `environment.ground_coverage.field`
- `environment.ground_coverage.lake`

## Job interface

Todo...
10 changes: 7 additions & 3 deletions src/qgis_server_light/exporter/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from qgis_server_light.exporter.extract import extract
from xsdata.formats.dataclass.serializers import JsonSerializer, XmlSerializer
from qgis.core import QgsApplication
from xsdata.formats.dataclass.serializers.config import SerializerConfig

os.environ["QT_QPA_PLATFORM"] = "offscreen"
QgsApplication.setPrefixPath('/usr', True)
Expand All @@ -25,7 +26,10 @@ def cli():
"export",
help=f"Export a QGIS project ({f'|'.join(allowed_extensions)}) (1st argument) file to json format",
)
def export(project: str, unify_layer_names_by_group: bool = False, output_format: str = "json") -> None:
def export(project: str, unify_layer_names_by_group: bool = False, output_format: str | None = None) -> None:
serializer_config = SerializerConfig(indent=" ")
if output_format is None:
output_format = "json"
if not project.lower().endswith(allowed_extensions):
raise NotImplementedError(
f'Allowed qgis project file extensions are: {"|".join(allowed_extensions)} not => {project}'
Expand All @@ -37,9 +41,9 @@ def export(project: str, unify_layer_names_by_group: bool = False, output_format
if os.path.isfile(project):
config = extract(path_to_project=project, unify_layer_names_by_group=bool(unify_layer_names_by_group))
if output_format == "json":
click.echo(JsonSerializer().render(config))
click.echo(JsonSerializer(config=serializer_config).render(config))
elif output_format == "xml":
click.echo(XmlSerializer().render(config))
click.echo(XmlSerializer(config=serializer_config).render(config))

else:
raise AttributeError
Expand Down
19 changes: 10 additions & 9 deletions src/qgis_server_light/exporter/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,16 @@ def extract_save_layer(
auth_id=child.dataProvider().crs().authid(),
ogc_uri=child.dataProvider().crs().toOgcUri()
)
extent_wgs_84 = extent_in_wgs84(project, child)
bbox_wgs84 = BBox.from_list([
extent_wgs_84[0],
extent_wgs_84[1],
0.0,
extent_wgs_84[2],
extent_wgs_84[3],
0.0
])

extent_wgs_84 = child.wgs84Extent(forceRecalculate=True)
bbox_wgs84 = BBox(
x_min=extent_wgs_84.xMinimum(),
x_max=extent_wgs_84.xMaximum(),
y_min=extent_wgs_84.yMaximum(),
y_max=extent_wgs_84.yMaximum()
)
if layer_type == 'vector':
child.updateExtents()
extent = child.extent()
bbox = BBox.from_list([
extent.xMinimum(),
Expand Down
1 change: 0 additions & 1 deletion src/qgis_server_light/interface/dispatcher.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import asyncio
import datetime
import json
import logging
import pickle
from uuid import uuid4
Expand Down
35 changes: 18 additions & 17 deletions src/qgis_server_light/worker/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ def _get_map_settings(self, layers: List[QgsMapLayer]) -> QgsMapSettings:
settings = QgsMapSettings()
settings.setOutputSize(
QSize(
int(self.job.service_params.HEIGHT),
int(self.job.service_params.WIDTH)
int(self.job.service_params.WIDTH),
int(self.job.service_params.HEIGHT)
)
)
settings.setOutputDpi(self.job.service_params.dpi)
Expand Down Expand Up @@ -102,7 +102,7 @@ def _init_layers(self, layer: Vector | Raster):
def _prepare_vector_layer(self, layer: Vector) -> QgsVectorLayer:
"""Initializes a vector layer"""
if layer.source.ogr is not None:
if layer.source.remote:
if layer.source.ogr.remote:
layer_source_path = layer.path
else:
layer_source_path = os.path.join(
Expand Down Expand Up @@ -137,19 +137,20 @@ def _prepare_vector_layer(self, layer: Vector) -> QgsVectorLayer:
if self.layer_cache is not None:
self.layer_cache[layer.name] = qgs_layer
if layer.style:
qgs_layer.importNamedStyle(
QDomDocument(
urlsafe_b64decode(
layer.style
).decode()
style_doc = QDomDocument()
style_doc.setContent(
urlsafe_b64decode(
layer.style
)
)
style_loaded = qgs_layer.importNamedStyle(style_doc)
logging.info(f"Style loaded: {style_loaded}")
return qgs_layer

def _prepare_raster_layer(self, layer: Raster) -> QgsRasterLayer:
"""Initializes a raster layer"""
if layer.source.gdal is not None:
if layer.source.remote:
if layer.source.gdal.remote:
layer_source_path = layer.path
else:
layer_source_path = os.path.join(
Expand All @@ -170,16 +171,16 @@ def _prepare_raster_layer(self, layer: Raster) -> QgsRasterLayer:
else:
logging.info(f" ✓ Layer: {layer.name}")
if self.layer_cache is not None:
self.layer_cache[layer.name] = layer
self.layer_cache[layer.name] = qgs_layer
if layer.style:
if layer.style:
qgs_layer.importNamedStyle(
QDomDocument(
urlsafe_b64decode(
layer.style
)
)
style_doc = QDomDocument()
style_doc.setContent(
urlsafe_b64decode(
layer.style
)
)
style_loaded = qgs_layer.importNamedStyle(style_doc)
logging.info(f"Style loaded: {style_loaded}")
return qgs_layer

def run(self):
Expand Down

0 comments on commit e543010

Please sign in to comment.