forked from NationalSecurityAgency/qgis-latlontools-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
latLonTools.py
133 lines (107 loc) · 4.94 KB
/
latLonTools.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
123
124
125
126
127
128
129
130
131
132
133
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
# Initialize Qt resources from file resources.py
import resources
from zoomToLatLon import ZoomToLatLon
from settings import SettingsWidget
from LatLon import LatLon
import os.path
class LatLonTools:
def __init__(self, iface):
self.iface = iface
def initGui(self):
self.settingsDialog = SettingsWidget(self.iface, self.iface.mainWindow())
self.mapTool = CopyLatLonTool(self.settingsDialog, self.iface)
icon = QIcon(":/plugins/latlontools/copyicon.png")
self.copyAction = QAction(icon, "Copy Latitude, Longitude",
self.iface.mainWindow())
self.copyAction.triggered.connect(self.setTool)
self.copyAction.setCheckable(True)
self.iface.addToolBarIcon(self.copyAction)
self.iface.addPluginToMenu("Lat Lon Tools", self.copyAction)
zoomicon = QIcon(':/plugins/latlontools/zoomicon.png')
self.zoomToAction = QAction(zoomicon, "Zoom To Latitude, Longitude",
self.iface.mainWindow())
self.zoomToAction.triggered.connect(self.zoomTo)
self.iface.addPluginToMenu('Lat Lon Tools', self.zoomToAction)
self.iface.mapCanvas().mapToolSet.connect(self.unsetTool)
self.dockwidget = ZoomToLatLon(self.iface,
self.iface.mainWindow())
self.iface.addDockWidget(Qt.LeftDockWidgetArea, self.dockwidget)
self.dockwidget.hide()
# Initialize the Settings Dialog Box
settingsicon = QIcon(':/plugins/latlontools/settings.png')
self.settingsAction = QAction(settingsicon, "Settings",
self.iface.mainWindow())
self.settingsAction.triggered.connect(self.settings)
self.iface.addPluginToMenu('Lat Lon Tools', self.settingsAction)
def unsetTool(self, tool):
try:
if not isinstance(tool, CopyLatLonTool):
self.copyAction.setChecked(False)
except:
pass
def unload(self):
self.iface.mapCanvas().unsetMapTool(self.mapTool)
self.iface.removePluginMenu('Lat Lon Tools', self.copyAction)
self.iface.removeToolBarIcon(self.copyAction)
self.iface.removePluginMenu('Lat Lon Tools', self.zoomToAction)
self.iface.removePluginMenu('Lat Lon Tools', self.settingsAction)
self.iface.removeDockWidget(self.dockwidget)
self.dockwidget = None
def setTool(self):
self.copyAction.setChecked(True)
self.iface.mapCanvas().setMapTool(self.mapTool)
def zoomTo(self):
self.dockwidget.show()
def settings(self):
self.settingsDialog.show()
class CopyLatLonTool(QgsMapTool):
def __init__(self, settings, iface):
QgsMapTool.__init__(self, iface.mapCanvas())
self.iface = iface
self.canvas = iface.mapCanvas()
self.settings = settings
self.latlon = LatLon()
def activate(self):
self.canvas.setCursor(Qt.CrossCursor)
def formatCoord(self, pt, delimiter, outputFormat):
if outputFormat == 'native':
msg = str(pt.y()) + delimiter + str(pt.x())
else:
canvasCRS = self.canvas.mapRenderer().destinationCrs()
epsg4326 = QgsCoordinateReferenceSystem("EPSG:4326")
transform = QgsCoordinateTransform(canvasCRS, epsg4326)
pt4326 = transform.transform(pt.x(), pt.y())
self.latlon.setCoord(pt4326.y(), pt4326.x())
self.latlon.setPrecision(self.settings.dmsPrecision)
if self.latlon.isValid():
if outputFormat == 'dms':
msg = self.latlon.getDMS(delimiter)
elif outputFormat == 'ddmmss':
msg = self.latlon.getDDMMSS(delimiter)
else:
msg = str(self.latlon.lat)+ delimiter +str(self.latlon.lon)
else:
msg = None
return msg
def canvasMoveEvent(self, event):
outputFormat = self.settings.outputFormat
pt = self.toMapCoordinates(event.pos())
msg = self.formatCoord(pt, ', ', outputFormat)
if outputFormat == 'native' or msg == None:
self.iface.mainWindow().statusBar().showMessage("")
elif outputFormat == 'dms' or outputFormat == 'ddmmss':
self.iface.mainWindow().statusBar().showMessage("DMS: " + msg)
else:
self.iface.mainWindow().statusBar().showMessage("Lat Lon: " + msg)
def canvasReleaseEvent(self, event):
pt = self.toMapCoordinates(event.pos())
msg = self.formatCoord(pt, self.settings.delimiter,
self.settings.outputFormat)
if msg != None:
clipboard = QApplication.clipboard()
clipboard.setText(msg)
self.iface.messageBar().pushMessage("", "Coordinate %s copied to the clipboard" % msg, level=QgsMessageBar.INFO, duration=3)