From 4027c75d5268dcf4354195ead63b7374bd9e717b Mon Sep 17 00:00:00 2001 From: "Rob G. Healey" Date: Sat, 6 Aug 2011 00:38:08 +0000 Subject: [PATCH] Attempt at getting zoomlevel correct in displaying a larger map section based on Family Map. svn: r17992 --- src/plugins/webreport/NarrativeWeb.py | 51 ++++++++++++++++++--------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py index 59e34780a..e1ee77e67 100644 --- a/src/plugins/webreport/NarrativeWeb.py +++ b/src/plugins/webreport/NarrativeWeb.py @@ -4048,6 +4048,23 @@ class IndividualPage(BasePage): spanx = int(maxx - minx) spany = int(maxy - miny) + # set zoom level based on span of Longitude? + tinyset = [value for value in (-3, -2, -1, 0, 1, 2, 3)] + smallset = [value for value in (-4, -5, -6, -7, 4, 5, 6, 7)] + middleset = [value for value in (-8, -9, -10, -11, 8, 9, 10, 11)] + largeset = [value for value in (-11, -12, -13, -14, -15, -16, -17, 11, 12, 13, 14, 15, 16, 17)] + + if spany in tinyset: + zoomlevel = 13 + elif spany in smallset: + zoomlevel = 6 + elif spany in middleset: + zoomlevel = 5 + elif spany in largeset: + zoomlevel = 4 + else: + zoomlevel = 3 + # sort place_lat_long based on latitude and longitude order... place_lat_long.sort() @@ -4069,7 +4086,8 @@ class IndividualPage(BasePage): if self.mapservice == "Google": head += Html("script", type ="text/javascript", src ="http://maps.googleapis.com/maps/api/js?sensor=false", inline =True) - elif self.mapservice == "OpenStreetMap": + + else: head += Html("script", type ="text/javascript", src ="http://www.openlayers.org/api/OpenLayers.js", inline =True) @@ -4140,7 +4158,7 @@ class IndividualPage(BasePage): function initialize() { var mapOptions = { - zoom: 4, + zoom: %d, mapTypeId: google.maps.MapTypeId.ROADMAP, center: centre } @@ -4165,7 +4183,7 @@ class IndividualPage(BasePage): animation: google.maps.Animation.DROP })); iterator++; - }""" % ( data[0], data[1] ) + }""" % (data[0], data[1], zoomlevel) # there is no need to add an ending "", # as it will be added automatically by libhtml()! @@ -4184,15 +4202,15 @@ class IndividualPage(BasePage): with Html("div", id ="map_canvas", inline =True) as canvas: mapbackground += canvas - if self.mapservice == "OpenStreetMap": - with Html("script", type ="text/javascript") as jsc: - canvas += jsc + if self.mapservice == "OpenStreetMap": + with Html("script", type ="text/javascript") as jsc: + mapbackground += jsc - if number_markers == 1: - data = place_lat_long[0] - jsc += openstreet_jsc % (Utils.xml_lang()[3:5].lower(), data[0], data[1] ) - else: - jsc += """ + if number_markers == 1: + data = place_lat_long[0] + jsc += openstreet_jsc % (Utils.xml_lang()[3:5].lower(), data[0], data[1] ) + else: + jsc += """ OpenLayers.Lang.setCode("%s"); map = new OpenLayers.Map("map_canvas"); @@ -4202,18 +4220,19 @@ class IndividualPage(BasePage): projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator) var centre = new OpenLayers.LonLat( %s, %s ).transform(epsg4326, projectTo); - var zoom = 4; + var zoom = %d; map.setCenter(centre, zoom); - var vectorLayer = new OpenLayers.Layer.Vector("Overlay");""" % ( Utils.xml_lang()[3:5].lower(), midY_, midX_ ) - for (latitude, longitude, pname, h, d) in place_lat_long: - jsc += """ + var vectorLayer = new OpenLayers.Layer.Vector("Overlay");""" % (Utils.xml_lang()[3:5].lower(), + midY_, midX_, zoomlevel) + for (latitude, longitude, pname, h, d) in place_lat_long: + jsc += """ var feature = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.Point( %s, %s ).transform(epsg4326, projectTo), {description:'%s'} ); vectorLayer.addFeatures(feature);""" % (longitude, latitude, pname) - jsc += """ + jsc += """ map.addLayer(vectorLayer); //Add a selector control to the vectorLayer with popup functions