Skip to content

Commit

Permalink
Merge pull request #297 from lucacasagrande/master
Browse files Browse the repository at this point in the history
Rasters not stylized #148
  • Loading branch information
tomchadwin committed Jun 25, 2016
2 parents e7fff93 + fd22c41 commit 7ceb8b2
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 72 deletions.
111 changes: 67 additions & 44 deletions leafletLayerScripts.py
@@ -1,10 +1,10 @@
import re
import os
import time
import tempfile
import traceback
from PyQt4.QtCore import QSize, QVariant
import time
from qgis.core import *
from qgis.utils import QGis
import processing
from leafletScriptStrings import *
from utils import (writeTmpLayer, getUsedFields, removeSpaces,
Expand Down Expand Up @@ -92,51 +92,74 @@ def exportJSONLayer(i, eachPopup, precision, tmpFileName, exp_crs,


def exportRasterLayer(i, safeLayerName, dataPath):
print "Raster type: " + unicode(i.rasterType())
name_ts = safeLayerName + unicode(time.time())
# pipelayer = i
# pipeextent = pipelayer.extent()
# pipewidth, pipeheight = (pipelayer.width(), pipelayer.height())
# piperenderer = pipelayer.renderer()
# pipeprovider = pipelayer.dataProvider()
# crs = pipelayer.crs().toWkt()
# pipe = QgsRasterPipe()
# pipe.set(pipeprovider.clone())
# pipe.set(piperenderer.clone())
# pipedFile = os.path.join(tempfile.gettempdir(), name_ts + '_pipe.tif')
# print "pipedFile: " + pipedFile
# file_writer = QgsRasterFileWriter(pipedFile)
# file_writer.writeRaster(pipe, pipewidth, pipeheight, pipeextent,
# pipelayer.crs())

# in_raster = pipedFile
in_raster = unicode(i.dataProvider().dataSourceUri())
print "in_raster: " + in_raster
prov_raster = os.path.join(tempfile.gettempdir(),
'json_' + name_ts + '_prov.tif')
print "prov_raster: " + prov_raster
out_raster = dataPath + '.png'
print "out_raster: " + out_raster
crsSrc = i.crs()
layer = i
name_ts = safeLayerName + unicode(int(time.time()))

# We need to create a new file to export style
piped_file = os.path.join(
tempfile.gettempdir(),
name_ts + '_piped.tif'
)

piped_extent = layer.extent()
piped_width = layer.height()
piped_height = layer.width()
piped_crs = layer.crs()
piped_renderer = layer.renderer()
piped_provider = layer.dataProvider()

pipe = QgsRasterPipe()
pipe.set(piped_provider.clone())
pipe.set(piped_renderer.clone())

file_writer = QgsRasterFileWriter(piped_file)

file_writer.writeRaster(pipe,
piped_width,
piped_height,
piped_extent,
piped_crs)

# Extent of the layer in EPSG:3857
crsSrc = layer.crs()
crsDest = QgsCoordinateReferenceSystem(3857)
xform = QgsCoordinateTransform(crsSrc, crsDest)
extentRep = xform.transform(i.extent())
extentRep = xform.transform(layer.extent())

extentRepNew = ','.join([unicode(extentRep.xMinimum()),
unicode(extentRep.xMaximum()),
unicode(extentRep.yMinimum()),
unicode(extentRep.yMaximum())])
processing.runalg("gdalogr:warpreproject", in_raster, i.crs().authid(),
"EPSG:3857", "", 0, 1, 5, 2, 75, 6, 1, False, 0, False,
"", prov_raster)
del in_raster
# del pipedFile
# os.remove(os.path.join(tempfile.gettempdir(), name_ts + '_pipe.tif'))
processing.runalg("gdalogr:translate", prov_raster, 100, True, "", 0, "",
extentRepNew, False, 0, 0, 75, 6, 1, False, 0, False, "",
out_raster)
del prov_raster
# os.remove(os.path.join(tempfile.gettempdir(),
# 'json_' + name_ts + '_prov.tif'))
unicode(extentRep.xMaximum()),
unicode(extentRep.yMinimum()),
unicode(extentRep.yMaximum())])

# Reproject in 3857
piped_3857 = os.path.join(tempfile.gettempdir(),
name_ts + '_piped_3857.tif')

# Export layer as PNG
out_raster = dataPath + '.png'

qgis_version = QGis.QGIS_VERSION

if int(qgis_version.split('.')[1]) < 15:

processing.runalg("gdalogr:warpreproject", piped_file,
layer.crs().authid(), "EPSG:3857", "", 0, 1,
0, -1, 75, 6, 1, False, 0, False, "",
piped_3857)
processing.runalg("gdalogr:translate", piped_3857, 100,
True, "", 0, "", extentRepNew, False, 0,
0, 75, 6, 1, False, 0, False, "",
out_raster)
else:
processing.runalg("gdalogr:warpreproject", piped_file,
layer.crs().authid(), "EPSG:3857", "", 0, 0,
extentRepNew, "EPSG:3857", 0, 4, 75, 6, 1, False, 0,
False, "", piped_3857)

processing.runalg("gdalogr:translate", piped_3857, 100,
True, "", 0, "", extentRepNew, False, 5,
4, 75, 6, 1, False, 0, False, "",
out_raster)


def writeVectorLayer(i, safeLayerName, usedFields, highlight, popupsOnHover,
Expand Down
20 changes: 12 additions & 8 deletions olwriter.py
Expand Up @@ -531,14 +531,18 @@ def layerToJavascript(iface, layer, encode2json, matchCRS, cluster):
"maxRes": maxResolution}
elif layer.providerType().lower() == "gdal":
provider = layer.dataProvider()
transform = QgsCoordinateTransform(provider.crs(),
QgsCoordinateReferenceSystem(
"EPSG:3857"))
extent = transform.transform(provider.extent())
sExtent = "[%f, %f, %f, %f]" % (extent.xMinimum(),
extent.yMinimum(),
extent.xMaximum(),
extent.yMaximum())

crsSrc = layer.crs()
crsDest = QgsCoordinateReferenceSystem(3857)

xform = QgsCoordinateTransform(crsSrc, crsDest)
extentRep = xform.transform(layer.extent())

sExtent = "[%f, %f, %f, %f]" % (extentRep.xMinimum(),
extentRep.yMinimum(),
extentRep.xMaximum(),
extentRep.yMaximum())

return '''var lyr_%(n)s = new ol.layer.Image({
opacity: 1,
title: "%(name)s",
Expand Down
87 changes: 67 additions & 20 deletions utils.py
Expand Up @@ -16,14 +16,13 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import os
import re
import time
import re
import shutil
from PyQt4.QtCore import *
from PyQt4.QtCore import QDir, QVariant
from qgis.core import *
from qgis.utils import QGis
import processing
from subprocess import *
import traceback
import tempfile

NO_POPUP = 0
Expand Down Expand Up @@ -97,8 +96,8 @@ def writeTmpLayer(layer, popup):


def exportLayers(iface, layers, folder, precision, optimize, popupField, json):

canvas = iface.mapCanvas()
srcCrs = canvas.mapSettings().destinationCrs()
epsg4326 = QgsCoordinateReferenceSystem("EPSG:4326")
layersFolder = os.path.join(folder, "layers")
QDir().mkpath(layersFolder)
Expand Down Expand Up @@ -184,29 +183,77 @@ def exportLayers(iface, layers, folder, precision, optimize, popupField, json):
line = removeSpaces(line)
f.write(line)
os.remove(tmpPath)

elif layer.type() == layer.RasterLayer:
name_ts = safeName(layer.name()) + unicode(time.time())
in_raster = unicode(layer.dataProvider().dataSourceUri())
prov_raster = os.path.join(tempfile.gettempdir(),
'json_' + name_ts + '_prov.tif')
out_raster = os.path.join(layersFolder,
safeName(layer.name()) + ".png")

name_ts = safeName(layer.name()) + unicode(int(time.time()))

# We need to create a new file to export style
piped_file = os.path.join(
tempfile.gettempdir(),
name_ts + '_piped.tif'
)

piped_extent = layer.extent()
piped_width = layer.height()
piped_height = layer.width()
piped_crs = layer.crs()
piped_renderer = layer.renderer()
piped_provider = layer.dataProvider()

pipe = QgsRasterPipe()
pipe.set(piped_provider.clone())
pipe.set(piped_renderer.clone())

file_writer = QgsRasterFileWriter(piped_file)

file_writer.writeRaster(pipe,
piped_width,
piped_height,
piped_extent,
piped_crs)

# Extent of the layer in EPSG:3857
crsSrc = layer.crs()
crsDest = QgsCoordinateReferenceSystem(3857)
xform = QgsCoordinateTransform(crsSrc, crsDest)
extentRep = xform.transform(layer.extent())

extentRepNew = ','.join([unicode(extentRep.xMinimum()),
unicode(extentRep.xMaximum()),
unicode(extentRep.yMinimum()),
unicode(extentRep.yMaximum())])
processing.runalg("gdalogr:warpreproject", in_raster,
layer.crs().authid(), "EPSG:3857", "", 0, 1,
0, -1, 75, 6, 1, False, 0, False, "",
prov_raster)
processing.runalg("gdalogr:translate", prov_raster, 100,
True, "", 0, "", extentRepNew, False, 0,
0, 75, 6, 1, False, 0, False, "",
out_raster)

# Reproject in 3857
piped_3857 = os.path.join(tempfile.gettempdir(),
name_ts + '_piped_3857.tif')
# Export layer as PNG
out_raster = os.path.join(layersFolder, layer.name() + ".png")

qgis_version = QGis.QGIS_VERSION

if int(qgis_version.split('.')[1]) < 15:

processing.runalg("gdalogr:warpreproject", piped_file,
layer.crs().authid(), "EPSG:3857", "", 0, 1,
0, -1, 75, 6, 1, False, 0, False, "",
piped_3857)
processing.runalg("gdalogr:translate", piped_3857, 100,
True, "", 0, "", extentRepNew, False, 0,
0, 75, 6, 1, False, 0, False, "",
out_raster)
else:

processing.runalg("gdalogr:warpreproject", piped_file,
layer.crs().authid(), "EPSG:3857", "", 0, 0,
extentRepNew, "EPSG:3857", 0, 4, 75, 6, 1,
False, 0, False, "",
piped_3857)

processing.runalg("gdalogr:translate", piped_3857, 100,
True, "", 0, "", extentRepNew, False, 5,
4, 75, 6, 1, False, 0, False, "",
out_raster)


def is25d(layer, canvas):
Expand Down Expand Up @@ -246,7 +293,7 @@ def is25d(layer, canvas):

def safeName(name):
# TODO: we are assuming that at least one character is valid...
validChr = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
validChr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
return ''.join(c for c in name if c in validChr)


Expand Down

0 comments on commit 7ceb8b2

Please sign in to comment.