forked from NaturalGIS/naturalgis_ntv2_transformations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RasterUK_OSGB36ETRS89DirInv.py
122 lines (102 loc) · 5.12 KB
/
RasterUK_OSGB36ETRS89DirInv.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# -*- coding: utf-8 -*-
"""
***************************************************************************
RasterUK_OSGB36ETRS89DirInv.py
---------------------
Date : March 2015
Copyright : (C) 2015 by Giovanni Manghi
Email : giovanni dot manghi at naturalgis dot pt
***************************************************************************
* *
* This program 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 Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""
__author__ = 'Giovanni Manghi'
__date__ = 'March 2015'
__copyright__ = '(C) 2015, Giovanni Manghi'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
import inspect
import os
from PyQt4.QtGui import QIcon
from processing.gui.Help2Html import getHtmlFromRstFile
try:
from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterSelection import ParameterSelection
from processing.outputs.OutputRaster import OutputRaster
except:
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterSelection
from processing.core.outputs import OutputRaster
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.algs.gdal.GdalUtils import GdalUtils
class RasterUK_OSGB36ETRS89DirInv(GeoAlgorithm):
INPUT = 'INPUT'
OUTPUT = 'OUTPUT'
TRANSF = 'TRANSF'
TRANSF_OPTIONS = ['Direct: Old Data -> ETRS89 [EPSG:4258]',
'Inverse: ETRS89 [EPSG:4258] -> Old Data']
CRS = 'CRS'
CRS_OPTIONS = ['OSGB 1936/British National Grid [EPSG:27700]']
GRID = 'GRID'
GRID_OPTIONS = ['OSTN02_NTv2']
def getIcon(self):
return QIcon(os.path.dirname(__file__) + '/icons/uk.png')
def help(self):
name = self.commandLineName().split(':')[1].lower()
filename = os.path.join(os.path.dirname(inspect.getfile(self.__class__)), 'help', name + '.rst')
try:
html = getHtmlFromRstFile(filename)
return True, html
except:
return False, None
def defineCharacteristics(self):
self.name = '[UK] Direct and inverse Raster Tranformation'
self.group = '[UK] United Kingdom'
self.addParameter(ParameterRaster(self.INPUT, 'Input raster', False))
self.addParameter(ParameterSelection(self.TRANSF, 'Transformation',
self.TRANSF_OPTIONS))
self.addParameter(ParameterSelection(self.CRS, 'Old Datum',
self.CRS_OPTIONS))
self.addParameter(ParameterSelection(self.GRID, 'NTv2 Grid',
self.GRID_OPTIONS))
self.addOutput(OutputRaster(self.OUTPUT, 'Output'))
def processAlgorithm(self, progress):
if self.getParameterValue(self.TRANSF) == 0:
# Direct transformation
arguments = ['-s_srs']
if self.getParameterValue(self.CRS) == 0:
# GOSGB 1936/British National Grid
if self.getParameterValue(self.GRID) == 0:
# OSTN02_NTv2
arguments.append('+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +nadgrids=' + os.path.dirname(__file__) + '/grids/OSTN02_NTv2.gsb +wktext +units=m +no_defs')
arguments.append('-t_srs')
arguments.append('EPSG:4258')
else:
# Inverse transformation
arguments = ['-s_srs']
arguments.append('EPSG:4258')
arguments.append('-t_srs')
if self.getParameterValue(self.CRS) == 0:
# OSGB 1936/British National Grid
if self.getParameterValue(self.GRID) == 0:
# OSTN02_NTv2
arguments.append('+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +nadgrids=' + os.path.dirname(__file__) + '/grids/OSTN02_NTv2.gsb +wktext +units=m +no_defs')
arguments.append('-multi')
arguments.append('-of')
out = self.getOutputValue(self.OUTPUT)
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(self.getParameterValue(self.INPUT))
arguments.append(out)
if os.path.isfile(os.path.dirname(__file__) + '/grids/OSTN02_NTv2.gsb') is False:
try:
from urllib import urlretrieve
except ImportError:
from urllib.request import urlretrieve
urlretrieve ("https://github.com/NaturalGIS/ntv2_transformations_grids_and_sample_data/raw/master/uk/OSTN02_NTv2.gsb", os.path.dirname(__file__) + "/grids/OSTN02_NTv2.gsb")
GdalUtils.runGdal(['gdalwarp', GdalUtils.escapeAndJoin(arguments)],
progress)