More work being done on FamilyMap with OpenStreetMap.
svn: r17974
This commit is contained in:
@@ -121,9 +121,8 @@ _COPY_OPTIONS = [
|
|||||||
|
|
||||||
# NarrativeWeb javascript code for PlacePage's "Open Street Map"...
|
# NarrativeWeb javascript code for PlacePage's "Open Street Map"...
|
||||||
openstreet_jsc = """
|
openstreet_jsc = """
|
||||||
OpenLayers.Lang.setCode("%s");
|
OpenLayers.Lang.setCode("%s");
|
||||||
|
|
||||||
function initialize() {
|
|
||||||
map = new OpenLayers.Map("map_canvas");
|
map = new OpenLayers.Map("map_canvas");
|
||||||
var osm = new OpenLayers.Layer.OSM()
|
var osm = new OpenLayers.Layer.OSM()
|
||||||
map.addLayer(osm);
|
map.addLayer(osm);
|
||||||
@@ -144,8 +143,7 @@ function initialize() {
|
|||||||
map.addControl(new OpenLayers.Control.OverviewMap());
|
map.addControl(new OpenLayers.Control.OverviewMap());
|
||||||
|
|
||||||
// add a layer switcher
|
// add a layer switcher
|
||||||
map.addControl(new OpenLayers.Control.LayerSwitcher());
|
map.addControl(new OpenLayers.Control.LayerSwitcher());"""
|
||||||
}"""
|
|
||||||
|
|
||||||
# NarrativeWeb javascript code for PlacePage's "Google Maps"...
|
# NarrativeWeb javascript code for PlacePage's "Google Maps"...
|
||||||
google_jsc = """
|
google_jsc = """
|
||||||
|
@@ -3981,7 +3981,7 @@ class IndividualPage(BasePage):
|
|||||||
# create family map link
|
# create family map link
|
||||||
if self.familymappages:
|
if self.familymappages:
|
||||||
if len(place_lat_long):
|
if len(place_lat_long):
|
||||||
individualdetail += self.display_ind_family_map(person)
|
individualdetail += self.__display_family_map(person)
|
||||||
|
|
||||||
# display pedigree
|
# display pedigree
|
||||||
sect13 = self.display_ind_pedigree()
|
sect13 = self.display_ind_pedigree()
|
||||||
@@ -4003,7 +4003,7 @@ class IndividualPage(BasePage):
|
|||||||
# and close the file
|
# and close the file
|
||||||
self.XHTMLWriter(indivdetpage, of)
|
self.XHTMLWriter(indivdetpage, of)
|
||||||
|
|
||||||
def _create_family_map(self, person):
|
def __create_family_map(self, person):
|
||||||
"""
|
"""
|
||||||
creates individual family map page
|
creates individual family map page
|
||||||
|
|
||||||
@@ -4018,6 +4018,7 @@ class IndividualPage(BasePage):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.familymappages = self.report.options['familymappages']
|
self.familymappages = self.report.options['familymappages']
|
||||||
|
self.mapservice = self.report.options['mapservice']
|
||||||
|
|
||||||
minX, maxX = "0.00000001", "0.00000001"
|
minX, maxX = "0.00000001", "0.00000001"
|
||||||
minY, maxY = "0.00000001", "0.00000001"
|
minY, maxY = "0.00000001", "0.00000001"
|
||||||
@@ -4039,11 +4040,13 @@ class IndividualPage(BasePage):
|
|||||||
maxY = YCoordinates[-1] if YCoordinates[-1] is not None else maxY
|
maxY = YCoordinates[-1] if YCoordinates[-1] is not None else maxY
|
||||||
minY, maxY = Decimal(minY), Decimal(maxY)
|
minY, maxY = Decimal(minY), Decimal(maxY)
|
||||||
centerY = str( Decimal( ( ( (maxY - minY) / 2) + minY) ) )
|
centerY = str( Decimal( ( ( (maxY - minY) / 2) + minY) ) )
|
||||||
|
centerX, centerY = conv_lat_lon(centerX, centerY, "D.D8")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
spanY = int(maxY - minY)
|
spanY = int(maxY - minY)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
spanY = 0
|
spanY = 0
|
||||||
|
|
||||||
try:
|
try:
|
||||||
spanX = int(maxX - minX)
|
spanX = int(maxX - minX)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -4070,31 +4073,45 @@ class IndividualPage(BasePage):
|
|||||||
# if active
|
# if active
|
||||||
# call_(report, up, head)
|
# call_(report, up, head)
|
||||||
|
|
||||||
# add narrative-maps stylesheet...
|
# add narrative-maps style sheet
|
||||||
fname = "/".join(["styles", "narrative-maps.css"])
|
fname = "/".join(["styles", "narrative-maps.css"])
|
||||||
url = self.report.build_url_fname(fname, None, self.up)
|
url = self.report.build_url_fname(fname, None, self.up)
|
||||||
head += Html("link", href =url, type ="text/css", media ="screen", rel ="stylesheet")
|
head += Html("link", href =url, type ="text/css", media ="screen", rel ="stylesheet")
|
||||||
|
|
||||||
if self.familymappages:
|
# add MapService specific javascript code
|
||||||
|
if self.mapservice == "Google":
|
||||||
head += Html("script", type ="text/javascript",
|
head += Html("script", type ="text/javascript",
|
||||||
src ="http://maps.googleapis.com/maps/api/js?sensor=false", inline =True)
|
src ="http://maps.googleapis.com/maps/api/js?sensor=false", inline =True)
|
||||||
|
else:
|
||||||
|
head += Html("script", type ="text/javascript",
|
||||||
|
src ="http://www.openlayers.org/api/OpenLayers.js", inline =True)
|
||||||
|
|
||||||
# set zoomlevel for size of map
|
# set zoomlevel for size of map
|
||||||
# the smaller the span is, the larger the zoomlevel must be...
|
# the smaller the span is, the larger the zoomlevel must be...
|
||||||
if spanY in smallset:
|
if spanY in smallset:
|
||||||
zoomlevel = 13
|
zoomlevel = 15
|
||||||
elif spanY in middleset:
|
elif spanY in middleset:
|
||||||
zoomlevel = 5
|
zoomlevel = 11
|
||||||
elif spanY in largeset:
|
elif spanY in largeset:
|
||||||
zoomlevel = 3
|
zoomlevel = 8
|
||||||
else:
|
else:
|
||||||
zoomlevel = 3
|
zoomlevel = 4
|
||||||
|
|
||||||
# begin inline javascript code
|
# begin inline javascript code
|
||||||
# because jsc is a string, it does NOT have to properly indented
|
# because jsc is a string, it does NOT have to properly indented
|
||||||
with Html("script", type ="text/javascript") as jsc:
|
with Html("script", type ="text/javascript") as jsc:
|
||||||
head += jsc
|
head += jsc
|
||||||
jsc += """
|
|
||||||
|
# if the number of places is only 1, then use code from imported javascript?
|
||||||
|
if number_markers == 1:
|
||||||
|
if self.mapservice == "Google":
|
||||||
|
jsc += google_jsc % (place_lat_long[0][0], place_lat_long[0][1])
|
||||||
|
|
||||||
|
# Google Maps add their javascript inside of the head element...
|
||||||
|
else:
|
||||||
|
# Family Map pages using Google Maps
|
||||||
|
if self.mapservice == "Google":
|
||||||
|
jsc += """
|
||||||
function initialize() {
|
function initialize() {
|
||||||
var myLatLng = new google.maps.LatLng(%s, %s);
|
var myLatLng = new google.maps.LatLng(%s, %s);
|
||||||
var myOptions = {
|
var myOptions = {
|
||||||
@@ -4106,13 +4123,13 @@ class IndividualPage(BasePage):
|
|||||||
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
|
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
|
||||||
|
|
||||||
var lifeHistory = [""" % (centerX, centerY, zoomlevel)
|
var lifeHistory = [""" % (centerX, centerY, zoomlevel)
|
||||||
for index in xrange(0, (number_markers - 1)):
|
for index in xrange(0, (number_markers - 1)):
|
||||||
data = place_lat_long[index]
|
data = place_lat_long[index]
|
||||||
latitude, longitude = conv_lat_lon(data[0], data[1], "D.D8")
|
latitude, longitude = conv_lat_lon(data[0], data[1], "D.D8")
|
||||||
jsc += """ new google.maps.LatLng(%s, %s),""" % (latitude, longitude)
|
jsc += """ new google.maps.LatLng(%s, %s),""" % (latitude, longitude)
|
||||||
data = place_lat_long[-1]
|
data = place_lat_long[-1]
|
||||||
latitude, longitude = conv_lat_lon(data[0], data[1], "D.D8")
|
latitude, longitude = conv_lat_lon(data[0], data[1], "D.D8")
|
||||||
jsc += """ new google.maps.LatLng(%s, %s)
|
jsc += """ new google.maps.LatLng(%s, %s)
|
||||||
];
|
];
|
||||||
var flightPath = new google.maps.Polyline({
|
var flightPath = new google.maps.Polyline({
|
||||||
path: lifeHistory,
|
path: lifeHistory,
|
||||||
@@ -4123,14 +4140,9 @@ class IndividualPage(BasePage):
|
|||||||
|
|
||||||
flightPath.setMap(map);
|
flightPath.setMap(map);
|
||||||
}""" % (latitude, longitude)
|
}""" % (latitude, longitude)
|
||||||
|
|
||||||
|
|
||||||
# there is no need to add an ending "</script>",
|
# there is no need to add an ending "</script>",
|
||||||
# as it will be added automatically!
|
# as it will be added automatically!
|
||||||
|
|
||||||
# add body onload to initialize map
|
|
||||||
body.attr = 'onload ="initialize()" id ="FamilyMap" '
|
|
||||||
|
|
||||||
with Html("div", class_ ="content", id ="FamilyMapDetail") as mapbackground:
|
with Html("div", class_ ="content", id ="FamilyMapDetail") as mapbackground:
|
||||||
body += mapbackground
|
body += mapbackground
|
||||||
|
|
||||||
@@ -4163,14 +4175,78 @@ class IndividualPage(BasePage):
|
|||||||
Xheight = 800
|
Xheight = 800
|
||||||
|
|
||||||
# here is where the map is held in the CSS/ Page
|
# here is where the map is held in the CSS/ Page
|
||||||
canvas = Html("div", id ="map_canvas")
|
with Html("div", id ="map_canvas") as canvas:
|
||||||
mapbackground += canvas
|
mapbackground += canvas
|
||||||
|
|
||||||
# add dynamic style to the place holder...
|
# add dynamic style to the place holder...
|
||||||
canvas.attr += ' style ="width:%dpx; height:%dpx; border: double 4px #000;" ' % (Ywidth, Xheight)
|
canvas.attr += ' style ="width: %dpx; height: %dpx;" ' % (Ywidth, Xheight)
|
||||||
|
|
||||||
# add fullclear for proper styling
|
if self.mapservice == "OpenStreetMap":
|
||||||
canvas += fullclear
|
with Html("script", type ="text/javascript") as jsc:
|
||||||
|
canvas += jsc
|
||||||
|
|
||||||
|
if number_markers == 1:
|
||||||
|
data = place_lat_long[0]
|
||||||
|
latitude, longitude = conv_lat_lon(data[0], data[1], "D.D8")
|
||||||
|
jsc += openstreet_jsc % (Utils.xml_lang()[3:5].lower(),
|
||||||
|
longitude, latitude)
|
||||||
|
else:
|
||||||
|
jsc += """
|
||||||
|
OpenLayers.Lang.setCode("%s");
|
||||||
|
|
||||||
|
map = new OpenLayers.Map("map_canvas");
|
||||||
|
map.addLayer(new OpenLayers.Layer.OSM());
|
||||||
|
|
||||||
|
epsg4326 = new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection
|
||||||
|
projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator)
|
||||||
|
|
||||||
|
var centre = new OpenLayers.LonLat(%s, %s).transform(epsg4326, projectTo);
|
||||||
|
var zoom =%d;
|
||||||
|
map.setCenter (centre, zoom);
|
||||||
|
|
||||||
|
var vectorLayer = new OpenLayers.Layer.Vector("Overlay");""" % (
|
||||||
|
Utils.xml_lang()[3:5].lower(),
|
||||||
|
centerY, centerX, zoomlevel)
|
||||||
|
|
||||||
|
for (lat, long, pname, h, d) in place_lat_long:
|
||||||
|
latitude, longitude = conv_lat_lon(lat, long, "D.D8")
|
||||||
|
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 += """
|
||||||
|
map.addLayer(vectorLayer);
|
||||||
|
|
||||||
|
//Add a selector control to the vectorLayer with popup functions
|
||||||
|
var controls = {
|
||||||
|
selector: new OpenLayers.Control.SelectFeature(vectorLayer, { onSelect:
|
||||||
|
createPopup, onUnselect: destroyPopup })
|
||||||
|
};
|
||||||
|
|
||||||
|
function createPopup(feature) {
|
||||||
|
feature.popup = new OpenLayers.Popup.FramedCloud("pop",
|
||||||
|
feature.geometry.getBounds().getCenterLonLat(),
|
||||||
|
null,
|
||||||
|
'<div id="geo-info">'+feature.attributes.description+'</div>',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
function() { controls['selector'].unselectAll(); }
|
||||||
|
);
|
||||||
|
//feature.popup.closeOnMove = true;
|
||||||
|
map.addPopup(feature.popup);
|
||||||
|
}
|
||||||
|
|
||||||
|
function destroyPopup(feature) {
|
||||||
|
feature.popup.destroy();
|
||||||
|
feature.popup = null;
|
||||||
|
}
|
||||||
|
map.addControl(controls['selector']);
|
||||||
|
controls['selector'].activate();"""
|
||||||
|
|
||||||
|
# add fullclear for proper styling
|
||||||
|
canvas += fullclear
|
||||||
|
|
||||||
with Html("div", class_ ="subsection", id ="references") as section:
|
with Html("div", class_ ="subsection", id ="references") as section:
|
||||||
mapbackground += section
|
mapbackground += section
|
||||||
@@ -4192,6 +4268,13 @@ class IndividualPage(BasePage):
|
|||||||
list1 = Html("li", _dd.display(date), inline = True)
|
list1 = Html("li", _dd.display(date), inline = True)
|
||||||
ordered1 += list1
|
ordered1 += list1
|
||||||
|
|
||||||
|
# add body id...
|
||||||
|
body.attr = ' id ="FamilyMap" '
|
||||||
|
|
||||||
|
# add body onload to initialize map for Google Maps only...
|
||||||
|
if self.mapservice == "Google":
|
||||||
|
body.attr += ' onload ="initialize()" '
|
||||||
|
|
||||||
# add clearline for proper styling
|
# add clearline for proper styling
|
||||||
# add footer section
|
# add footer section
|
||||||
footer = self.write_footer()
|
footer = self.write_footer()
|
||||||
@@ -4201,13 +4284,13 @@ class IndividualPage(BasePage):
|
|||||||
# and close the file
|
# and close the file
|
||||||
self.XHTMLWriter(familymappage, of)
|
self.XHTMLWriter(familymappage, of)
|
||||||
|
|
||||||
def display_ind_family_map(self, person):
|
def __display_family_map(self, person):
|
||||||
"""
|
"""
|
||||||
create the family map link
|
create the family map link
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# create family map page
|
# create family map page
|
||||||
self._create_family_map(person)
|
self.__create_family_map(person)
|
||||||
|
|
||||||
# begin family map division plus section title
|
# begin family map division plus section title
|
||||||
with Html("div", class_ = "subsection", id = "familymap") as familymap:
|
with Html("div", class_ = "subsection", id = "familymap") as familymap:
|
||||||
@@ -5781,6 +5864,7 @@ class NavWebReport(Report):
|
|||||||
"""
|
"""
|
||||||
Copy all of the CSS, image, and javascript files for Narrated Web
|
Copy all of the CSS, image, and javascript files for Narrated Web
|
||||||
"""
|
"""
|
||||||
|
imgs = []
|
||||||
|
|
||||||
# copy screen style sheet
|
# copy screen style sheet
|
||||||
if CSS[self.css]["filename"]:
|
if CSS[self.css]["filename"]:
|
||||||
@@ -5809,11 +5893,13 @@ class NavWebReport(Report):
|
|||||||
self.copy_file(fname, "narrative-menus.css", "styles")
|
self.copy_file(fname, "narrative-menus.css", "styles")
|
||||||
|
|
||||||
# copy narrative-maps if Place or Family Map pages?
|
# copy narrative-maps if Place or Family Map pages?
|
||||||
if self.placemappages or self.familymappages:
|
if (self.placemappages or self.familymappages):
|
||||||
fname = CSS["NarrativeMaps"]["filename"]
|
fname = CSS["NarrativeMaps"]["filename"]
|
||||||
self.copy_file(fname, "narrative-maps.css", "styles")
|
self.copy_file(fname, "narrative-maps.css", "styles")
|
||||||
|
|
||||||
imgs = []
|
# if OpenStreetMap is being used, copy blue marker?
|
||||||
|
if self.mapservice == "OpenStreetMap":
|
||||||
|
imgs += CSS["NarrativeMaps"]["images"]
|
||||||
|
|
||||||
# Copy the Creative Commons icon if the Creative Commons
|
# Copy the Creative Commons icon if the Creative Commons
|
||||||
# license is requested
|
# license is requested
|
||||||
@@ -5834,6 +5920,10 @@ class NavWebReport(Report):
|
|||||||
# Anything css-specific:
|
# Anything css-specific:
|
||||||
imgs += CSS[self.css]["images"]
|
imgs += CSS[self.css]["images"]
|
||||||
|
|
||||||
|
# copy blue-marker if FamilyMap and OpenStreetMap are being created?
|
||||||
|
if (self.familymappages and self.mapservice == "OpenStreetMap"):
|
||||||
|
imgs += CSS["NarrativeMaps"]["images"]
|
||||||
|
|
||||||
# copy all to images subdir:
|
# copy all to images subdir:
|
||||||
for from_path in imgs:
|
for from_path in imgs:
|
||||||
fdir, fname = os.path.split(from_path)
|
fdir, fname = os.path.split(from_path)
|
||||||
|
@@ -40,7 +40,7 @@ div#geo-info {
|
|||||||
/* map_canvas-- place map holder
|
/* map_canvas-- place map holder
|
||||||
------------------------------------------------- */
|
------------------------------------------------- */
|
||||||
div#map_canvas {
|
div#map_canvas {
|
||||||
margin-left: 30px;
|
margin: 15px;
|
||||||
border: solid 4px #000;
|
border: solid 4px #000;
|
||||||
width: 900px;
|
width: 900px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
DATAFILES = \
|
DATAFILES = \
|
||||||
blank.gif \
|
blank.gif \
|
||||||
|
blue-marker.png \
|
||||||
crosshairs.png \
|
crosshairs.png \
|
||||||
document.png \
|
document.png \
|
||||||
favicon2.ico \
|
favicon2.ico \
|
||||||
|
BIN
src/plugins/webstuff/images/blue-marker.png
Normal file
BIN
src/plugins/webstuff/images/blue-marker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 992 B |
@@ -91,36 +91,37 @@ def load_on_reg(dbstate, uistate, plugin):
|
|||||||
|
|
||||||
# Visually Impaired style sheet with its navigation menus
|
# Visually Impaired style sheet with its navigation menus
|
||||||
["Visually Impaired", 1, _("Visually Impaired"),
|
["Visually Impaired", 1, _("Visually Impaired"),
|
||||||
path_css('Web_Visually.css'), "narrative-menus.css", [], []],
|
path_css('Web_Visually.css'), "narrative-menus.css", [], [] ],
|
||||||
|
|
||||||
# no style sheet option
|
# no style sheet option
|
||||||
["No style sheet",1, _("No style sheet"), [], None, [], []],
|
["No style sheet",1, _("No style sheet"), [], None, [], [] ],
|
||||||
|
|
||||||
# ancestor tree style sheet and its images
|
# ancestor tree style sheet and its images
|
||||||
["ancestortree", 0, "ancestortree",
|
["ancestortree", 0, "ancestortree",
|
||||||
path_css("ancestortree.css"), None,
|
path_css("ancestortree.css"), None,
|
||||||
[path_img("Web_Gender_Female.png"),
|
[path_img("Web_Gender_Female.png"),
|
||||||
path_img("Web_Gender_Male.png")], []],
|
path_img("Web_Gender_Male.png")], [] ],
|
||||||
|
|
||||||
# media reference regions style sheet
|
# media reference regions style sheet
|
||||||
["behaviour", 0, "Behaviour",
|
["behaviour", 0, "Behaviour",
|
||||||
path_css('behaviour.css'), None, [], []],
|
path_css('behaviour.css'), None, [], [] ],
|
||||||
|
|
||||||
# NarrativeMpasstyle sheet for NarrativeWeb place maps
|
# NarrativeMap stylesheet/ image for NarrativeWeb place maps
|
||||||
["NarrativeMaps", 0, "",
|
["NarrativeMaps", 0, "",
|
||||||
path_css("narrative-maps.css"), None, [], []],
|
path_css("narrative-maps.css"), None,
|
||||||
|
[path_img("blue-marker.png")], [] ],
|
||||||
|
|
||||||
# default style sheet in the options
|
# default style sheet in the options
|
||||||
["default", 0, _("Basic-Ash"),
|
["default", 0, _("Basic-Ash"),
|
||||||
path_css('Web_Basic-Ash.css'), None, [], []],
|
path_css('Web_Basic-Ash.css'), None, [], [] ],
|
||||||
|
|
||||||
# default printer style sheet
|
# default printer style sheet
|
||||||
["Print-Default", 0, "Print-Default",
|
["Print-Default", 0, "Print-Default",
|
||||||
path_css('Web_Print-Default.css'), None, [], []],
|
path_css('Web_Print-Default.css'), None, [], [] ],
|
||||||
|
|
||||||
# vertical navigation style sheet
|
# vertical navigation style sheet
|
||||||
["Navigation-Vertical", 0, "Navigation-Vertical",
|
["Navigation-Vertical", 0, "Navigation-Vertical",
|
||||||
path_css('Web_Navigation-Vertical.css'), None, [], []],
|
path_css('Web_Navigation-Vertical.css'), None, [], [] ],
|
||||||
|
|
||||||
# horizontal navigation style sheet
|
# horizontal navigation style sheet
|
||||||
["Navigation-Horizontal", 0, "Navigation-Horizontal",
|
["Navigation-Horizontal", 0, "Navigation-Horizontal",
|
||||||
|
Reference in New Issue
Block a user