/src/com/google/maps/extras/arcgislink/ArcGISMapType.as

http://gmaps-utility-library-flash.googlecode.com/ · ActionScript · 87 lines · 64 code · 10 blank · 13 comment · 13 complexity · d96cec32aea49f09d87afe9c8bd9bc76 MD5 · raw file

  1. /*
  2. * ArcGIS for Google Maps Flash API
  3. *
  4. * License http://www.apache.org/licenses/LICENSE-2.0
  5. */
  6. /**
  7. * @author nianwei at gmail dot com
  8. */
  9. package com.google.maps.extras.arcgislink {
  10. import com.google.maps.MapType;
  11. import com.google.maps.MapTypeOptions;
  12. import com.google.maps.interfaces.*;
  13. import flash.events.*;
  14. /**
  15. * A customized map type that can be used as background map.
  16. */
  17. public class ArcGISMapType extends MapType {// MapType already implements IEventDispatcher {
  18. private var projection_:ArcGISTileConfig;
  19. public function ArcGISMapType(tileLayers:*, opt_typeOpts:ArcGISMapTypeOptions=null) {
  20. var me:ArcGISMapType = this;
  21. opt_typeOpts=opt_typeOpts || new ArcGISMapTypeOptions();
  22. var layers:Array;
  23. var i:int;
  24. if (tileLayers is String){
  25. layers = [new ArcGISTileLayer(tileLayers)];
  26. } else if (tileLayers is Array){
  27. if (tileLayers[0] is String){
  28. layers = [];
  29. for (i = 0; i < tileLayers.length; i++){
  30. layers.push(new ArcGISTileLayer(tileLayers[i]));
  31. }
  32. } else {
  33. layers = tileLayers;
  34. }
  35. }
  36. var layer0:ArcGISTileLayer=layers[0] as ArcGISTileLayer;
  37. var prj:ArcGISTileConfig=opt_typeOpts.projection||layer0.getProjection();
  38. // var gOpts:MapTypeOptions=new MapTypeOptions({tileSize: prj.getTileSize()});
  39. // ArcGISUtil.augmentObject(opt_typeOpts, gOpts);
  40. opt_typeOpts.tileSize =prj.getTileSize();
  41. super(layers, prj, opt_typeOpts.name || layer0.getMapService().name, opt_typeOpts);
  42. function checkLoaded():void{
  43. if (layersLoaded == layers.length){
  44. me.init_(layers, opt_typeOpts);
  45. me.dispatchEvent(new ServiceEvent(ServiceEvent.LOAD));
  46. }
  47. }
  48. var layersLoaded:int;
  49. for (i = 0 ; i < layers.length; i++){
  50. var layer:ArcGISTileLayer = layers[i];
  51. if (opt_typeOpts.projection){
  52. layer.projection_ = opt_typeOpts.projection;
  53. }
  54. var svc:MapService = layer.getMapService();
  55. if (svc.hasLoaded()){
  56. layersLoaded++;
  57. }else {
  58. svc.addEventListener(ServiceEvent.LOAD, function(evt:Event):void{
  59. layersLoaded++;
  60. checkLoaded();
  61. });
  62. }
  63. }
  64. checkLoaded();
  65. }
  66. private function init_(tileLayers:Array, opt_typeOpts:ArcGISMapTypeOptions):void{
  67. var layer:ArcGISTileLayer = tileLayers[0] as ArcGISTileLayer;
  68. this.projection_ = layer.getProjection();
  69. }
  70. public override function getTileSize():Number {
  71. return this.projection_?this.projection_.getTileSize():super.getTileSize();
  72. }
  73. public override function getProjection():IProjection {
  74. return this.projection_?this.projection_:super.getProjection();
  75. }
  76. }
  77. }