Improved flexibilty when specifying signGroups
Group membership is now determined with a function. See config.js for some examples. If we want to include more information about markers in markers.js, this model should be useful.
This commit is contained in:
25
config.js
25
config.js
@@ -10,14 +10,23 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// define a list of pattern-label pairs. Each label will appear
|
/* signGroups -- A list of signpost groups. A signpost can fall into zero, one, or more than one
|
||||||
// in the 'Signposts' control, allowing your users to quickly enable
|
* group. See below for some examples.
|
||||||
// or disable certain labels. See below for some examples:
|
*
|
||||||
var signGroups = {
|
* Required:
|
||||||
// "Directions": /^#Direction/i,
|
* label : string. Displayed in the drop down menu control.
|
||||||
// "Big Dig": /big\s*dig/i,
|
* match : function. Applied to each marker (from markers.js). It is returns true if the marker
|
||||||
// "Warnings": /warning/i,
|
* Should be part of the group.
|
||||||
};
|
*
|
||||||
|
* Optional:
|
||||||
|
* checked : boolean. Set to true to have the group visible by default
|
||||||
|
*/
|
||||||
|
var signGroups = [
|
||||||
|
// {label: "'To'", checked: false, match: function(s) {return s.msg.match(/to/)}},
|
||||||
|
// {label: "Storage", match: function(s) {return s.msg.match(/storage/i) || s.msg.match(/dirt/i) || s.msg.match(/sand/)}},
|
||||||
|
// {label: "Below Sealevel", match: function(s) { return s.y<64;}},
|
||||||
|
{label: "All", match: function(s) {return true}}
|
||||||
|
];
|
||||||
|
|
||||||
// Please leave the following variables here:
|
// Please leave the following variables here:
|
||||||
var markerCollection = {}; // holds groups of markers
|
var markerCollection = {}; // holds groups of markers
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function drawMapControls() {
|
|||||||
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(compassDiv);
|
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(compassDiv);
|
||||||
|
|
||||||
|
|
||||||
if (markerData.length > 0) {
|
if (signGroups.length > 0) {
|
||||||
// signpost display control
|
// signpost display control
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -62,8 +62,12 @@ function drawMapControls() {
|
|||||||
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(signControl);
|
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(signControl);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var hasSignGroup = false;
|
var hasSignGroup = false;
|
||||||
for (label in signGroups) {
|
for (idx in signGroups) {
|
||||||
|
var item = signGroups[idx];
|
||||||
|
//console.log(item);
|
||||||
|
label = item.label;
|
||||||
hasSignGroup = true;
|
hasSignGroup = true;
|
||||||
var d = document.createElement("div");
|
var d = document.createElement("div");
|
||||||
var n = document.createElement("input");
|
var n = document.createElement("input");
|
||||||
@@ -75,6 +79,11 @@ function drawMapControls() {
|
|||||||
jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);});
|
jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (item.checked) {
|
||||||
|
n.checked = true;
|
||||||
|
jQuery.each(markerCollection[label], function(i,elem) {elem.setVisible(n.checked);});
|
||||||
|
}
|
||||||
dropdownDiv.appendChild(d);
|
dropdownDiv.appendChild(d);
|
||||||
d.appendChild(n)
|
d.appendChild(n)
|
||||||
var textNode = document.createElement("text");
|
var textNode = document.createElement("text");
|
||||||
@@ -83,25 +92,6 @@ function drawMapControls() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add "others"
|
|
||||||
var n = document.createElement("input");
|
|
||||||
n.type="checkbox";
|
|
||||||
|
|
||||||
$(n).data("label","__others__");
|
|
||||||
jQuery(n).click(function(e) {
|
|
||||||
var t = $(e.target);
|
|
||||||
jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);});
|
|
||||||
});
|
|
||||||
|
|
||||||
dropdownDiv.appendChild(n);
|
|
||||||
var textNode = document.createElement("text");
|
|
||||||
if (hasSignGroup) {
|
|
||||||
textNode.innerHTML = "Others<br/>";
|
|
||||||
} else{
|
|
||||||
textNode.innerHTML = "All<br/>";
|
|
||||||
}
|
|
||||||
dropdownDiv.appendChild(textNode);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -172,11 +162,12 @@ function initMarkers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var matched = false;
|
var matched = false;
|
||||||
for (label in signGroups) {
|
for (idx in signGroups) {
|
||||||
var pattern = signGroups[label];
|
var signGroup = signGroups[idx];
|
||||||
|
var testfunc = signGroup.match;
|
||||||
|
var label = signGroup.label;
|
||||||
|
|
||||||
var r = item.msg.match(pattern);
|
if (testfunc(item)) {
|
||||||
if (r) {
|
|
||||||
matched = true;
|
matched = true;
|
||||||
|
|
||||||
if (item.type == 'sign') { iconURL = 'signpost_icon.png';}
|
if (item.type == 'sign') { iconURL = 'signpost_icon.png';}
|
||||||
@@ -246,14 +237,14 @@ function initialize() {
|
|||||||
map.overlayMapTypes.insertAt(0, new CoordMapType(new google.maps.Size(config.tileSize, config.tileSize)));
|
map.overlayMapTypes.insertAt(0, new CoordMapType(new google.maps.Size(config.tileSize, config.tileSize)));
|
||||||
|
|
||||||
google.maps.event.addListener(map, 'click', function(event) {
|
google.maps.event.addListener(map, 'click', function(event) {
|
||||||
console.log("latLng; " + event.latLng.lat() + ", " + event.latLng.lng());
|
//console.log("latLng; " + event.latLng.lat() + ", " + event.latLng.lng());
|
||||||
|
|
||||||
var pnt = map.getProjection().fromLatLngToPoint(event.latLng);
|
var pnt = map.getProjection().fromLatLngToPoint(event.latLng);
|
||||||
console.log("point: " + pnt);
|
//console.log("point: " + pnt);
|
||||||
|
|
||||||
var pxx = pnt.x * config.tileSize * Math.pow(2, config.maxZoom);
|
var pxx = pnt.x * config.tileSize * Math.pow(2, config.maxZoom);
|
||||||
var pxy = pnt.y * config.tileSize * Math.pow(2, config.maxZoom);
|
var pxy = pnt.y * config.tileSize * Math.pow(2, config.maxZoom);
|
||||||
console.log("pixel: " + pxx + ", " + pxy);
|
//console.log("pixel: " + pxx + ", " + pxy);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user