From 15c8b435fd98ae93ae7d65200410568c5708c3eb Mon Sep 17 00:00:00 2001 From: C Date: Wed, 16 Oct 2019 14:58:52 -0400 Subject: [PATCH] Enhanced external map support. --- doc/settings3.jpg | Bin 32909 -> 38675 bytes mapProviders.py | 4 +++- metadata.txt | 3 ++- readme.md | 8 ++++++-- settings.py | 30 ++++++++++++++++++++++-------- showOnMapTool.py | 6 ++++-- ui/latLonSettings.ui | 12 +++++++++++- 7 files changed, 48 insertions(+), 15 deletions(-) diff --git a/doc/settings3.jpg b/doc/settings3.jpg index 8a1c01567414a134dff9186ccdbf82b13ec78b85..ce9dde59341aaae088cede2ee89f7c34bcf9d6da 100644 GIT binary patch literal 38675 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%0DC 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 S3(|jGXS%@+27w@5P5uuQfA{|Y diff --git a/mapProviders.py b/mapProviders.py index 028fa77..f141f0a 100644 --- a/mapProviders.py +++ b/mapProviders.py @@ -7,7 +7,9 @@ ['MapQuest Map', 'https://www.mapquest.com/latlng/@LAT@,@LON@?centerOnResults=1&zoom=@Z@', 'https://www.mapquest.com/latlng/@LAT@,@LON@?centerOnResults=1&zoom=@Z@'], ['MapQuest Aerial', 'https://www.mapquest.com/latlng/@LAT@,@LON@?centerOnResults=1&maptyp=sat&zoom=@Z@', 'https://www.mapquest.com/latlng/@LAT@,@LON@?centerOnResults=1&maptyp=sat&zoom=@Z@'], ['Mapillary Street', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_streets', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_streets'], - ['Mapillary Aerial', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_satellite', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_satellite'] + ['Mapillary Aerial', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_satellite', 'https://www.mapillary.com/app/?lat=@LAT@&lng=@LON@&z=@Z@&mapStyle=mapbox_satellite'], + ['iD Editor ESRI World Imagery', 'https://preview.ideditor.com/master/#background=EsriWorldImagery&disable_features=boundaries&map=@Z@/@LAT@/@LON@&overlays=BANO&photo_overlay=mapillary-map-features', 'https://preview.ideditor.com/master/#background=EsriWorldImagery&disable_features=boundaries&map=@Z@/@LAT@/@LON@&overlays=BANO&photo_overlay=mapillary-map-features'], + ['iD Editor OpenTopoMap', 'https://preview.ideditor.com/master/#background=OpenTopoMap&disable_features=boundaries&map=@Z@/@LAT@/@LON@&overlays=BANO&photo_overlay=mapillary-map-features','https://preview.ideditor.com/master/#background=OpenTopoMap&disable_features=boundaries&map=@Z@/@LAT@/@LON@&overlays=BANO&photo_overlay=mapillary-map-features'] ] diff --git a/metadata.txt b/metadata.txt index 012e774..abc0c64 100644 --- a/metadata.txt +++ b/metadata.txt @@ -2,7 +2,7 @@ name=Lat Lon Tools qgisMinimumVersion=3.0 description=Tools to capture and zoom to coordinates using decimal, DMS, WKT, GeoJSON, MGRS, UTM, and Plus Codes formats. Provides external map support, point digitizing tools, and coordinate conversion tools. -version=3.3.6 +version=3.3.7 author=C Hamilton email=adenaculture@gmail.com about= @@ -27,6 +27,7 @@ icon=images/copyicon.png experimental=False deprecated=False changelog= + 3.3.7 - Enhanced Show in External Map capabilities 3.3.6 - Rename some of the tools for clarity. 3.3.5 - Enabled snapping with the Show in External Map tool. 3.3.4 - Bug fix diff --git a/readme.md b/readme.md index a451d18..ee9cabd 100644 --- a/readme.md +++ b/readme.md @@ -10,7 +10,7 @@ Some of the functions can be accessed from the ***Lat Lon Tools*** toolbar. If f * Copy/Display coordinate ***Copy/Display Coordinate*** - This captures coordinates onto the clipboard when the user clicks on the map, using the standard Google Map format or a format specified in ***Settings***. If the user specifies a **Tab** separator, then the coordinate can be pasted into a spreadsheet in separate columns. While this tool is selected, the coordinate the mouse is over is shown in the lower left-hand corner either in **decimal degrees**, **DMS**, **MGRS**, **Standard UTM**, **Plus Codes**, **WKT POINT**, or **GeoJSON** notation depending on the **Settings**. By default it uses the geographic Latitude and Longitude to snapshot the coordinate, but this can be configured in **Settings** to use the project CRS or any other projection desired. See the **Settings** section for more details on the all the possibilities. An additional prefix or suffix can be added to the coordinate and is configured in **Settings**. If snapping is enabled under QGIS ***Project->Snapping Options...*** menu, then *Copy/Display Coordinate* will snap to any close vector vertices according to the parameters set in the snapping options. -* Show in External Map ***Show in External Map*** - With this tool, the user can click on the QGIS map which launches an external browser and displays the location on an external map. Currently Open Street Map, Google Maps, MapQuest, and Bing Maps are supported. Google Earth is supported if it is installed on the system. The desired map can be configured in **Settings**. A temporary marker can be displayed on the map at the location clicked on. To turn this on go to **Settings**. If snapping is enabled, then the clicked location will snap to any close vector vertices according to the parameters set in the snapping options. +* Show in External Map ***Show in External Map*** - With this tool, the user can click on the QGIS map which launches an external browser and displays the location on an external map. The left and right mouse buttons can be configured to show different maps. Currently Open Street Map, Google Maps, MapQuest, Mapillary, Open Street Map iD Editor, and Bing Maps are supported. Google Earth is supported if it is installed on the system. The desired maps can be configured in **Settings**. A temporary marker can be displayed on the map at the location clicked on. To turn this on go to **Settings**. If snapping is enabled, then the clicked location will snap to any close vector vertices according to the parameters set in the snapping options. * Zoom-to ***Zoom to Coordinate*** - With this tool, type or paste a coordinate into the text area and hit **Enter**. QGIS centers the map on the coordinate, highlights the location and creates a temporary marker at the location. The marker can be removed with the Clear marker button. If the default **WGS 84** (EPSG:4326 - latitude/longitude) coordinate system is specified, ***Zoom to Coordinate*** can interpret **decimal degrees**, **DMS**, **WKT POINT**, **Standard UTM**, **MGRS**, **Plus Codes**, or **GeoJSON** coordinates. It can also zoom to any other projection when configured in **Settings**. The ***Coordinate Order*** in ***Settings*** dictates whether the order is latitude followed by longitude (Y,X) or longitude followed by latitude (X,Y). By default the order is "Latitude, Longitude", the format used by Google Maps. Pressing the Zoom button also causes QGIS to zoom to that location.
Zoom to Latitude, Longitude

The following are acceptable coordinate formats when the ***Settings*** **Zoom to Coordinate Type** is set to ***WGS 84 (Latitude & Longitude)***. When the letters "N, S, E, W" are used, then the coordinate order is not important. These letters can be used before or after the coordinates. As long as the coordinate is understandable, punctuation, spaces, and ° ' " are optional. In these examples "d" represents degree digits, "m" minutes, and "s" seconds. Here are some example input formats: @@ -189,7 +189,7 @@ The order in which the coordinates are parsed in the ***Zoom to Latitude, Longit
External Map Settings
-You can ***Select an External Map Provider***. The options are: +You can ***Select an External Map Provider for Left Mouse***. The options are: * **OSM** - Open Street Map * **Google Map** @@ -200,8 +200,12 @@ You can ***Select an External Map Provider***. The options are: * **MapQuest Aerial** * **Mapillary Street** * **Mapillary Aerial** +* **iD Editor ESRI World Imagery** +* **iD Editor OpenTopoMap** * **Google Earth** - (This only works if it is installed on your system) +***Select an External Map Provider for Right Mouse*** has the same set of options. These correspond to the left and right mouse buttons. + ***Map Hints*** are desired attributes you would like to see in the resulting map. * **Show placemark** - When checked the external map shows a placemark at the location clicked on in the QGIS map. If this is not checked then the external map centers itself around clicked location, but will not display the placemark. diff --git a/settings.py b/settings.py index 03b6bdd..9c201db 100644 --- a/settings.py +++ b/settings.py @@ -32,6 +32,7 @@ def readSettings(self): ### EXTERNAL MAP ### self.showPlacemark = int(qset.value('/LatLonTools/ShowPlacemark', Qt.Checked)) self.mapProvider = int(qset.value('/LatLonTools/MapProvider', 0)) + self.mapProviderRight = int(qset.value('/LatLonTools/MapProviderRight', 0)) self.mapZoom = int(qset.value('/LatLonTools/MapZoom', 13)) self.externalMapShowLocation = int(qset.value('/LatLonTools/ExternMapShowClickedLocation', Qt.Unchecked)) @@ -57,22 +58,31 @@ def readSettings(self): self.converterDelimiter = qset.value('/LatLonTools/ConverterDelimiter', ', ') self.converterDdmmssDelimiter = qset.value('/LatLonTools/ConverterDdmmssDelimiter', ', ') - def googleEarthMapProvider(self): - if self.mapProvider >= len(mapProviders.MAP_PROVIDERS): - return True + def googleEarthMapProvider(self, button=0): + if button == 2: + if self.mapProviderRight >= len(mapProviders.MAP_PROVIDERS): + return True + else: + if self.mapProvider >= len(mapProviders.MAP_PROVIDERS): + return True return False - def getMapProviderString(self, lat, lon): - if self.showPlacemark: - ms = mapProviders.MAP_PROVIDERS[self.mapProvider][2] + def getMapProviderString(self, lat, lon, button=0): + if button == 2: + if self.showPlacemark: + ms = mapProviders.MAP_PROVIDERS[self.mapProviderRight][2] + else: + ms = mapProviders.MAP_PROVIDERS[self.mapProviderRight][1] else: - ms = mapProviders.MAP_PROVIDERS[self.mapProvider][1] + if self.showPlacemark: + ms = mapProviders.MAP_PROVIDERS[self.mapProvider][2] + else: + ms = mapProviders.MAP_PROVIDERS[self.mapProvider][1] ms = ms.replace('@LAT@', str(lat)) ms = ms.replace('@LON@', str(lon)) ms = ms.replace('@Z@', str(self.mapZoom)) return ms - settings = Settings() @@ -118,6 +128,7 @@ def __init__(self, lltools, iface, parent): ### EXTERNAL MAP ### self.mapProviderComboBox.addItems(mapProviders.mapProviderNames()) + self.mapProviderRComboBox.addItems(mapProviders.mapProviderNames()) ### MULTI-ZOOM ### self.multiZoomToProjectionComboBox.addItems(['WGS 84 (Latitude & Longitude)', 'Project CRS', 'Custom CRS', 'MGRS', 'Plus Codes', 'Standard UTM']) @@ -187,6 +198,7 @@ def restoreDefaults(self): ### EXTERNAL MAP ### self.showPlacemarkCheckBox.setCheckState(Qt.Checked) self.mapProviderComboBox.setCurrentIndex(0) + self.mapProviderRComboBox.setCurrentIndex(0) self.zoomSpinBox.setValue(13) self.showLocationCheckBox.setCheckState(Qt.Unchecked) @@ -301,6 +313,7 @@ def accept(self): qset.setValue('/LatLonTools/ShowPlacemark', self.showPlacemarkCheckBox.checkState()) qset.setValue('/LatLonTools/ExternMapShowClickedLocation', self.showLocationCheckBox.checkState()) qset.setValue('/LatLonTools/MapProvider', int(self.mapProviderComboBox.currentIndex())) + qset.setValue('/LatLonTools/MapProviderRight', int(self.mapProviderRComboBox.currentIndex())) qset.setValue('/LatLonTools/MapZoom', int(self.zoomSpinBox.value())) ### MULTI-ZOOM TO SETTINGS ### @@ -420,6 +433,7 @@ def showEvent(self, e): self.showPlacemarkCheckBox.setCheckState(settings.showPlacemark) self.showLocationCheckBox.setCheckState(settings.externalMapShowLocation) self.mapProviderComboBox.setCurrentIndex(settings.mapProvider) + self.mapProviderRComboBox.setCurrentIndex(settings.mapProviderRight) self.zoomSpinBox.setValue(settings.mapZoom) ### MULTI-ZOOM CUSTOM QML STYLE ### diff --git a/showOnMapTool.py b/showOnMapTool.py index 72a663d..226c1bc 100644 --- a/showOnMapTool.py +++ b/showOnMapTool.py @@ -45,12 +45,14 @@ def canvasPressEvent(self, event): else: self.removeMarker() + button = event.button() + canvasCRS = self.canvas.mapSettings().destinationCrs() transform = QgsCoordinateTransform(canvasCRS, epsg4326, QgsProject.instance()) pt4326 = transform.transform(pt.x(), pt.y()) lat = pt4326.y() lon = pt4326.x() - if settings.googleEarthMapProvider(): + if settings.googleEarthMapProvider(button): f = tempfile.NamedTemporaryFile(mode='w', suffix=".kml", delete=False) f.write('') f.write('') @@ -72,7 +74,7 @@ def canvasPressEvent(self, event): webbrowser.open(f.name) self.iface.messageBar().pushMessage("", "Viewing Coordinate %f,%f in Google Earth" % (lat, lon), level=Qgis.Info, duration=3) else: - mapprovider = settings.getMapProviderString(lat, lon) + mapprovider = settings.getMapProviderString(lat, lon, button) url = QUrl(mapprovider).toString() webbrowser.open(url, new=2) self.iface.messageBar().pushMessage("", "Viewing Coordinate %f,%f in external map" % (lat, lon), level=Qgis.Info, duration=3) diff --git a/ui/latLonSettings.ui b/ui/latLonSettings.ui index e8b8164..cbe8e2d 100644 --- a/ui/latLonSettings.ui +++ b/ui/latLonSettings.ui @@ -287,13 +287,23 @@ Standard UTM - Only Standard UTM coordinates - Select an External Map Provider + Select an External Map Provider for Left Mouse + + + + Select an External Map Provider for Right Mouse + + + + + +