Mercurial > hg > batmud > gmap2
view markers.js @ 184:fc2c2385049b gmap2
Make map markers change visibility with selections as well.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 12 Mar 2014 01:23:05 +0200 |
parents | d314c48d16a9 |
children | ddef2840151e |
line wrap: on
line source
// $Id: markers.js 2284 2009-09-21 12:47:20Z jeskko $ // // List of marker types // var pmapMarkerTypes = [ ["Guilds", "guild"], ["PCities", "pcity"], ["Shrines", "shrine"], ["Areas", "default"], ]; var pmapMMgr; var pmapAreas = []; var pmapMarkers = []; var pmapMIndex = 0; var pmapMarkerInfo = []; var pmapSideBuiltinHTML, pmapSidePublicHTML, pmapSidePrivateHTML; var pmapInfoWindow; function pmapMyClick(i) { pmap.panTo(pmapMarkers[i].getPosition()); setTimeout("pmapShowInfo("+ i +")", 1000); } function pmapShowInfo(i) { google.maps.event.trigger(pmapMarkers[i], "click"); } function pmapCreateMarker(point,name,html,icon,type,continent,mclass) { var marker = new MarkerWithLabel( { position: point, icon: icon, draggable: false, labelContent: name, labelAnchor: new google.maps.Point(22, 0), labelClass: "labels", labelStyle: {opacity: 0.75} }); google.maps.event.addListener(marker, "click", function() { pmapInfoWindow.setContent("<div class=\"infowin\">"+html+"</div>"); pmapInfoWindow.open(pmap, this); }); if (mclass == "builtin") pmapSideBuiltinHTML += '<a class="c_'+continent+'" id="marker'+pmapMIndex+'" href="javascript:pmapMyClick('+ pmapMIndex +')">'+ name +'</a>'; if (mclass == "private") pmapSidePrivateHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + name + '</a><br>'; if (mclass == "public") pmapSidePublicHTML += '<a href="javascript:pmapMyClick(' + pmapMIndex + ')">' + name + '</a><br>'; pmapMarkers[pmapMIndex] = marker; pmapMarkerInfo[pmapMIndex] = [type, continent]; pmapMIndex++; return marker; } function pmapCreateMarkerType(m, mclass) { var type = m["type"]; if (type == "") type = "default"; if (name.indexOf('FERRY') == 0) type = "ferry"; var ppos = pmapMapCoordsToLatLng(new google.maps.Point(m["x"] * 2 + 1, m["y"] * 2 + 1), 7); var marker = pmapCreateMarker(ppos, m["name"], m["html"], pmapIcons[type], type, m["continent"], mclass); if (pmapAreas[type] == undefined) pmapAreas[type] = []; pmapAreas[type].push(marker); } function pmapAddMarkers(mlist, minzoom, maxzoom) { if (mlist) pmapMMgr.addMarkers(mlist, minzoom, maxzoom); } function pmapInitializeMarkers() { pmapMMgr = new MarkerManager(pmap); google.maps.event.addListener(pmapMMgr, 'loaded', pmapLoadMarkers); } function pmapLoadMarkers() { pmapInfoWindow = new google.maps.InfoWindow; google.maps.event.addListener(pmap, 'click', function() { pmapInfoWindow.close(); }); // // Parse regular markers from JSON // XDownloadUrl("markers.json", function(data, responseCode) { var markers = JSON.parse(data); pmapSideBuiltinHTML = ""; pmapSidePublicHTML = ""; pmapSidePrivateHTML = ""; for (var nid = 0; nid < markers.length; nid++) { pmapCreateMarkerType(markers[nid], "builtin"); } pmapAddMarkers(pmapAreas["default"], 7, 11); pmapAddMarkers(pmapAreas["guild"], 6, 11); pmapAddMarkers(pmapAreas["shrine"], 7, 11); pmapAddMarkers(pmapAreas["ferry"], 4, 11); pmapAddMarkers(pmapAreas["city"], 4, 11); pmapAddMarkers(pmapAreas["pcity"], 8, 11); pmapAddMarkers(pmapAreas["fort"], 8, 11); pmapMMgr.refresh(); document.getElementById("sidecontent").innerHTML = pmapSideBuiltinHTML; }); // // Parse tradelane markers from another JSON // XDownloadUrl("tradelane.json", function(data,responseCode) { var markers = JSON.parse(data); for (var nid = 0; nid < markers.length; nid++) { pmapCreateMarkerType(markers[nid], "tradelane"); } pmapAddMarkers(pmapAreas["tradelane"], 5, 11); pmapMMgr.refresh(); }); // // Create GMap polylines from tradelane line data // XDownloadUrl("troverlay.json", function(data,responseCode) { var lines = JSON.parse(data); // Go through array of line elements for (var nid = 0; nid < lines.length; nid++) { var points = lines[nid]; var coords = []; // Create polyline points for (var npt = 0; npt < points.length; npt++) { var pt = points[npt]; coords.push(pmapMapCoordsToLatLng(new google.maps.Point(pt["x"] * 2 + 1, pt["y"] * 2 + 1), 7)); } // Create new polyline and add it to map overlay var poly = new google.maps.Polyline({ path: coords, strokeColor: "#ffffff", strokeWeight: 1, strokeOpacity: 0.7 }); poly.setMap(pmap); } }); // // Create map control elements // var str = ""; var n = 0; for (var i = 0; i < pmapContinents.length; i++) { var q = pmapContinents[i]; if (q != null) { var c = q[0]; str += "<span id=\"sp"+c+"\"><a href=\"javascript:pmapToggleVisContinent('"+c+"')\">"+c+"</a></span>\n"; if (n == 2) str += "<br />\n"; n++; } } str += "<span id=\"spall_c\"><a href=\"javascript:pmapToggleVisContinent('all_c')\">All</a></span>\n"; str += "<br /><br />\n"; n = 0; for (var i = 0; i < pmapMarkerTypes.length; i++) { var q = pmapMarkerTypes[i]; if (q != null) { var c = q[1]; str += "<span id=\"sp"+c+"\"><a href=\"javascript:pmapToggleVisType('"+c+"')\">"+pmapMarkerTypes[i][0]+"</a></span>\n"; if (n == 2) str += "<br />\n"; n++; } } str += "<span id=\"spall_t\"><a href=\"javascript:pmapToggleVisType('all_t')\">All</a></span>\n"; document.getElementById("controls").innerHTML = str; pmapSetVisContinent("all_c", true); pmapSetVisType("all_t", true); pmapUpdateVisible(); } // // Map menu / sidebar control code // var markerVisStates = []; function pmapSetVisState(c, show) { markerVisStates[c] = show; document.getElementById("sp" + c).style.background = show ? "white" : "red"; } function pmapUpdateVisible() { for (var i = 0; i < pmapMarkerInfo.length; i++) { var show = markerVisStates[pmapMarkerInfo[i][0]] && markerVisStates[pmapMarkerInfo[i][1]]; document.getElementById("marker" + i).style.display = show ? "block" : "none"; pmapMarkers[i].setVisible(show); } } function pmapSetVisContinent(c, show) { pmapSetVisState(c, show); if (c == "all_c") { for (var i = 0; i < pmapContinents.length; i++) { var q = pmapContinents[i]; if (q != null) pmapSetVisState(q[0], show); } } } function pmapSetVisType(c, show) { pmapSetVisState(c, show); if (c == "all_t") { for (var i = 0; i < pmapMarkerTypes.length; i++) { var q = pmapMarkerTypes[i]; if (q != null) pmapSetVisState(q[1], show); } } } function pmapToggleVisContinent(c) { var first = false; if (c != "all_c") { for (var i = 0; i < pmapContinents.length; i++) { var q = pmapContinents[i]; if (q != null) if (markerVisStates[pmapBuiltin[i][0]]) first = true; } if (first) { pmapSetVisContinent("all_c", false); pmapSetVisContinent(c, true); } } if (!first) { pmapSetVisContinent(c, !markerVisStates[c]); } pmapUpdateVisible(); } function pmapToggleVisType(c) { pmapSetVisType(c, !markerVisStates[c]); pmapUpdateVisible(); }