/net/systemeD/potlatch2/collections/VectorBackgrounds.as

https://github.com/harry-wood/potlatch2 · ActionScript · 135 lines · 112 code · 19 blank · 4 comment · 38 complexity · 95d60ab84534ff50f55974c51804ed97 MD5 · raw file

  1. package net.systemeD.potlatch2.collections {
  2. import flash.events.*
  3. import flash.net.*
  4. import flash.system.Security;
  5. import net.systemeD.halcyon.Map;
  6. import net.systemeD.halcyon.MapPaint;
  7. import net.systemeD.halcyon.connection.Connection;
  8. import net.systemeD.halcyon.FileBank;
  9. import net.systemeD.potlatch2.utils.*;
  10. public class VectorBackgrounds extends EventDispatcher {
  11. private static const GLOBAL_INSTANCE:VectorBackgrounds = new VectorBackgrounds();
  12. public static function instance():VectorBackgrounds { return GLOBAL_INSTANCE; }
  13. private var _map:Map;
  14. public function init(map:Map):void {
  15. _map = map;
  16. FileBank.getInstance().addFromFile("vectors.xml", onConfigLoad);
  17. }
  18. private function onConfigLoad(fileBank:FileBank, filename:String):void {
  19. var xml:XML = new XML(fileBank.getAsString(filename));
  20. // reconstitute results as Array, as we can't run .forEach over an XMLList
  21. var sets:Array = [];
  22. for each (var set:XML in xml.set) { sets.push(set); }
  23. // use .forEach to avoid closure problem (http://stackoverflow.com/questions/422784/how-to-fix-closure-problem-in-actionscript-3-as3#3971784)
  24. sets.forEach(function(set:XML, index:int, array:Array):void {
  25. // Skip if just an example
  26. if (!(set.@disabled=="true")) {
  27. if (!(set.policyfile == undefined)) {
  28. Security.loadPolicyFile(String(set.policyfile));
  29. }
  30. // Check for any bounds for the vector layer. Obviously won't kick in during subsequent panning
  31. var validBbox:Boolean = false;
  32. if (set.@minlon && String(set.@minlon) != '') {
  33. if (((_map.edge_l>set.@minlon && _map.edge_l<set.@maxlon) ||
  34. (_map.edge_r>set.@minlon && _map.edge_r<set.@maxlon) ||
  35. (_map.edge_l<set.@minlon && _map.edge_r>set.@maxlon)) &&
  36. ((_map.edge_b>set.@minlat && _map.edge_b<set.@maxlat) ||
  37. (_map.edge_t>set.@minlat && _map.edge_t<set.@maxlat) ||
  38. (_map.edge_b<set.@minlat && _map.edge_t>set.@maxlat))) {
  39. validBbox = true;
  40. } else {
  41. validBbox = false; // out of bounds
  42. }
  43. } else {
  44. validBbox = true; // global set
  45. }
  46. if (validBbox) {
  47. var name:String = (set.name == undefined) ? null : String(set.name);
  48. var loader:String = set.loader;
  49. switch (loader) {
  50. case "TrackLoader":
  51. break;
  52. case "KMLImporter":
  53. break;
  54. case "GPXImporter":
  55. if (set.url) {
  56. if (set.@loaded == "true") {
  57. name ||= 'GPX file';
  58. var gpx_url:String = String(set.url);
  59. var connection:Connection = new Connection(name, gpx_url, null, null);
  60. var gpx:GpxImporter=new GpxImporter(connection, _map,
  61. function(connection:Connection,options:Object,success:Boolean,message:String=null):void {
  62. if (!success) return;
  63. var paint:MapPaint = _map.addLayer(connection, "stylesheets/gpx.css");
  64. paint.updateEntityUIs(false, false);
  65. dispatchEvent(new Event("layers_changed"));
  66. }, false);
  67. gpx.importFromRemoteFiles([gpx_url]);
  68. } else {
  69. trace("VectorBackgrounds: configured but not loaded isn't supported yet");
  70. }
  71. } else {
  72. trace("VectorBackgrounds: no url for GPXImporter");
  73. }
  74. break;
  75. case "BugLoader":
  76. if (set.url && set.apiKey) {
  77. name ||= 'Bugs';
  78. var bugLoader:BugLoader = new BugLoader(_map, String(set.url), String(set.apikey), name, String(set.details));
  79. if (set.@loaded == "true") {
  80. bugLoader.load();
  81. }
  82. } else {
  83. trace("VectorBackgrounds: error with BugLoader");
  84. }
  85. break;
  86. case "BikeShopLoader":
  87. if (set.url) {
  88. name ||= 'Missing Bike Shops'
  89. var bikeShopLoader:BikeShopLoader = new BikeShopLoader(_map, String(set.url), name);
  90. if (set.@loaded == "true") {
  91. bikeShopLoader.load();
  92. }
  93. } else {
  94. trace("VectorBackgrounds: no url for BikeShopLoader");
  95. }
  96. break;
  97. case "SnapshotLoader":
  98. if (set.url) {
  99. name ||= 'Snapshot Server'
  100. var snapshotLoader:SnapshotLoader = new SnapshotLoader(_map, String(set.url), name, String(set.style));
  101. if (set.@loaded == "true") {
  102. snapshotLoader.load();
  103. }
  104. } else {
  105. trace("VectorBackgrounds: no url for SnapshotLoader");
  106. }
  107. break;
  108. default:
  109. trace("VectorBackgrounds: unknown loader: " + loader);
  110. }
  111. }
  112. }
  113. });
  114. }
  115. }
  116. }