Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
261 changes: 166 additions & 95 deletions mbutils.py

Large diffs are not rendered by default.

35 changes: 8 additions & 27 deletions metadata.txt
Original file line number Diff line number Diff line change
@@ -1,41 +1,22 @@
[general]
name=QTiles
description=Generate tiles from QGIS project
name=QTiles3
description=Generate tiles from QGIS project. Ported to QGIS 3 with sponsorship by Gamaya SA (https://gamaya.com/). Enhanced by Nacho Urenda (nurenda@bcn.cat, Barcelona City Council).
category=Plugins
version=1.5.2
qgisMinimumVersion=2.0
version=1.7.1
qgisMinimumVersion=3.0

author=NextGIS
email=info@nextgis.com

changelog=1.5.2
* Removed the limitation of the maximum zoom
* Host css+js in local repository for LeafLet preview
1.5.1:
* create tiles for NextGIS Mobile
* add MBTiles compression
* add export MBTiles metadata to .json file
* add image overview for MBTiles
* add option for skiping tiles outside of layers extents (within combined extent)
1.5.0:
* change MBTiles parameters vаlues: format in lower case, description is 'Created with QTiles'
* tiles are now produced correctly when transparency is set
* geojson is now rendered correctly
* CRS shift when using 3857 is fixed
1.4.6:
* works fine now with non-english characters in folder names
* add MBTiles initialize arguments for Geopaparazzi4
* take into account the actual zoom level when generating tiles
author=NextGIS, Alexander Bruy, Nacho Urenda
email=nurenda@bcn.cat

icon=icons/qtiles.png

tags=raster,tiles

homepage=https://github.com/nextgis/QTiles
tracker=https://github.com/nextgis/QTiles/issues
repository=https://github.com/nextgis/QTiles
repository=https://github.com/nextgis/qtiles

experimental=True
deprecated=False

about=Generates raster tiles from QGIS project for selected zoom levels and tile naming conventions (Slippy Map or TMS). It can also package tiles for variety of formats and applications, NextGIS Mobile, GeoPaparazzi, simple Leaflet-based viewer and MBTiles.
about=Generates raster tiles from QGIS project for selected zoom levels and tile naming conventions (Slippy Map or TMS). It can also package tiles for variety of formats and applications, GeoPaparazzi, simple Leaflet-based viewer and MBTiles. This is an ampliation of the QTiles3 original plugin with blank tiles detection and increased performance.
29 changes: 14 additions & 15 deletions qtiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Generates tiles from QGIS project
#
# Copyright (C) 2012-2014 NextGIS (info@nextgis.org)
# Copyright (C) 2019 Alexander Bruy (alexander.bruy@gmail.com)
#
# This source is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
Expand All @@ -25,32 +26,30 @@
#
#******************************************************************************

from qgis.PyQt.QtCore import QFileInfo, QLocale, QTranslator, QCoreApplication
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtWidgets import QMessageBox, QAction
from qgis.core import Qgis, QgsApplication, QgsSettings

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from qgis.core import *

import qtilesdialog
import aboutdialog

import resources_rc
from . import resources_rc
from .aboutdialog import AboutDialog
from .qtilesdialog import QTilesDialog


class QTilesPlugin:
def __init__(self, iface):
self.iface = iface

self.qgsVersion = unicode(QGis.QGIS_VERSION_INT)
self.qgsVersion = str(Qgis.QGIS_VERSION_INT)

userPluginPath = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + '/python/plugins/qtiles'
userPluginPath = QFileInfo(QgsApplication.qgisUserDatabaseFilePath()).path() + '/python/plugins/qtiles'
systemPluginPath = QgsApplication.prefixPath() + '/python/plugins/qtiles'

overrideLocale = QSettings().value('locale/overrideFlag', False, type=bool)
overrideLocale = QgsSettings().value('locale/overrideFlag', False, type=bool)
if not overrideLocale:
localeFullName = QLocale.system().name()
else:
localeFullName = QSettings().value('locale/userLocale', '')
localeFullName = QgsSettings().value('locale/userLocale', '')

if QFileInfo(userPluginPath).exists():
translationPath = userPluginPath + '/i18n/qtiles_' + localeFullName + '.qm'
Expand Down Expand Up @@ -92,10 +91,10 @@ def unload(self):
self.iface.removePluginMenu(QCoreApplication.translate('QTiles', 'QTiles'), self.actionAbout)

def run(self):
d = qtilesdialog.QTilesDialog(self.iface)
d = QTilesDialog(self.iface)
d.show()
d.exec_()

def about(self):
d = aboutdialog.AboutDialog()
d = AboutDialog()
d.exec_()
30 changes: 8 additions & 22 deletions qtiles_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Generates tiles from QGIS project
#
# Copyright (C) 2012-2014 NextGIS (info@nextgis.org)
# Copyright (C) 2019 Alexander Bruy (alexander.bruy@gmail.com)
#
# This source is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
Expand All @@ -25,42 +26,27 @@
#
#******************************************************************************


from PyQt4.QtCore import *

from qgis.core import *
from qgis.core import QgsProject, QgsMapLayer


def getMapLayers():
layerMap = QgsMapLayerRegistry.instance().mapLayers()
layerMap = QgsProject.instance().mapLayers()
layers = dict()
for name, layer in layerMap.iteritems():
for name, layer in layerMap.items():
if layer.type() == QgsMapLayer.VectorLayer:
if layer.id() not in layers.keys():
layers[layer.id()] = unicode(layer.name())
layers[layer.id()] = layer.name()
if layer.type() == QgsMapLayer.RasterLayer and layer.providerType() == 'gdal':
if layer.id() not in layers.keys():
layers[layer.id()] = unicode(layer.name())
layers[layer.id()] = layer.name()
return layers


def getLayerById(layerId):
layerMap = QgsMapLayerRegistry.instance().mapLayers()
for name, layer in layerMap.iteritems():
layerMap = QgsProject.instance().mapLayers()
for name, layer in layerMap.items():
if layer.id() == layerId:
if layer.isValid():
return layer
else:
return None


def getLayerGroup(relations, layerId):
group = None

for item in relations:
group = unicode(item[0])
for lid in item[1]:
if unicode(lid) == unicode(layerId):
return group

return group
Loading