diff --git a/gramps/plugins/webreport/narrativeweb.py b/gramps/plugins/webreport/narrativeweb.py index 092d53b66..922045940 100644 --- a/gramps/plugins/webreport/narrativeweb.py +++ b/gramps/plugins/webreport/narrativeweb.py @@ -152,30 +152,10 @@ SORT_KEY = glocale.sort_key # constants #------------------------------------------------ GOOGLE_MAPS = 'http://maps.googleapis.com/maps/' -# javascript code for Google single Marker... -GOOGLE_JSC = """ - var myLatLng = new google.maps.LatLng(%s, %s); - - function initialize() { - var mapOptions = { - scaleControl: true, - panControl: true, - backgroundColor: '#000000', - draggable: true, - zoom: 10, - center: myLatLng, - mapTypeId: google.maps.MapTypeId.ROADMAP - } - var map = new google.maps.Map(document.getElementById("place_canvas"), mapOptions); - - var marker = new google.maps.Marker({ - position: myLatLng, - draggable: true, - title: "%s", - map: map - }); - }""" - +# javascript code for marker path +MARKER_PATH = """ + var marker_png = '%s' +""" # javascript code for Google's FamilyLinks... FAMILYLINKS = """ var tracelife = %s @@ -210,6 +190,7 @@ DROPMASTERS = """ var tracelife = %s var map; + var myLatLng = new google.maps.LatLng(%s, %s); function initialize() { var mapOptions = { @@ -217,7 +198,7 @@ DROPMASTERS = """ zoomControl: true, zoom: %d, mapTypeId: google.maps.MapTypeId.ROADMAP, - center: new google.maps.LatLng(0, 0) + center: myLatLng, } map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); } @@ -248,6 +229,7 @@ DROPMASTERS = """ MARKERS = """ var tracelife = %s var map; + var myLatLng = new google.maps.LatLng(%s, %s); function initialize() { var mapOptions = { @@ -255,7 +237,7 @@ MARKERS = """ panControl: true, backgroundColor: '#000000', zoom: %d, - center: new google.maps.LatLng(0, 0), + center: myLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); @@ -277,7 +259,7 @@ MARKERS = """ zIndex: location[3] }); bounds.extend(myLatLng); - map.fitBounds(bounds); + if ( i > 1 ) { map.fitBounds(bounds); }; } }""" @@ -293,67 +275,45 @@ CANADA_MAP = """ map.addLayers([wms, dm_wms]); """ -# javascript code for OpenStreetMap single marker -OPENSTREETMAP_JSC = """ - OpenLayers.Lang.setCode("%s"); - - function initialize(){ - var map = new OpenLayers.Map('place_canvas'); - - var osm = new OpenLayers.Layer.OSM() - map.addLayer(osm); - - var lonLat = new OpenLayers.LonLat(%s, %s) - .transform( - new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 - map.getProjectionObject() // to Spherical Mercator Projection - ); - var zoom =16; - - map.setCenter(lonLat, zoom); - - var markers = new OpenLayers.Layer.Markers("Markers"); - markers.addMarker(new OpenLayers.Marker(lonLat)); - map.addLayer(markers); - - // add overview control - map.addControl(new OpenLayers.Control.OverviewMap()); - - // add a layer switcher - map.addControl(new OpenLayers.Control.LayerSwitcher()); - }""" - # javascript for OpenStreetMap's markers... OSM_MARKERS = """ OpenLayers.Lang.setCode("%s"); var map; - var tracelife = %s function initialize(){ map = new OpenLayers.Map('map_canvas'); - var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {'layers':'basic'}); map.addLayer(wms); - map.setCenter(new OpenLayers.LonLat(%s, %s), %d); - - var markers = new OpenLayers.Layer.Markers("Markers"); - map.addLayer(markers); - - addMarkers(markers, map); + var vectorLayer = new OpenLayers.Layer.Vector('vectorLayer', { + styleMap: new OpenLayers.StyleMap({ + externalGraphic: marker_png, + graphicWidth: 24, graphicHeight: 24, graphicYOffset: -24, + title: '${tooltip}' + }) + }); + map.addLayer(vectorLayer); + var selectControlHover = new OpenLayers.Control.SelectFeature(vectorLayer, { + hover: true, + highlightOnly: true, + box: false + }); + map.addControl(selectControlHover); + selectControlHover.activate(); + addMarkers(vectorLayer); } - function addMarkers(markers, map) { + function addMarkers(markers) { for (var i = 0; i < tracelife.length; i++) { var location = tracelife[i]; - - marker = new OpenLayers.Marker(new OpenLayers.LonLat(location[0], location[1])); - markers.addMarker(marker); - map.addControl(new OpenLayers.Control.LayerSwitcher()); + var myLocation = new OpenLayers.Geometry.Point(location[0], location[1]); + markers.addFeatures([ + new OpenLayers.Feature.Vector(myLocation, {tooltip: location[2]}) + ]); } }""" # there is no need to add an ending "", @@ -3981,6 +3941,11 @@ class PlacePages(BasePage): placedetail += urllinks # add place map here + # Link to GRAMPS marker + fname = "/".join(['images', 'marker.png']) + marker_path = self.report.build_url_image("marker.png", + "images", self.uplink) + if self.placemappages: if place and (place.lat and place.long): latitude, longitude = conv_lat_lon(place.get_latitude(), @@ -4008,7 +3973,7 @@ class PlacePages(BasePage): placedetail += Html("h4", _("Place Map"), inline=True) # begin map_canvas division - with Html("div", id="place_canvas", inline=True) as canvas: + with Html("div", id="map_canvas", inline=True) as canvas: placedetail += canvas # Begin inline javascript code because jsc is a @@ -4020,7 +3985,13 @@ class PlacePages(BasePage): # Google adds Latitude/ Longitude to its maps... plce = placetitle.replace("'", "\\'") - jsc += GOOGLE_JSC % (latitude, longitude, plce) + jsc += MARKER_PATH % marker_path + jsc += MARKERS % ([[plce, + latitude, + longitude, + 1]], + latitude, longitude, + 10) else: # OpenStreetMap (OSM) adds Longitude/ Latitude @@ -4029,8 +4000,10 @@ class PlacePages(BasePage): with Html("script", type="text/javascript") as jsc: canvas += jsc param1 = xml_lang()[3:5].lower() - jsc += OPENSTREETMAP_JSC % (param1, longitude, - latitude) + jsc += MARKER_PATH % marker_path + jsc += OSM_MARKERS % (xml_lang()[3:5].lower(), + [[longitude, latitude, placetitle]], + longitude, latitude, 10) # add javascript function call to body element body.attr += ' onload = "initialize();" ' @@ -6543,7 +6516,7 @@ class PersonPages(BasePage): head += Html("script", type="text/javascript", src=src_js, inline=True) - if number_markers > 1: + if number_markers > 0: tracelife = "[" seq_ = 1 @@ -6568,7 +6541,8 @@ class PersonPages(BasePage): # are we using OpenStreetMap? else: tracelife += """ - [%s, %s],""" % (longitude, latitude) + [%s, %s, \'%s\'],""" % (longitude, latitude, placetitle.replace("'", "\\'")) + seq_ += 1 # FIXME: The last element in the place_lat_long list is treated # specially, and the code above is apparently repeated so as to @@ -6595,8 +6569,8 @@ class PersonPages(BasePage): # are we using OpenStreetMap? elif self.mapservice == "OpenStreetMap": tracelife += """ - [%s, %s] - ];""" % (longitude, latitude) + [%s, %s, \'%s\'] + ];""" % (longitude, latitude, placetitle.replace("'", "\\'")) # begin MapDetail division... with Html("div", class_="content", id="FamilyMapDetail") as mapdetail: @@ -6630,53 +6604,50 @@ class PersonPages(BasePage): type="text/javascript", indent=False) as jsc: head += jsc - # if there is only one marker? - if number_markers == 1: - (latitude, longitude, - placetitle, handle, date, etype) = place_lat_long[0] + # Link to GRAMPS marker + fname = "/".join(['images', 'marker.png']) + marker_path = self.report.build_url_image("marker.png", + "images", + self.uplink) - # are we using Google? - if self.mapservice == "Google": - # FIXME: Horrible hack, because when there is only a - # single marker, the javascript for place is used, - # which has a 'place_canvas' division, instead of a - # 'map_canvas' division. - jsc += GOOGLE_JSC.replace( - "place_canvas", "map_canvas") % ( - latitude, longitude, - placetitle.replace("'", "\\'")) + jsc += MARKER_PATH % marker_path + # are we using Google? + if self.mapservice == "Google": - # we are using OpenStreetMap? - else: - # FIXME: Horrible hack, because when there is only a - # single marker, the javascript for place is used, - # which has a 'place_canvas' division, instead of a - # 'map_canvas' division. - jsc += OPENSTREETMAP_JSC.replace( - "place_canvas", "map_canvas") % ( - xml_lang()[3:5].lower(), - longitude, latitude) - - # there is more than one marker... - else: - - # are we using Google? - if self.mapservice == "Google": - - # are we creating Family Links? - if self.googleopts == "FamilyLinks": + # are we creating Family Links? + if self.googleopts == "FamilyLinks": + if midy_ == None: + jsc += FAMILYLINKS % (tracelife, latitude, + longitude, int(10)) + else: jsc += FAMILYLINKS % (tracelife, midx_, midy_, zoomlevel) - # are we creating Drop Markers? - elif self.googleopts == "Drop": - jsc += DROPMASTERS % (tracelife, zoomlevel) - - # we are creating Markers only... + # are we creating Drop Markers? + elif self.googleopts == "Drop": + if midy_ == None: + jsc += DROPMASTERS % (tracelife, latitude, + longitude, int(10)) else: - jsc += MARKERS % (tracelife, zoomlevel) + jsc += DROPMASTERS % (tracelife, midx_, midy_, + zoomlevel) - # we are using OpenStreetMap... + # we are creating Markers only... + else: + if midy_ == None: + jsc += MARKERS % (tracelife, latitude, + longitude, int(10)) + else: + jsc += MARKERS % (tracelife, midx_, midy_, + zoomlevel) + + # we are using OpenStreetMap... + else: + if midy_ == None: + jsc += OSM_MARKERS % (xml_lang()[3:5].lower(), + tracelife, + longitude, + latitude, 10) else: jsc += OSM_MARKERS % (xml_lang()[3:5].lower(), tracelife, midy_, midx_, @@ -8843,6 +8814,10 @@ class NavWebReport(Report): fdir, fname = os.path.split(from_path) self.copy_file(from_path, fname, "images") + # copy GRAMPS marker icon for openstreetmap + fname = CSS["marker"]["filename"] + self.copy_file(fname, "marker.png", "images") + def build_gendex(self, ind_list): """ Create a gendex file diff --git a/gramps/plugins/webstuff/webstuff.py b/gramps/plugins/webstuff/webstuff.py index c527eb352..2a92d9798 100644 --- a/gramps/plugins/webstuff/webstuff.py +++ b/gramps/plugins/webstuff/webstuff.py @@ -171,6 +171,10 @@ def load_on_reg(dbstate, uistate, plugin): # copyright image ['Copyright', 0, 'Copyright', path_img("somerights20.gif"), None, [], [] ], + + # marker icon for openstreetmap + ['marker', 0, 'marker', + path_img("gramps-geo-mainmap.png"), None, [], [] ], ] return CSS_FILES