Преглед изворни кода

git-svn-id: https://192.168.57.71/svn/hbghj@14 201dd7a2-ec1b-f84b-8b06-88221118ff88

yuanxd пре 9 година
родитељ
комит
91f084e092
100 измењених фајлова са 12400 додато и 0 уклоњено
  1. 25 0
      gkaq/gis-flex/trunk/.actionScriptProperties
  2. 2 0
      gkaq/gis-flex/trunk/.flexProperties
  3. 30 0
      gkaq/gis-flex/trunk/.project
  4. 3 0
      gkaq/gis-flex/trunk/.settings/org.eclipse.core.resources.prefs
  5. 6 0
      gkaq/gis-flex/trunk/html-template/history/history.css
  6. 678 0
      gkaq/gis-flex/trunk/html-template/history/history.js
  7. 29 0
      gkaq/gis-flex/trunk/html-template/history/historyFrame.html
  8. 108 0
      gkaq/gis-flex/trunk/html-template/index.template.html
  9. BIN
      gkaq/gis-flex/trunk/html-template/playerProductInstall.swf
  10. 777 0
      gkaq/gis-flex/trunk/html-template/swfobject.js
  11. BIN
      gkaq/gis-flex/trunk/libs/AdvancedDataGrid.swc
  12. BIN
      gkaq/gis-flex/trunk/libs/FlexBevLib.swc
  13. BIN
      gkaq/gis-flex/trunk/libs/LegendTree.swc
  14. BIN
      gkaq/gis-flex/trunk/libs/NewProgressBar.swc
  15. BIN
      gkaq/gis-flex/trunk/libs/TreeComboBox.swc
  16. BIN
      gkaq/gis-flex/trunk/libs/agslib-3.7-2014-11-06.swc
  17. 390 0
      gkaq/gis-flex/trunk/src/Main.mxml
  18. 305 0
      gkaq/gis-flex/trunk/src/com/skins/common/CxTitleWindow.mxml
  19. 21 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/AdvanceDataGridHeaderSkin.mxml
  20. 238 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/ButtonRectImgSkin.mxml
  21. 113 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/ButtonSkin.mxml
  22. 223 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/ComboBoxButtonSkin.mxml
  23. 247 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/DateTimeInputSkin.mxml
  24. 178 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/LeftMenuChildSkin.mxml
  25. 79 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/LeftMenuSkin.mxml
  26. 36 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/SkinnableContainerSkin.mxml
  27. 255 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/TextInputSkin.mxml
  28. 308 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinBWXQSkin.mxml
  29. 308 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinHighSkin.mxml
  30. 300 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinSkin.mxml
  31. 112 0
      gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWindowCloseButtonSkin.mxml
  32. 228 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/AisMgr.as
  33. 129 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/BwxqModel.mxml
  34. 201 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/GpsMgr.as
  35. 157 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/HscbGeometry.as
  36. 387 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/LocusQueryPanel.mxml
  37. 30 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/QueryButton.mxml
  38. 53 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/RemarkSymbol.as
  39. 10 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/ShipMgr.as
  40. 159 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/ShipViewPanel.mxml
  41. 32 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ais/TuliModel.mxml
  42. 229 0
      gkaq/gis-flex/trunk/src/com/xt/hb/cfg/MapConfig.xml
  43. 21 0
      gkaq/gis-flex/trunk/src/com/xt/hb/cfg/MenuConfig.xml
  44. 13 0
      gkaq/gis-flex/trunk/src/com/xt/hb/cfg/ServiceConfig.as
  45. 72 0
      gkaq/gis-flex/trunk/src/com/xt/hb/common/InfoModel.mxml
  46. 109 0
      gkaq/gis-flex/trunk/src/com/xt/hb/entity/T_R_MENU.as
  47. 31 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/DataConfigEvent.as
  48. 18 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/MenusEvent.as
  49. 31 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/NavigationEvent.as
  50. 15 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/PageEvent.as
  51. 17 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/QueryLayerEvent.as
  52. 16 0
      gkaq/gis-flex/trunk/src/com/xt/hb/events/TCKZCheckBoxClickEvent.as
  53. 20 0
      gkaq/gis-flex/trunk/src/com/xt/hb/modules/BaseModule.as
  54. 30 0
      gkaq/gis-flex/trunk/src/com/xt/hb/modules/MapModule.mxml
  55. 73 0
      gkaq/gis-flex/trunk/src/com/xt/hb/object/FieldObject.as
  56. 62 0
      gkaq/gis-flex/trunk/src/com/xt/hb/server/QueryAction.as
  57. 72 0
      gkaq/gis-flex/trunk/src/com/xt/hb/server/XMLDecoder.as
  58. 88 0
      gkaq/gis-flex/trunk/src/com/xt/hb/tdt/MapOperateModel.mxml
  59. 120 0
      gkaq/gis-flex/trunk/src/com/xt/hb/tdt/TianDiTuTiledMapServiceLayer.as
  60. 307 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/DateTime.mxml
  61. 541 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/PageDataGridCtrl.mxml
  62. 17 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/QTextInput.as
  63. 42 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/TextInput.as
  64. 333 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeItemIconRenderer.as
  65. 268 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeItemLinesRenderer.as
  66. 22 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeWithIcon.as
  67. 22 0
      gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeWithLines.as
  68. 122 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/AisUtils.as
  69. 58 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/CommonUtility.as
  70. 85 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/CommonUtils.as
  71. 175 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/ConfigUtil.as
  72. 84 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/ConstUtil.as
  73. 158 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/FieldsUtility.as
  74. 57 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/GisUtils.as
  75. 35 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/GlobalData.as
  76. 220 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/MapUtils.as
  77. 26 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/RemoteUtils.as
  78. 226 0
      gkaq/gis-flex/trunk/src/com/xt/hb/utils/ServicesUtility.as
  79. 87 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/AqtcWindow.mxml
  80. 135 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/Main_MenuNavigation.as
  81. 387 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/MapTools.mxml
  82. 351 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/ResShowModel.mxml
  83. 171 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/TCKZModel.mxml
  84. 34 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/TypeBase.as
  85. 420 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/resLocation.as
  86. 823 0
      gkaq/gis-flex/trunk/src/com/xt/hb/views/show.as
  87. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/firstEnable.png
  88. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/firstPage.png
  89. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/lastEnable.png
  90. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/lastPage.png
  91. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/nextEnable.png
  92. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/nextPage.png
  93. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/prePage.png
  94. BIN
      gkaq/gis-flex/trunk/src/flexResources/Perpage/previousEnable.png
  95. BIN
      gkaq/gis-flex/trunk/src/flexResources/arrowLeft1.png
  96. BIN
      gkaq/gis-flex/trunk/src/flexResources/arrowRight.png
  97. BIN
      gkaq/gis-flex/trunk/src/flexResources/map/aqtc.png
  98. BIN
      gkaq/gis-flex/trunk/src/flexResources/map/clear1.png
  99. BIN
      gkaq/gis-flex/trunk/src/flexResources/map/cxtj.png
  100. BIN
      gkaq/gis-flex/trunk/src/flexResources/map/expert.png

+ 25 - 0
gkaq/gis-flex/trunk/.actionScriptProperties

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<actionScriptProperties analytics="false" mainApplicationPath="Main.mxml" projectUUID="9ea80632-13aa-4753-8a37-5034e41af5a7" version="11">
+  <compiler additionalCompilerArguments="-services &quot;E:\hbaq\dev\code\gisServer\src\main\webapp\WEB-INF\flex\services-config.xml&quot; -locale=en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderLocation="E:/hbaq/dev/code/gisServer/src/main/webapp/flexs" outputFolderPath="bin-debug" removeUnusedRSL="true" rootURL="" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
+    <compilerSourcePath/>
+    <libraryPath defaultLinkType="0">
+      <libraryPathEntry kind="4" path="">
+        <excludedEntries>
+          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
+          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/core.swc" useDefaultLinkType="false"/>
+        </excludedEntries>
+      </libraryPathEntry>
+      <libraryPathEntry kind="1" linkType="1" path="libs"/>
+    </libraryPath>
+    <sourceAttachmentPath>
+      <sourceAttachmentPathEntry kind="3" linkType="1" path="E:/projects/hbaq/dev/code/gisFlex/libs/agslib-3.7-2014-11-06.swc" sourcepath="E:/projects/hbaq/dev/code/ArcGIS_Flex/src" useDefaultLinkType="false"/>
+    </sourceAttachmentPath>
+  </compiler>
+  <applications>
+    <application path="Main.mxml"/>
+  </applications>
+  <modules/>
+  <workers/>
+  <buildCSSFiles/>
+  <flashCatalyst validateFlashCatalystCompatibility="false"/>
+</actionScriptProperties>

+ 2 - 0
gkaq/gis-flex/trunk/.flexProperties

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<flexProperties enableServiceManager="false" flexServerFeatures="4" flexServerType="2" serverContextRoot="/gisServer" serverRoot="E:/hbaq/dev/code/gisServer/src/main/webapp" serverRootURL="http://localhost:8080/gisServer" toolCompile="true" useServerFlexSDK="false" version="2"/>

+ 30 - 0
gkaq/gis-flex/trunk/.project

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>gisFlex</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.adobe.flexbuilder.project.flexbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.adobe.flexbuilder.project.flexnature</nature>
+		<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>bin-debug</name>
+			<type>2</type>
+			<location>E:/hbaq/dev/code/gisServer/src/main/webapp/flexs</location>
+		</link>
+		<link>
+			<name>bin-release</name>
+			<type>2</type>
+			<location>E:/hbaq/dev/code/gisServer/src/main/webapp/flexs2</location>
+		</link>
+	</linkedResources>
+</projectDescription>

+ 3 - 0
gkaq/gis-flex/trunk/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+#Tue Jan 05 22:02:31 CST 2016
+eclipse.preferences.version=1
+encoding/<project>=utf-8

+ 6 - 0
gkaq/gis-flex/trunk/html-template/history/history.css

@@ -0,0 +1,6 @@
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }

+ 678 - 0
gkaq/gis-flex/trunk/html-template/history/history.js

@@ -0,0 +1,678 @@
+BrowserHistoryUtils = {
+    addEvent: function(elm, evType, fn, useCapture) {
+        useCapture = useCapture || false;
+        if (elm.addEventListener) {
+            elm.addEventListener(evType, fn, useCapture);
+            return true;
+        }
+        else if (elm.attachEvent) {
+            var r = elm.attachEvent('on' + evType, fn);
+            return r;
+        }
+        else {
+            elm['on' + evType] = fn;
+        }
+    }
+}
+
+BrowserHistory = (function() {
+    // type of browser
+    var browser = {
+        ie: false, 
+        ie8: false, 
+        firefox: false, 
+        safari: false, 
+        opera: false, 
+        version: -1
+    };
+
+    // Default app state URL to use when no fragment ID present
+    var defaultHash = '';
+
+    // Last-known app state URL
+    var currentHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHash = document.location.hash;
+
+    // History frame source URL prefix (used only by IE)
+    var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+    // History maintenance (used only by Safari)
+    var currentHistoryLength = -1;
+    
+    // Flag to denote the existence of onhashchange
+    var browserHasHashChange = false;
+
+    var historyHash = [];
+
+    var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
+
+    var backStack = [];
+    var forwardStack = [];
+
+    var currentObjectId = null;
+
+    //UserAgent detection
+    var useragent = navigator.userAgent.toLowerCase();
+
+    if (useragent.indexOf("opera") != -1) {
+        browser.opera = true;
+    } else if (useragent.indexOf("msie") != -1) {
+        browser.ie = true;
+        browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+        if (browser.version == 8)
+        {
+            browser.ie = false;
+            browser.ie8 = true;
+        }
+    } else if (useragent.indexOf("safari") != -1) {
+        browser.safari = true;
+        browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+    } else if (useragent.indexOf("gecko") != -1) {
+        browser.firefox = true;
+    }
+
+    if (browser.ie == true && browser.version == 7) {
+        window["_ie_firstload"] = false;
+    }
+
+    function hashChangeHandler()
+    {
+        currentHref = document.location.href;
+        var flexAppUrl = getHash();
+        //ADR: to fix multiple
+        if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+            var pl = getPlayers();
+            for (var i = 0; i < pl.length; i++) {
+                pl[i].browserURLChange(flexAppUrl);
+            }
+        } else {
+            getPlayer().browserURLChange(flexAppUrl);
+        }
+    }
+
+    // Accessor functions for obtaining specific elements of the page.
+    function getHistoryFrame()
+    {
+        return document.getElementById('ie_historyFrame');
+    }
+
+    function getFormElement()
+    {
+        return document.getElementById('safari_formDiv');
+    }
+
+    function getRememberElement()
+    {
+        return document.getElementById("safari_remember_field");
+    }
+
+    // Get the Flash player object for performing ExternalInterface callbacks.
+    // Updated for changes to SWFObject2.
+    function getPlayer(id) {
+        var i;
+
+		if (id && document.getElementById(id)) {
+			var r = document.getElementById(id);
+			if (typeof r.SetVariable != "undefined") {
+				return r;
+			}
+			else {
+				var o = r.getElementsByTagName("object");
+				var e = r.getElementsByTagName("embed");
+                for (i = 0; i < o.length; i++) {
+                    if (typeof o[i].browserURLChange != "undefined")
+                        return o[i];
+                }
+                for (i = 0; i < e.length; i++) {
+                    if (typeof e[i].browserURLChange != "undefined")
+                        return e[i];
+                }
+			}
+		}
+		else {
+			var o = document.getElementsByTagName("object");
+			var e = document.getElementsByTagName("embed");
+            for (i = 0; i < e.length; i++) {
+                if (typeof e[i].browserURLChange != "undefined")
+                {
+                    return e[i];
+                }
+            }
+            for (i = 0; i < o.length; i++) {
+                if (typeof o[i].browserURLChange != "undefined")
+                {
+                    return o[i];
+                }
+            }
+		}
+		return undefined;
+	}
+    
+    function getPlayers() {
+        var i;
+        var players = [];
+        if (players.length == 0) {
+            var tmp = document.getElementsByTagName('object');
+            for (i = 0; i < tmp.length; i++)
+            {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        if (players.length == 0 || players[0].object == null) {
+            var tmp = document.getElementsByTagName('embed');
+            for (i = 0; i < tmp.length; i++)
+            {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        return players;
+    }
+
+	function getIframeHash() {
+		var doc = getHistoryFrame().contentWindow.document;
+		var hash = String(doc.location.search);
+		if (hash.length == 1 && hash.charAt(0) == "?") {
+			hash = "";
+		}
+		else if (hash.length >= 2 && hash.charAt(0) == "?") {
+			hash = hash.substring(1);
+		}
+		return hash;
+	}
+
+    /* Get the current location hash excluding the '#' symbol. */
+    function getHash() {
+       // It would be nice if we could use document.location.hash here,
+       // but it's faulty sometimes.
+       var idx = document.location.href.indexOf('#');
+       return (idx >= 0) ? document.location.href.substr(idx+1) : '';
+    }
+
+    /* Get the current location hash excluding the '#' symbol. */
+    function setHash(hash) {
+       // It would be nice if we could use document.location.hash here,
+       // but it's faulty sometimes.
+       if (hash == '') hash = '#'
+       document.location.hash = hash;
+    }
+
+    function createState(baseUrl, newUrl, flexAppUrl) {
+        return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
+    }
+
+    /* Add a history entry to the browser.
+     *   baseUrl: the portion of the location prior to the '#'
+     *   newUrl: the entire new URL, including '#' and following fragment
+     *   flexAppUrl: the portion of the location following the '#' only
+     */
+    function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+        //delete all the history entries
+        forwardStack = [];
+
+        if (browser.ie) {
+            //Check to see if we are being asked to do a navigate for the first
+            //history entry, and if so ignore, because it's coming from the creation
+            //of the history iframe
+            if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
+                currentHref = initialHref;
+                return;
+            }
+            if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
+                newUrl = baseUrl + '#' + defaultHash;
+                flexAppUrl = defaultHash;
+            } else {
+                // for IE, tell the history frame to go somewhere without a '#'
+                // in order to get this entry into the browser history.
+                getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+            }
+            setHash(flexAppUrl);
+        } else {
+
+            //ADR
+            if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
+                initialState = createState(baseUrl, newUrl, flexAppUrl);
+            } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+                backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
+            }
+
+            if (browser.safari && !browserHasHashChange) {
+                // for Safari, submit a form whose action points to the desired URL
+                if (browser.version <= 419.3) {
+                    var file = window.location.pathname.toString();
+                    file = file.substring(file.lastIndexOf("/")+1);
+                    getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
+                    //get the current elements and add them to the form
+                    var qs = window.location.search.substring(1);
+                    var qs_arr = qs.split("&");
+                    for (var i = 0; i < qs_arr.length; i++) {
+                        var tmp = qs_arr[i].split("=");
+                        var elem = document.createElement("input");
+                        elem.type = "hidden";
+                        elem.name = tmp[0];
+                        elem.value = tmp[1];
+                        document.forms.historyForm.appendChild(elem);
+                    }
+                    document.forms.historyForm.submit();
+                } else {
+                    top.location.hash = flexAppUrl;
+                }
+                // We also have to maintain the history by hand for Safari
+                historyHash[history.length] = flexAppUrl;
+                _storeStates();
+            } else {
+                // Otherwise, just tell the browser to go there
+                setHash(flexAppUrl);
+            }
+        }
+        backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+    }
+
+    function _storeStates() {
+        if (browser.safari) {
+            getRememberElement().value = historyHash.join(",");
+        }
+    }
+
+    function handleBackButton() {
+        //The "current" page is always at the top of the history stack.
+        var current = backStack.pop();
+        if (!current) { return; }
+        var last = backStack[backStack.length - 1];
+        if (!last && backStack.length == 0){
+            last = initialState;
+        }
+        forwardStack.push(current);
+    }
+
+    function handleForwardButton() {
+        //summary: private method. Do not call this directly.
+
+        var last = forwardStack.pop();
+        if (!last) { return; }
+        backStack.push(last);
+    }
+
+    function handleArbitraryUrl() {
+        //delete all the history entries
+        forwardStack = [];
+    }
+
+    /* Called periodically to poll to see if we need to detect navigation that has occurred */
+    function checkForUrlChange() {
+
+        if (browser.ie) {
+            if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
+                //This occurs when the user has navigated to a specific URL
+                //within the app, and didn't use browser back/forward
+                //IE seems to have a bug where it stops updating the URL it
+                //shows the end-user at this point, but programatically it
+                //appears to be correct.  Do a full app reload to get around
+                //this issue.
+                if (browser.version < 7) {
+                    currentHref = document.location.href;
+                    document.location.reload();
+                } else {
+					if (getHash() != getIframeHash()) {
+						// this.iframe.src = this.blankURL + hash;
+						var sourceToSet = historyFrameSourcePrefix + getHash();
+						getHistoryFrame().src = sourceToSet;
+                        currentHref = document.location.href;
+					}
+                }
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange) {
+            // For Safari, we have to check to see if history.length changed.
+            if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
+                //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
+                var flexAppUrl = getHash();
+                if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */)
+                {    
+                    // If it did change and we're running Safari 3.x or earlier, 
+                    // then we have to look the old state up in our hand-maintained 
+                    // array since document.location.hash won't have changed, 
+                    // then call back into BrowserManager.
+                currentHistoryLength = history.length;
+                    flexAppUrl = historyHash[currentHistoryLength];
+                }
+
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                    getPlayer().browserURLChange(flexAppUrl);
+                }
+                _storeStates();
+            }
+        }
+        if (browser.firefox && !browserHasHashChange) {
+            if (currentHref != document.location.href) {
+                var bsl = backStack.length;
+
+                var urlActions = {
+                    back: false, 
+                    forward: false, 
+                    set: false
+                }
+
+                if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
+                    urlActions.back = true;
+                    // FIXME: could this ever be a forward button?
+                    // we can't clear it because we still need to check for forwards. Ugg.
+                    // clearInterval(this.locationTimer);
+                    handleBackButton();
+                }
+                
+                // first check to see if we could have gone forward. We always halt on
+                // a no-hash item.
+                if (forwardStack.length > 0) {
+                    if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {
+                        urlActions.forward = true;
+                        handleForwardButton();
+                    }
+                }
+
+                // ok, that didn't work, try someplace back in the history stack
+                if ((bsl >= 2) && (backStack[bsl - 2])) {
+                    if (backStack[bsl - 2].flexAppUrl == getHash()) {
+                        urlActions.back = true;
+                        handleBackButton();
+                    }
+                }
+                
+                if (!urlActions.back && !urlActions.forward) {
+                    var foundInStacks = {
+                        back: -1, 
+                        forward: -1
+                    }
+
+                    for (var i = 0; i < backStack.length; i++) {
+                        if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.back = i;
+                        }
+                    }
+                    for (var i = 0; i < forwardStack.length; i++) {
+                        if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.forward = i;
+                        }
+                    }
+                    handleArbitraryUrl();
+                }
+
+                // Firefox changed; do a callback into BrowserManager to tell it.
+                currentHref = document.location.href;
+                var flexAppUrl = getHash();
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                    getPlayer().browserURLChange(flexAppUrl);
+                }
+            }
+        }
+    }
+
+    var _initialize = function () {
+        
+        browserHasHashChange = ("onhashchange" in document.body);
+        
+        if (browser.ie)
+        {
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
+                }
+            }
+            historyFrameSourcePrefix = iframe_location + "?";
+            var src = historyFrameSourcePrefix;
+
+            var iframe = document.createElement("iframe");
+            iframe.id = 'ie_historyFrame';
+            iframe.name = 'ie_historyFrame';
+            iframe.src = 'javascript:false;'; 
+
+            try {
+                document.body.appendChild(iframe);
+            } catch(e) {
+                setTimeout(function() {
+                    document.body.appendChild(iframe);
+                }, 0);
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange)
+        {
+            var rememberDiv = document.createElement("div");
+            rememberDiv.id = 'safari_rememberDiv';
+            document.body.appendChild(rememberDiv);
+            rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
+
+            var formDiv = document.createElement("div");
+            formDiv.id = 'safari_formDiv';
+            document.body.appendChild(formDiv);
+
+            var reloader_content = document.createElement('div');
+            reloader_content.id = 'safarireloader';
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    html = (new String(s.src)).replace(".js", ".html");
+                }
+            }
+            reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
+            document.body.appendChild(reloader_content);
+            reloader_content.style.position = 'absolute';
+            reloader_content.style.left = reloader_content.style.top = '-9999px';
+            iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+            if (document.getElementById("safari_remember_field").value != "" ) {
+                historyHash = document.getElementById("safari_remember_field").value.split(",");
+            }
+        }
+
+        if (browserHasHashChange)        
+            document.body.onhashchange = hashChangeHandler;
+    }
+
+    return {
+        historyHash: historyHash, 
+        backStack: function() { return backStack; }, 
+        forwardStack: function() { return forwardStack }, 
+        getPlayer: getPlayer, 
+        initialize: function(src) {
+            _initialize(src);
+        }, 
+        setURL: function(url) {
+            document.location.href = url;
+        }, 
+        getURL: function() {
+            return document.location.href;
+        }, 
+        getTitle: function() {
+            return document.title;
+        }, 
+        setTitle: function(title) {
+            try {
+                backStack[backStack.length - 1].title = title;
+            } catch(e) { }
+            //if on safari, set the title to be the empty string. 
+            if (browser.safari) {
+                if (title == "") {
+                    try {
+                    var tmp = window.location.href.toString();
+                    title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));
+                    } catch(e) {
+                        title = "";
+                    }
+                }
+            }
+            document.title = title;
+        }, 
+        setDefaultURL: function(def)
+        {
+            defaultHash = def;
+            def = getHash();
+            //trailing ? is important else an extra frame gets added to the history
+            //when navigating back to the first page.  Alternatively could check
+            //in history frame navigation to compare # and ?.
+            if (browser.ie)
+            {
+                window['_ie_firstload'] = true;
+                var sourceToSet = historyFrameSourcePrefix + def;
+                var func = function() {
+                    getHistoryFrame().src = sourceToSet;
+                    window.location.replace("#" + def);
+                    setInterval(checkForUrlChange, 50);
+                }
+                try {
+                    func();
+                } catch(e) {
+                    window.setTimeout(function() { func(); }, 0);
+                }
+            }
+
+            if (browser.safari)
+            {
+                currentHistoryLength = history.length;
+                if (historyHash.length == 0) {
+                    historyHash[currentHistoryLength] = def;
+                    var newloc = "#" + def;
+                    window.location.replace(newloc);
+                } else {
+                    //alert(historyHash[historyHash.length-1]);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+            
+            
+            if (browser.firefox || browser.opera)
+            {
+                var reg = new RegExp("#" + def + "$");
+                if (window.location.toString().match(reg)) {
+                } else {
+                    var newloc ="#" + def;
+                    window.location.replace(newloc);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+
+        }, 
+
+        /* Set the current browser URL; called from inside BrowserManager to propagate
+         * the application state out to the container.
+         */
+        setBrowserURL: function(flexAppUrl, objectId) {
+            if (browser.ie && typeof objectId != "undefined") {
+                currentObjectId = objectId;
+            }
+           //fromIframe = fromIframe || false;
+           //fromFlex = fromFlex || false;
+           //alert("setBrowserURL: " + flexAppUrl);
+           //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+           var pos = document.location.href.indexOf('#');
+           var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
+           var newUrl = baseUrl + '#' + flexAppUrl;
+
+           if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
+               currentHref = newUrl;
+               addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+               currentHistoryLength = history.length;
+           }
+        }, 
+
+        browserURLChange: function(flexAppUrl) {
+            var objectId = null;
+            if (browser.ie && currentObjectId != null) {
+                objectId = currentObjectId;
+            }
+            
+            if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+                var pl = getPlayers();
+                for (var i = 0; i < pl.length; i++) {
+                    try {
+                        pl[i].browserURLChange(flexAppUrl);
+                    } catch(e) { }
+                }
+            } else {
+                try {
+                    getPlayer(objectId).browserURLChange(flexAppUrl);
+                } catch(e) { }
+            }
+
+            currentObjectId = null;
+        },
+        getUserAgent: function() {
+            return navigator.userAgent;
+        },
+        getPlatform: function() {
+            return navigator.platform;
+        }
+
+    }
+
+})();
+
+// Initialization
+
+// Automated unit testing and other diagnostics
+
+function setURL(url)
+{
+    document.location.href = url;
+}
+
+function backButton()
+{
+    history.back();
+}
+
+function forwardButton()
+{
+    history.forward();
+}
+
+function goForwardOrBackInHistory(step)
+{
+    history.go(step);
+}
+
+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
+(function(i) {
+    var u =navigator.userAgent;var e=/*@cc_on!@*/false; 
+    var st = setTimeout;
+    if(/webkit/i.test(u)){
+        st(function(){
+            var dr=document.readyState;
+            if(dr=="loaded"||dr=="complete"){i()}
+            else{st(arguments.callee,10);}},10);
+    } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
+        document.addEventListener("DOMContentLoaded",i,false);
+    } else if(e){
+    (function(){
+        var t=document.createElement('doc:rdy');
+        try{t.doScroll('left');
+            i();t=null;
+        }catch(e){st(arguments.callee,0);}})();
+    } else{
+        window.onload=i;
+    }
+})( function() {BrowserHistory.initialize();} );

+ 29 - 0
gkaq/gis-flex/trunk/html-template/history/historyFrame.html

@@ -0,0 +1,29 @@
+<html>
+    <head>
+        <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
+        <META HTTP-EQUIV="Expires" CONTENT="-1"> 
+    </head>
+    <body>
+    <script>
+        function processUrl()
+        {
+
+            var pos = url.indexOf("?");
+            url = pos != -1 ? url.substr(pos + 1) : "";
+            if (!parent._ie_firstload) {
+                parent.BrowserHistory.setBrowserURL(url);
+                try {
+                    parent.BrowserHistory.browserURLChange(url);
+                } catch(e) { }
+            } else {
+                parent._ie_firstload = false;
+            }
+        }
+
+        var url = document.location.href;
+        processUrl();
+        document.write(encodeURIComponent(url));
+    </script>
+    Hidden frame for Browser History support.
+    </body>
+</html>

+ 108 - 0
gkaq/gis-flex/trunk/html-template/index.template.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- saved from url=(0014)about:internet -->
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
+    <!-- 
+    Smart developers always View Source. 
+    
+    This application was built using Adobe Flex, an open source framework
+    for building rich Internet applications that get delivered via the
+    Flash Player or to desktops via Adobe AIR. 
+    
+    Learn more about Flex at http://flex.org 
+    // -->
+    <head>
+        <title>${title}</title>
+        <meta name="google" value="notranslate" />         
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <!-- Include CSS to eliminate any default margins/padding and set the height of the html element and 
+             the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as 
+             the percentage of the height of its parent container, which has to be set explicitly.  Fix for
+             Firefox 3.6 focus border issues.  Initially, don't display flashContent div so it won't show 
+             if JavaScript disabled.
+        -->
+        <style type="text/css" media="screen"> 
+            html, body  { height:100%; }
+            body { margin:0; padding:0; overflow:auto; text-align:center; 
+                   background-color: ${bgcolor}; }   
+            object:focus { outline:none; }
+            #flashContent { display:none; }
+        </style>
+        
+        <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
+        <!-- BEGIN Browser History required section ${useBrowserHistory}>
+        <link rel="stylesheet" type="text/css" href="flexs/history/history.css" />
+        <script type="text/javascript" src="flexs/history/history.js"></script>
+        <!${useBrowserHistory} END Browser History required section -->  
+            
+        <script type="text/javascript" src="flexs/swfobject.js"></script>
+        <script type="text/javascript">
+            // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. 
+            var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
+            // To use express install, set to playerProductInstall.swf, otherwise the empty string. 
+            var xiSwfUrlStr = "${expressInstallSwf}";
+            var flashvars = {};
+            var params = {};
+            params.quality = "high";
+            params.bgcolor = "${bgcolor}";
+            params.allowscriptaccess = "sameDomain";
+            params.allowfullscreen = "true";
+            var attributes = {};
+            attributes.id = "${application}";
+            attributes.name = "${application}";
+            attributes.align = "middle";
+            swfobject.embedSWF(
+                "flexs/${swf}.swf", "flashContent", 
+                "${width}", "${height}", 
+                swfVersionStr, xiSwfUrlStr, 
+                flashvars, params, attributes);
+            // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
+            swfobject.createCSS("#flashContent", "display:block;text-align:left;");
+        </script>
+    </head>
+    <body>
+        <!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough 
+             JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
+             when JavaScript is disabled.
+        -->
+        <div id="flashContent">
+            <p>
+                To view this page ensure that Adobe Flash Player version 
+                ${version_major}.${version_minor}.${version_revision} or greater is installed. 
+            </p>
+            <script type="text/javascript"> 
+                var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://"); 
+                document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='" 
+                                + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" ); 
+            </script> 
+        </div>
+        
+        <noscript>
+            <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">
+                <param name="movie" value="${swf}.swf" />
+                <param name="quality" value="high" />
+                <param name="bgcolor" value="${bgcolor}" />
+                <param name="allowScriptAccess" value="sameDomain" />
+                <param name="allowFullScreen" value="true" />
+                <!--[if !IE]>-->
+                <object type="application/x-shockwave-flash" data="${swf}.swf" width="${width}" height="${height}">
+                    <param name="quality" value="high" />
+                    <param name="bgcolor" value="${bgcolor}" />
+                    <param name="allowScriptAccess" value="sameDomain" />
+                    <param name="allowFullScreen" value="true" />
+                <!--<![endif]-->
+                <!--[if gte IE 6]>-->
+                    <p> 
+                        Either scripts and active content are not permitted to run or Adobe Flash Player version
+                        ${version_major}.${version_minor}.${version_revision} or greater is not installed.
+                    </p>
+                <!--<![endif]-->
+                    <a href="http://www.adobe.com/go/getflashplayer">
+                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
+                    </a>
+                <!--[if !IE]>-->
+                </object>
+                <!--<![endif]-->
+            </object>
+        </noscript>     
+   </body>
+</html>

BIN
gkaq/gis-flex/trunk/html-template/playerProductInstall.swf


+ 777 - 0
gkaq/gis-flex/trunk/html-template/swfobject.js

@@ -0,0 +1,777 @@
+/*!	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
+	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
+*/
+
+var swfobject = function() {
+	
+	var UNDEF = "undefined",
+		OBJECT = "object",
+		SHOCKWAVE_FLASH = "Shockwave Flash",
+		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+		FLASH_MIME_TYPE = "application/x-shockwave-flash",
+		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+		ON_READY_STATE_CHANGE = "onreadystatechange",
+		
+		win = window,
+		doc = document,
+		nav = navigator,
+		
+		plugin = false,
+		domLoadFnArr = [main],
+		regObjArr = [],
+		objIdArr = [],
+		listenersArr = [],
+		storedAltContent,
+		storedAltContentId,
+		storedCallbackFn,
+		storedCallbackObj,
+		isDomLoaded = false,
+		isExpressInstallActive = false,
+		dynamicStylesheet,
+		dynamicStylesheetMedia,
+		autoHideShow = true,
+	
+	/* Centralized function for browser feature detection
+		- User agent string detection is only used when no good alternative is possible
+		- Is executed directly for optimal performance
+	*/	
+	ua = function() {
+		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
+			u = nav.userAgent.toLowerCase(),
+			p = nav.platform.toLowerCase(),
+			windows = p ? /win/.test(p) : /win/.test(u),
+			mac = p ? /mac/.test(p) : /mac/.test(u),
+			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+			ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
+			playerVersion = [0,0,0],
+			d = null;
+		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+			d = nav.plugins[SHOCKWAVE_FLASH].description;
+			if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
+				plugin = true;
+				ie = false; // cascaded feature detection for Internet Explorer
+				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+				playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
+			}
+		}
+		else if (typeof win.ActiveXObject != UNDEF) {
+			try {
+				var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+				if (a) { // a will return null when ActiveX is disabled
+					d = a.GetVariable("$version");
+					if (d) {
+						ie = true; // cascaded feature detection for Internet Explorer
+						d = d.split(" ")[1].split(",");
+						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+					}
+				}
+			}
+			catch(e) {}
+		}
+		return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
+	}(),
+	
+	/* Cross-browser onDomLoad
+		- Will fire an event as soon as the DOM of a web page is loaded
+		- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
+		- Regular onload serves as fallback
+	*/ 
+	onDomLoad = function() {
+		if (!ua.w3) { return; }
+		if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically 
+			callDomLoadFunctions();
+		}
+		if (!isDomLoaded) {
+			if (typeof doc.addEventListener != UNDEF) {
+				doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
+			}		
+			if (ua.ie && ua.win) {
+				doc.attachEvent(ON_READY_STATE_CHANGE, function() {
+					if (doc.readyState == "complete") {
+						doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
+						callDomLoadFunctions();
+					}
+				});
+				if (win == top) { // if not inside an iframe
+					(function(){
+						if (isDomLoaded) { return; }
+						try {
+							doc.documentElement.doScroll("left");
+						}
+						catch(e) {
+							setTimeout(arguments.callee, 0);
+							return;
+						}
+						callDomLoadFunctions();
+					})();
+				}
+			}
+			if (ua.wk) {
+				(function(){
+					if (isDomLoaded) { return; }
+					if (!/loaded|complete/.test(doc.readyState)) {
+						setTimeout(arguments.callee, 0);
+						return;
+					}
+					callDomLoadFunctions();
+				})();
+			}
+			addLoadEvent(callDomLoadFunctions);
+		}
+	}();
+	
+	function callDomLoadFunctions() {
+		if (isDomLoaded) { return; }
+		try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
+			var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
+			t.parentNode.removeChild(t);
+		}
+		catch (e) { return; }
+		isDomLoaded = true;
+		var dl = domLoadFnArr.length;
+		for (var i = 0; i < dl; i++) {
+			domLoadFnArr[i]();
+		}
+	}
+	
+	function addDomLoadEvent(fn) {
+		if (isDomLoaded) {
+			fn();
+		}
+		else { 
+			domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
+		}
+	}
+	
+	/* Cross-browser onload
+		- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
+		- Will fire an event as soon as a web page including all of its assets are loaded 
+	 */
+	function addLoadEvent(fn) {
+		if (typeof win.addEventListener != UNDEF) {
+			win.addEventListener("load", fn, false);
+		}
+		else if (typeof doc.addEventListener != UNDEF) {
+			doc.addEventListener("load", fn, false);
+		}
+		else if (typeof win.attachEvent != UNDEF) {
+			addListener(win, "onload", fn);
+		}
+		else if (typeof win.onload == "function") {
+			var fnOld = win.onload;
+			win.onload = function() {
+				fnOld();
+				fn();
+			};
+		}
+		else {
+			win.onload = fn;
+		}
+	}
+	
+	/* Main function
+		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
+	*/
+	function main() { 
+		if (plugin) {
+			testPlayerVersion();
+		}
+		else {
+			matchVersions();
+		}
+	}
+	
+	/* Detect the Flash Player version for non-Internet Explorer browsers
+		- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
+		  a. Both release and build numbers can be detected
+		  b. Avoid wrong descriptions by corrupt installers provided by Adobe
+		  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
+		- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
+	*/
+	function testPlayerVersion() {
+		var b = doc.getElementsByTagName("body")[0];
+		var o = createElement(OBJECT);
+		o.setAttribute("type", FLASH_MIME_TYPE);
+		var t = b.appendChild(o);
+		if (t) {
+			var counter = 0;
+			(function(){
+				if (typeof t.GetVariable != UNDEF) {
+					var d = t.GetVariable("$version");
+					if (d) {
+						d = d.split(" ")[1].split(",");
+						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+					}
+				}
+				else if (counter < 10) {
+					counter++;
+					setTimeout(arguments.callee, 10);
+					return;
+				}
+				b.removeChild(o);
+				t = null;
+				matchVersions();
+			})();
+		}
+		else {
+			matchVersions();
+		}
+	}
+	
+	/* Perform Flash Player and SWF version matching; static publishing only
+	*/
+	function matchVersions() {
+		var rl = regObjArr.length;
+		if (rl > 0) {
+			for (var i = 0; i < rl; i++) { // for each registered object element
+				var id = regObjArr[i].id;
+				var cb = regObjArr[i].callbackFn;
+				var cbObj = {success:false, id:id};
+				if (ua.pv[0] > 0) {
+					var obj = getElementById(id);
+					if (obj) {
+						if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
+							setVisibility(id, true);
+							if (cb) {
+								cbObj.success = true;
+								cbObj.ref = getObjectById(id);
+								cb(cbObj);
+							}
+						}
+						else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
+							var att = {};
+							att.data = regObjArr[i].expressInstall;
+							att.width = obj.getAttribute("width") || "0";
+							att.height = obj.getAttribute("height") || "0";
+							if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
+							if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
+							// parse HTML object param element's name-value pairs
+							var par = {};
+							var p = obj.getElementsByTagName("param");
+							var pl = p.length;
+							for (var j = 0; j < pl; j++) {
+								if (p[j].getAttribute("name").toLowerCase() != "movie") {
+									par[p[j].getAttribute("name")] = p[j].getAttribute("value");
+								}
+							}
+							showExpressInstall(att, par, id, cb);
+						}
+						else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
+							displayAltContent(obj);
+							if (cb) { cb(cbObj); }
+						}
+					}
+				}
+				else {	// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
+					setVisibility(id, true);
+					if (cb) {
+						var o = getObjectById(id); // test whether there is an HTML object element or not
+						if (o && typeof o.SetVariable != UNDEF) { 
+							cbObj.success = true;
+							cbObj.ref = o;
+						}
+						cb(cbObj);
+					}
+				}
+			}
+		}
+	}
+	
+	function getObjectById(objectIdStr) {
+		var r = null;
+		var o = getElementById(objectIdStr);
+		if (o && o.nodeName == "OBJECT") {
+			if (typeof o.SetVariable != UNDEF) {
+				r = o;
+			}
+			else {
+				var n = o.getElementsByTagName(OBJECT)[0];
+				if (n) {
+					r = n;
+				}
+			}
+		}
+		return r;
+	}
+	
+	/* Requirements for Adobe Express Install
+		- only one instance can be active at a time
+		- fp 6.0.65 or higher
+		- Win/Mac OS only
+		- no Webkit engines older than version 312
+	*/
+	function canExpressInstall() {
+		return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
+	}
+	
+	/* Show the Adobe Express Install dialog
+		- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
+	*/
+	function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
+		isExpressInstallActive = true;
+		storedCallbackFn = callbackFn || null;
+		storedCallbackObj = {success:false, id:replaceElemIdStr};
+		var obj = getElementById(replaceElemIdStr);
+		if (obj) {
+			if (obj.nodeName == "OBJECT") { // static publishing
+				storedAltContent = abstractAltContent(obj);
+				storedAltContentId = null;
+			}
+			else { // dynamic publishing
+				storedAltContent = obj;
+				storedAltContentId = replaceElemIdStr;
+			}
+			att.id = EXPRESS_INSTALL_ID;
+			if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
+			if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
+			doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
+			var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
+				fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
+			if (typeof par.flashvars != UNDEF) {
+				par.flashvars += "&" + fv;
+			}
+			else {
+				par.flashvars = fv;
+			}
+			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+			if (ua.ie && ua.win && obj.readyState != 4) {
+				var newObj = createElement("div");
+				replaceElemIdStr += "SWFObjectNew";
+				newObj.setAttribute("id", replaceElemIdStr);
+				obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
+				obj.style.display = "none";
+				(function(){
+					if (obj.readyState == 4) {
+						obj.parentNode.removeChild(obj);
+					}
+					else {
+						setTimeout(arguments.callee, 10);
+					}
+				})();
+			}
+			createSWF(att, par, replaceElemIdStr);
+		}
+	}
+	
+	/* Functions to abstract and display alternative content
+	*/
+	function displayAltContent(obj) {
+		if (ua.ie && ua.win && obj.readyState != 4) {
+			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+			var el = createElement("div");
+			obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
+			el.parentNode.replaceChild(abstractAltContent(obj), el);
+			obj.style.display = "none";
+			(function(){
+				if (obj.readyState == 4) {
+					obj.parentNode.removeChild(obj);
+				}
+				else {
+					setTimeout(arguments.callee, 10);
+				}
+			})();
+		}
+		else {
+			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
+		}
+	} 
+
+	function abstractAltContent(obj) {
+		var ac = createElement("div");
+		if (ua.win && ua.ie) {
+			ac.innerHTML = obj.innerHTML;
+		}
+		else {
+			var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+			if (nestedObj) {
+				var c = nestedObj.childNodes;
+				if (c) {
+					var cl = c.length;
+					for (var i = 0; i < cl; i++) {
+						if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
+							ac.appendChild(c[i].cloneNode(true));
+						}
+					}
+				}
+			}
+		}
+		return ac;
+	}
+	
+	/* Cross-browser dynamic SWF creation
+	*/
+	function createSWF(attObj, parObj, id) {
+		var r, el = getElementById(id);
+		if (ua.wk && ua.wk < 312) { return r; }
+		if (el) {
+			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+				attObj.id = id;
+			}
+			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
+				var att = "";
+				for (var i in attObj) {
+					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
+						if (i.toLowerCase() == "data") {
+							parObj.movie = attObj[i];
+						}
+						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+							att += ' class="' + attObj[i] + '"';
+						}
+						else if (i.toLowerCase() != "classid") {
+							att += ' ' + i + '="' + attObj[i] + '"';
+						}
+					}
+				}
+				var par = "";
+				for (var j in parObj) {
+					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
+						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
+					}
+				}
+				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
+				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
+				r = getElementById(attObj.id);	
+			}
+			else { // well-behaving browsers
+				var o = createElement(OBJECT);
+				o.setAttribute("type", FLASH_MIME_TYPE);
+				for (var m in attObj) {
+					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
+						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+							o.setAttribute("class", attObj[m]);
+						}
+						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
+							o.setAttribute(m, attObj[m]);
+						}
+					}
+				}
+				for (var n in parObj) {
+					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
+						createObjParam(o, n, parObj[n]);
+					}
+				}
+				el.parentNode.replaceChild(o, el);
+				r = o;
+			}
+		}
+		return r;
+	}
+	
+	function createObjParam(el, pName, pValue) {
+		var p = createElement("param");
+		p.setAttribute("name", pName);	
+		p.setAttribute("value", pValue);
+		el.appendChild(p);
+	}
+	
+	/* Cross-browser SWF removal
+		- Especially needed to safely and completely remove a SWF in Internet Explorer
+	*/
+	function removeSWF(id) {
+		var obj = getElementById(id);
+		if (obj && obj.nodeName == "OBJECT") {
+			if (ua.ie && ua.win) {
+				obj.style.display = "none";
+				(function(){
+					if (obj.readyState == 4) {
+						removeObjectInIE(id);
+					}
+					else {
+						setTimeout(arguments.callee, 10);
+					}
+				})();
+			}
+			else {
+				obj.parentNode.removeChild(obj);
+			}
+		}
+	}
+	
+	function removeObjectInIE(id) {
+		var obj = getElementById(id);
+		if (obj) {
+			for (var i in obj) {
+				if (typeof obj[i] == "function") {
+					obj[i] = null;
+				}
+			}
+			obj.parentNode.removeChild(obj);
+		}
+	}
+	
+	/* Functions to optimize JavaScript compression
+	*/
+	function getElementById(id) {
+		var el = null;
+		try {
+			el = doc.getElementById(id);
+		}
+		catch (e) {}
+		return el;
+	}
+	
+	function createElement(el) {
+		return doc.createElement(el);
+	}
+	
+	/* Updated attachEvent function for Internet Explorer
+		- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
+	*/	
+	function addListener(target, eventType, fn) {
+		target.attachEvent(eventType, fn);
+		listenersArr[listenersArr.length] = [target, eventType, fn];
+	}
+	
+	/* Flash Player and SWF content version matching
+	*/
+	function hasPlayerVersion(rv) {
+		var pv = ua.pv, v = rv.split(".");
+		v[0] = parseInt(v[0], 10);
+		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
+		v[2] = parseInt(v[2], 10) || 0;
+		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
+	}
+	
+	/* Cross-browser dynamic CSS creation
+		- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
+	*/	
+	function createCSS(sel, decl, media, newStyle) {
+		if (ua.ie && ua.mac) { return; }
+		var h = doc.getElementsByTagName("head")[0];
+		if (!h) { return; } // to also support badly authored HTML pages that lack a head element
+		var m = (media && typeof media == "string") ? media : "screen";
+		if (newStyle) {
+			dynamicStylesheet = null;
+			dynamicStylesheetMedia = null;
+		}
+		if (!dynamicStylesheet || dynamicStylesheetMedia != m) { 
+			// create dynamic stylesheet + get a global reference to it
+			var s = createElement("style");
+			s.setAttribute("type", "text/css");
+			s.setAttribute("media", m);
+			dynamicStylesheet = h.appendChild(s);
+			if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
+				dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
+			}
+			dynamicStylesheetMedia = m;
+		}
+		// add style rule
+		if (ua.ie && ua.win) {
+			if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
+				dynamicStylesheet.addRule(sel, decl);
+			}
+		}
+		else {
+			if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
+				dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
+			}
+		}
+	}
+	
+	function setVisibility(id, isVisible) {
+		if (!autoHideShow) { return; }
+		var v = isVisible ? "visible" : "hidden";
+		if (isDomLoaded && getElementById(id)) {
+			getElementById(id).style.visibility = v;
+		}
+		else {
+			createCSS("#" + id, "visibility:" + v);
+		}
+	}
+
+	/* Filter to avoid XSS attacks
+	*/
+	function urlEncodeIfNecessary(s) {
+		var regex = /[\\\"<>\.;]/;
+		var hasBadChars = regex.exec(s) != null;
+		return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
+	}
+	
+	/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
+	*/
+	var cleanup = function() {
+		if (ua.ie && ua.win) {
+			window.attachEvent("onunload", function() {
+				// remove listeners to avoid memory leaks
+				var ll = listenersArr.length;
+				for (var i = 0; i < ll; i++) {
+					listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
+				}
+				// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
+				var il = objIdArr.length;
+				for (var j = 0; j < il; j++) {
+					removeSWF(objIdArr[j]);
+				}
+				// cleanup library's main closures to avoid memory leaks
+				for (var k in ua) {
+					ua[k] = null;
+				}
+				ua = null;
+				for (var l in swfobject) {
+					swfobject[l] = null;
+				}
+				swfobject = null;
+			});
+		}
+	}();
+	
+	return {
+		/* Public API
+			- Reference: http://code.google.com/p/swfobject/wiki/documentation
+		*/ 
+		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
+			if (ua.w3 && objectIdStr && swfVersionStr) {
+				var regObj = {};
+				regObj.id = objectIdStr;
+				regObj.swfVersion = swfVersionStr;
+				regObj.expressInstall = xiSwfUrlStr;
+				regObj.callbackFn = callbackFn;
+				regObjArr[regObjArr.length] = regObj;
+				setVisibility(objectIdStr, false);
+			}
+			else if (callbackFn) {
+				callbackFn({success:false, id:objectIdStr});
+			}
+		},
+		
+		getObjectById: function(objectIdStr) {
+			if (ua.w3) {
+				return getObjectById(objectIdStr);
+			}
+		},
+		
+		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
+			var callbackObj = {success:false, id:replaceElemIdStr};
+			if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
+				setVisibility(replaceElemIdStr, false);
+				addDomLoadEvent(function() {
+					widthStr += ""; // auto-convert to string
+					heightStr += "";
+					var att = {};
+					if (attObj && typeof attObj === OBJECT) {
+						for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
+							att[i] = attObj[i];
+						}
+					}
+					att.data = swfUrlStr;
+					att.width = widthStr;
+					att.height = heightStr;
+					var par = {}; 
+					if (parObj && typeof parObj === OBJECT) {
+						for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
+							par[j] = parObj[j];
+						}
+					}
+					if (flashvarsObj && typeof flashvarsObj === OBJECT) {
+						for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
+							if (typeof par.flashvars != UNDEF) {
+								par.flashvars += "&" + k + "=" + flashvarsObj[k];
+							}
+							else {
+								par.flashvars = k + "=" + flashvarsObj[k];
+							}
+						}
+					}
+					if (hasPlayerVersion(swfVersionStr)) { // create SWF
+						var obj = createSWF(att, par, replaceElemIdStr);
+						if (att.id == replaceElemIdStr) {
+							setVisibility(replaceElemIdStr, true);
+						}
+						callbackObj.success = true;
+						callbackObj.ref = obj;
+					}
+					else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
+						att.data = xiSwfUrlStr;
+						showExpressInstall(att, par, replaceElemIdStr, callbackFn);
+						return;
+					}
+					else { // show alternative content
+						setVisibility(replaceElemIdStr, true);
+					}
+					if (callbackFn) { callbackFn(callbackObj); }
+				});
+			}
+			else if (callbackFn) { callbackFn(callbackObj);	}
+		},
+		
+		switchOffAutoHideShow: function() {
+			autoHideShow = false;
+		},
+		
+		ua: ua,
+		
+		getFlashPlayerVersion: function() {
+			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
+		},
+		
+		hasFlashPlayerVersion: hasPlayerVersion,
+		
+		createSWF: function(attObj, parObj, replaceElemIdStr) {
+			if (ua.w3) {
+				return createSWF(attObj, parObj, replaceElemIdStr);
+			}
+			else {
+				return undefined;
+			}
+		},
+		
+		showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
+			if (ua.w3 && canExpressInstall()) {
+				showExpressInstall(att, par, replaceElemIdStr, callbackFn);
+			}
+		},
+		
+		removeSWF: function(objElemIdStr) {
+			if (ua.w3) {
+				removeSWF(objElemIdStr);
+			}
+		},
+		
+		createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
+			if (ua.w3) {
+				createCSS(selStr, declStr, mediaStr, newStyleBoolean);
+			}
+		},
+		
+		addDomLoadEvent: addDomLoadEvent,
+		
+		addLoadEvent: addLoadEvent,
+		
+		getQueryParamValue: function(param) {
+			var q = doc.location.search || doc.location.hash;
+			if (q) {
+				if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
+				if (param == null) {
+					return urlEncodeIfNecessary(q);
+				}
+				var pairs = q.split("&");
+				for (var i = 0; i < pairs.length; i++) {
+					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
+					}
+				}
+			}
+			return "";
+		},
+		
+		// For internal usage only
+		expressInstallCallback: function() {
+			if (isExpressInstallActive) {
+				var obj = getElementById(EXPRESS_INSTALL_ID);
+				if (obj && storedAltContent) {
+					obj.parentNode.replaceChild(storedAltContent, obj);
+					if (storedAltContentId) {
+						setVisibility(storedAltContentId, true);
+						if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
+					}
+					if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
+				}
+				isExpressInstallActive = false;
+			} 
+		}
+	};
+}();

BIN
gkaq/gis-flex/trunk/libs/AdvancedDataGrid.swc


BIN
gkaq/gis-flex/trunk/libs/FlexBevLib.swc


BIN
gkaq/gis-flex/trunk/libs/LegendTree.swc


BIN
gkaq/gis-flex/trunk/libs/NewProgressBar.swc


BIN
gkaq/gis-flex/trunk/libs/TreeComboBox.swc


BIN
gkaq/gis-flex/trunk/libs/agslib-3.7-2014-11-06.swc


+ 390 - 0
gkaq/gis-flex/trunk/src/Main.mxml

@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+			   xmlns:s="library://ns.adobe.com/flex/spark"
+			   xmlns:esri="http://www.esri.com/2008/ags"
+			   xmlns:mx="library://ns.adobe.com/flex/mx"
+			   xmlns:access="com.jtgh.yjpt.view.access.*"
+			   xmlns:service="com.jtgh.yjpt.common.service.*"
+			   xmlns:tdt="com.xt.hb.tdt.*"
+			   xmlns:server="com.xt.hb.server.*"
+			   minWidth="955" minHeight="600"
+			   preloader="com.sys.NewProgressBar"
+			   initialize="init(event)"
+			   creationComplete="application_creationCompleteHandler(event)" xmlns:views="com.xt.hb.views.*">
+	<fx:Metadata>
+	</fx:Metadata>
+	<fx:Declarations>
+		<server:XMLDecoder id="xmlDecoder" menuConfigLoad="xmlDecoder_menuConfigLoadHandler(event)"/>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+		<!-- <s:Move id="toolsCtMove" target="{toolsCt}" duration="500"/>
+		<s:Move id="btnMove" target="{arrowLeft}" duration="500"/> -->
+	</fx:Declarations>
+	<fx:Script source="com/xt/hb/views/show.as"/>
+	<fx:Script source="com/xt/hb/views/Main_MenuNavigation.as"/>
+	<fx:Script>
+		<![CDATA[
+			import com.esri.ags.events.DetailsEvent;
+			import com.esri.ags.events.ExtentEvent;
+			import com.esri.ags.events.ZoomEvent;
+			import com.esri.ags.geometry.MapPoint;
+			import com.esri.ags.layers.FeatureLayer;
+			import com.esri.ags.layers.Layer;
+			import com.esri.ags.layers.supportClasses.LayerDetails;
+			import com.esri.ags.renderers.SimpleRenderer;
+			import com.esri.ags.symbols.PictureMarkerSymbol;
+			import com.supermap.framework.events.BaseEventDispatcher;
+			import com.tcb.ConvertListToXML;
+			import com.xt.hb.ais.AisMgr;
+			import com.xt.hb.events.DataConfigEvent;
+			import com.xt.hb.events.MenusEvent;
+			import com.xt.hb.events.NavigationEvent;
+			import com.xt.hb.tdt.TianDiTuTiledMapServiceLayer;
+			import com.xt.hb.utils.GisUtils;
+			import com.xt.hb.utils.MapUtils;
+			import com.xt.hb.utils.RemoteUtils;
+			import com.xt.hb.utils.GlobalData;
+			import com.xt.hb.views.TCKZModel;
+			
+			import mx.collections.ArrayCollection;
+			import mx.core.FlexGlobals;
+			import mx.events.FlexEvent;
+			import mx.rpc.events.AbstractEvent;
+			import mx.rpc.events.FaultEvent;
+			import mx.rpc.events.ResultEvent;
+			private var tckzModel:TCKZModel = new TCKZModel;
+			
+			public var menuConfig:XML = null;
+			[bindable]
+			public var menuXML:XML = null;
+			public var tcArr:ArrayCollection = null;
+			/** 当前是否显示了工具窗口 */
+			private var toolsShow:Boolean = true;
+			
+			
+			/** 当前选中图层ID */
+			private var currSelectedLayerId:String;
+			/** 当前图层 */
+			private var fLayer:FeatureLayer;
+			private var moveFlag1:Boolean = false;
+			// 加载显示港口经营人块状图形数据
+			private var jyrAreaFeatureSet:FeatureSet = null;
+			// 港口经营人坐标数据
+			private var jyrAllFeatureSet:FeatureSet = null;
+			// 港区
+			private var gqAreaFeatureSet:FeatureSet = null;
+			// 码头
+			private var mtAreaFeatureSet:FeatureSet = null;
+			// 泊位
+			private var bwAreaFeatureSet:FeatureSet = null;
+			
+			protected function init(event:FlexEvent):void
+			{
+//				RemoteUtils.callRemote("gpsCtl","queryGpsRealtime",function(e:AbstractEvent):void{
+//					if(e is FaultEvent){
+//						trace("error");
+//					}else {
+//						var gpsArr:ArrayCollection = ResultEvent(e).result as ArrayCollection;
+//						trace(gpsArr.length);
+//					}
+//				});
+			}
+			
+			// 默认显示地图
+			private var currMapType:Number = 2;
+			protected function application_creationCompleteHandler(event:FlexEvent):void
+			{
+				// 初始化系统全局参数
+				RemoteUtils.callRemote("aisCtl","initFlexData",function(e:AbstractEvent):void{
+					if(e is FaultEvent){
+						trace("error initFlexData");
+					}else {
+						
+						var resultObj:Object = ResultEvent(e).result as Object;
+						// 初始化全局参数
+						initFlexData(resultObj);
+						//初始化默认加载项
+						initDefaultLoad();
+					}
+				});
+			}
+			
+			/**
+			 * 初始化默认加载项
+			 */
+			public function initDefaultLoad():void{
+				// 左边菜单栏-隐藏
+				BaseEventDispatcher.getInstance().addEventListener(MenusEvent.MENUHIDE, movePenal);
+				BaseEventDispatcher.getInstance().addEventListener(NavigationEvent.MENUCHAGE, navigationMenu);
+				// 右边图层控制
+				BaseEventDispatcher.getInstance().addEventListener(NavigationEvent.MENUCHANGETWO, navigationMenu);
+				// 初始化触发加载左边港区港口港口企业 和 图层控制菜单
+				BaseEventDispatcher.getInstance().dispatchEvent(
+					new NavigationEvent(NavigationEvent.MENUCHAGE,"leftMenu"));
+				BaseEventDispatcher.getInstance().dispatchEvent(
+					new NavigationEvent(NavigationEvent.MENUCHANGETWO,"rightMenu"));
+				// 初始化
+				tckzModel.checkBoxClickHandler = checkBox_click;
+			}
+			
+			public function initMap():void{
+				var vec:TianDiTuTiledMapServiceLayer = new TianDiTuTiledMapServiceLayer();
+				vec.id="地形";
+				vec.baseURL="http://t";
+				vec.baseURLs="vec";
+				vec.showLevel="17";
+				vec.visible=false;
+				map.addLayer(vec,1);
+				
+				var img:TianDiTuTiledMapServiceLayer = new TianDiTuTiledMapServiceLayer();
+				img.id="影像";
+				img.baseURL="http://tile";
+				img.baseURLs="img";
+				img.showLevel="17";
+				img.visible=true;
+				map.addLayer(img,2);
+			}
+			private function movePenal(e:MenusEvent = null):void
+			{
+				/**this.toolsCtMove.end();
+				if(toolsShow)
+				{
+					this.toolsCtMove.xTo=FlexGlobals.topLevelApplication.width;
+				}else
+				{
+					this.toolsCtMove.xTo=FlexGlobals.topLevelApplication.width-this.toolsCt.width;
+				}
+				this.toolsCtMove.play();
+				
+				// 移动显示按钮
+				this.btnMove.end();
+				if(toolsShow)
+				{
+					this.btnMove.xTo=FlexGlobals.topLevelApplication.width-19;
+				}else
+				{
+					this.btnMove.xTo=FlexGlobals.topLevelApplication.width;
+				}
+				this.btnMove.play();
+				
+				toolsShow = !toolsShow;**/
+			}
+			protected function xmlDecoder_menuConfigLoadHandler(event:DataConfigEvent):void
+			{
+//				this.menuConfig =  event.data as XML;
+//				this.featureStyle = ConfigUtil.getFeatureStyle(this.menuConfig);
+			}
+			protected function map_mouseMoveHandler(event:MouseEvent):void
+			{
+				var mp:MapPoint= map.toMapFromStage(event.stageX,event.stageY);
+				labelX.text="x:"+numFormater.format(mp.x);
+				labelY.text="y:"+numFormater.format(mp.y);
+			}
+			public function getMap():Map
+			{
+				return this.map;
+			}
+			/**
+			 * 清空所有图标
+			 * @TODO
+			 */
+			public function clearAllTempLayer():void
+			{
+			}
+			/** 安全系统图层 */
+			protected function aqtc_clickHandler(event:MouseEvent = null,type:String = null):void
+			{
+//				PopUpManager.addPopUp(aqtcWindow,FlexGlobals.topLevelApplication as DisplayObject,false);
+//				PopUpManager.centerPopUp(aqtcWindow);
+			}
+			
+			protected function map_extentChangeHandler(event:ExtentEvent):void
+			{
+				// 当前比例尺
+				var currScale:Number =  map.scale;
+				trace(currScale);
+				// 显示船舶ais
+				if(currScale<250000){
+					AisMgr.getInstance().refreshAis();
+					GpsMgr.getInstance().refreshGps();
+				}else{
+					AisMgr.getInstance().stopAis();
+					GpsMgr.getInstance().stopGps();
+				}
+				// 显示经营人
+//				if(currScale<40000){
+//					initGkjyrArea();
+//				}else{
+//					clearGkjyrArea();
+//				}
+				// 显示港区
+				initGqArea();
+				// 显示码头和泊位
+				initMtBwArea();
+				// 显示港口
+				var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GK);
+				if(currScale<1200000 && currScale>140000){
+					layer.visible = true;
+				}else{
+					layer.clear();
+					layer.visible = false;
+				}
+			}
+			protected function map_zoomEndHandler(event:ZoomEvent):void
+			{
+				trace(event.level+":"+map.scale);
+			}
+			
+			/**
+			 * 按钮事件(地图切换 )
+			 */
+			protected function butn_clickHandler(event:MouseEvent):void
+			{
+				if(currMapType == 1)
+				{
+					currMapType = 2;
+					tcqh.toolTip="显示矢量地图";
+					mapTransf(map);
+					tcqh.source = "flexResources/map/map.png";
+				}
+				else if(currMapType == 2)
+				{
+					currMapType = 1;
+					tcqh.toolTip="显示影像地图";					
+					mapTransf(map);
+					tcqh.source = "flexResources/map/satellite.png";
+				}
+			}
+			/**
+			 * 地图切换
+			 */
+			private function mapTransf(myMap:Map):void
+			{
+				for each(var layerObj:Layer in myMap.layers)
+				{
+					var layername:String=layerObj.id.toString();
+					if(layername.indexOf("地形")!=-1)
+					{
+						if (currMapType==1) {
+							layerObj.visible=true;
+						} else {
+							layerObj.visible=false;
+						}
+					}
+					else if(layername.indexOf("影像")!=-1)
+					{
+						if (currMapType==2) {
+							layerObj.visible=true;
+						} else {
+							layerObj.visible=false;
+						}
+					}
+				}
+			}
+			
+			protected function hiddenLable_clickHandler(event:MouseEvent):void
+			{
+				BaseEventDispatcher.getInstance().dispatchEvent(new MenusEvent(MenusEvent.MENUHIDE,"hide"));
+			}
+			
+			private function onAllDetailsComplete(event:DetailsEvent):void  
+			{  
+				//这里只做了一个图层,不同的点,线,面,需要判断  
+				var p:LayerDetails = event.allDetails.layersDetails[0];  
+				var pSimpleRender:SimpleRenderer = (SimpleRenderer)(p.drawingInfo.renderer);  
+				var pSymbol:PictureMarkerSymbol = (PictureMarkerSymbol)(pSimpleRender.symbol);  
+				image.source = pSymbol.source;
+			}  
+			
+			//  
+			private function onFault(event:FaultEvent):void  
+			{  
+				trace("not ok");  
+			}  
+			
+			private function hideModel(e:MouseEvent):void
+			{
+				this.movePenal();
+			}  
+			
+			private function hideLeftModel(e:MouseEvent):void
+			{
+				this.moveLeftPanal();
+			}
+			
+			private function moveLeftPanal(e:MenusEvent = null):void{
+				
+				this.moveEff.end();
+				if(moveFlag1==false){
+					if(e == null)
+					{
+						this.moveEff.xTo = 0;
+						moveFlag1 = true;
+						this.titleWin.getElementAt(1).visible = false;
+					}
+					
+				}else{
+					this.moveEff.xTo = 0 - this.resShowModel.width;
+					moveFlag1 = false;
+					this.titleWin.getElementAt(1).visible = true;
+				}
+				this.moveEff.play();
+			}
+		]]>
+	</fx:Script>
+	<fx:Style>
+		@namespace esri "http://www.esri.com/2008/ags";
+		esri|InfoWindowLabel
+		{
+			color: #333;
+			fontFamily:宋体;
+			font-size: 14;
+			fontWeight: bold;
+			verticalAlign: middle;
+			height: 25;
+			maxWidth: 250;
+			top: 250;
+			left: 8;
+		}
+		esri|InfoWindow
+		{
+			background-color: #DFF1F9;  
+			font-size: 12;
+			upper-left-radius: 10;
+			upper-right-radius: 10;  
+			info-placement: upperRight;  /** 窗口显示位置 */
+			info-offset-y: 20;
+			border-style: solid;
+			border-width: 2;
+			border-color: #A2F1F9;
+		}
+	</fx:Style>
+	<fx:Declarations>
+		<esri:Extent id="extentOfJs" xmax="114.32" xmin="114.26" ymax="30.57" ymin="30.54"/>
+		<mx:NumberFormatter id="numFormater" precision="2"/>
+		<esri:SpatialReference id="sr" wkid="4326"/>
+		<s:Move id="moveEff" target="{this.titleWin}" duration="500"/>
+	</fx:Declarations>
+	<esri:Map id="map" width="100%" height="100%" extent="{extentOfJs}"
+			  extentChange="map_extentChangeHandler(event)" logoVisible="false"
+			  mouseMove="map_mouseMoveHandler(event)" scaleBarVisible="false"
+			  zoomEnd="map_zoomEndHandler(event)" zoomSliderVisible="false">
+	</esri:Map>
+	<!-- 用于显示图层的样式的 -->  
+	<s:Image id="image" left="10" bottom="50"/>  
+	<s:Label id="labelX" left="10" bottom="15" fontSize="15"/>
+	<s:Label id="labelY" left="100" bottom="15" fontSize="15"/>
+	<s:Image id="tcqh" right="10" top="45" buttonMode="true" click="butn_clickHandler(event)"
+			 source="flexResources/map/map.png" toolTip="显示地形地图"
+			 useHandCursor="true"/>
+	<tdt:MapOperateModel right="10" top="10"/>
+	<!--左侧二级菜单-->
+	<mx:HBox  id="titleWin" x="-262" y="0" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="auto" horizontalGap="0">
+	</mx:HBox>
+	<!-- 安全系统图层 -->
+	<mx:Canvas id="shipPopWin" x="{this.width-400}" y="{this.height-210}" width="100%" height="110%"></mx:Canvas>
+	<!-- 资源定位 -->
+	<!--<s:Image id="arrowLeft" click="hiddenLable_clickHandler(event)" source="flexResources/arrowRight.png" useHandCursor="true" buttonMode="true" y="100"  x="{FlexGlobals.topLevelApplication.width}" />
+	<views:MapTools id="toolsCt" y="100" x="{FlexGlobals.topLevelApplication.width-280}" width="280" height="520" menuXML="{this.menuXML}" treeClickFun="checkBox_click" />
+	-->
+	<!-- 资源查询 -->
+</s:Application>

+ 305 - 0
gkaq/gis-flex/trunk/src/com/skins/common/CxTitleWindow.mxml

@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+	ADOBE SYSTEMS INCORPORATED
+	Copyright 2008 Adobe Systems Incorporated
+	All Rights Reserved.
+
+	NOTICE: Adobe permits you to use, modify, and distribute this file
+	in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for a Spark TitleWindow container.
+
+	 @see spark.skins.spark.TitleWindowCloseButtonSkin
+	 @see spark.components.TitleWindow
+
+	 @langversion 3.0
+	 @playerversion Flash 10
+	 @playerversion AIR 1.5
+	 @productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false"
+			 minWidth="76" minHeight="76" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
+
+	<fx:Metadata>
+		<![CDATA[ 
+        /** 
+         * @copy spark.skins.spark.ApplicationSkin#hostComponent
+         */
+        [HostComponent("spark.components.TitleWindow")]
+        ]]>
+	</fx:Metadata> 
+
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			import mx.core.FlexVersion;
+
+			/* Define the skin elements that should not be colorized.
+			For panel, border and title background are skinned, but the content area, background, border, and title text are not. */
+			static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "border"];
+
+			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
+			static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup"];
+
+			/**
+			 * @private
+			 */
+			override public function get colorizeExclusions():Array 
+			{
+				// Since border is styleable via borderColor, no need to allow chromeColor to affect
+				// the border.  This is wrapped in a compatibility flag since this change was added  
+				// in Flex 4.5
+				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+				{
+					return exclusions_4_0;
+				}
+
+				return exclusions;
+			}
+
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+
+			/**
+			 * @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+			{
+				if (getStyle("borderVisible") == true)
+				{
+					border.visible = true;
+					background.left = background.top = background.right = background.bottom = 1;
+					contents.left = contents.top = contents.right = contents.bottom = 1;
+				}
+				else
+				{
+					border.visible = false;
+					background.left = background.top = background.right = background.bottom = 0;
+					contents.left = contents.top = contents.right = contents.bottom = 0;
+				}
+
+				dropShadow.visible = getStyle("dropShadowVisible");
+
+				var cr:Number = getStyle("cornerRadius");
+				var withControls:Boolean = 
+					(currentState == "disabledWithControlBar" || 
+					currentState == "normalWithControlBar" ||
+					currentState == "inactiveWithControlBar");
+
+				if (cornerRadius != cr)
+				{
+					cornerRadius = cr;
+
+					dropShadow.tlRadius = cornerRadius;
+					dropShadow.trRadius = cornerRadius;
+					dropShadow.blRadius = withControls ? cornerRadius : 0;
+					dropShadow.brRadius = withControls ? cornerRadius : 0;
+
+					setPartCornerRadii(topMaskRect, withControls); 
+					setPartCornerRadii(border, withControls); 
+					setPartCornerRadii(background, withControls);
+				}
+
+				if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 
+
+				borderStroke.color = getStyle("borderColor");
+				borderStroke.alpha = getStyle("borderAlpha");
+				backgroundFill.color = getStyle("backgroundColor");
+				backgroundFill.alpha = getStyle("backgroundAlpha");
+
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+
+			/**
+			 * @private
+			 */  
+			private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void
+			{            
+				target.topLeftRadiusX = cornerRadius;
+				target.topRightRadiusX = cornerRadius;
+				target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
+				target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
+			}
+
+			private var cornerRadius:Number;
+		]]>
+	</fx:Script>
+
+	<s:states>
+		<s:State name="normal" />
+		<s:State name="inactive" stateGroups="inactiveGroup" />
+		<s:State name="disabled" />
+		<s:State name="normalWithControlBar" stateGroups="withControls" />
+		<s:State name="inactiveWithControlBar" stateGroups="withControls, inactiveGroup" />
+		<s:State name="disabledWithControlBar" stateGroups="withControls" />
+	</s:states>
+
+	<!--- drop shadow can't be hittable so it stays sibling of other graphics @private-->
+	<s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" 
+							 alpha.inactiveGroup="0.22" distance="11"  distance.inactiveGroup="7"
+							 angle="90" color="0x000000" left="0" top="0" right="0" bottom="0"/>
+
+	<!--- drop shadow can't be hittable so all other graphics go in this group -->
+	<s:Group left="0" right="0" top="0" bottom="0">
+
+		<!--- top group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="topGroupMask">
+			<!--- @private-->
+			<s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0"/>
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+
+		<!--- bottom group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
+				 includeIn="withControls">
+			<!--- @private-->
+			<s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0"/>
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+
+		<!--- layer 1: border @private -->
+		<s:Rect id="border" left="0" right="0" top="0" bottom="0" >
+			<s:stroke>
+				<!--- Defines the TitleWindowSkin class's border stroke. The default value is 1. -->
+				<s:SolidColorStroke id="borderStroke" weight="1" />
+			</s:stroke>
+		</s:Rect>
+
+		<!-- layer 2: background fill -->
+		<!--- Defines the appearance of the TitleWindowSkin class's background. -->
+		<s:Rect id="background" left="1" top="1" right="1" bottom="1">
+			<s:fill>
+				<!--- Defines the TitleWindowSkin class's background fill. The default color is 0xFFFFFF. -->
+				<s:SolidColor id="backgroundFill" color="#FFFFFF"/>
+			</s:fill>
+		</s:Rect>
+
+		<!-- layer 3: contents -->
+		<!--- Contains the vertical stack of title bar content and control bar. -->
+		<s:Group left="1" right="1" top="1" bottom="1" id="contents">
+			<s:layout>
+				<s:VerticalLayout gap="0" horizontalAlign="justify" />
+			</s:layout>
+			<!--- @private -->
+			<s:Group id="topGroup" mask="{topGroupMask}">
+
+				<!--- layer 0: title bar fill @private -->
+				<s:Rect id="tbFill" left="0" right="0" top="0" bottom="1">
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="0x22A3BB"
+											 color.inactiveGroup="0x22A3BB"/>
+							<s:GradientEntry color="0x1E93A3"
+											 color.inactiveGroup="0x1E93A3"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+
+				<!--- layer 1: title bar highlight @private -->
+				<s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0">
+					<s:stroke>
+						<s:LinearGradientStroke rotation="90" weight="1">
+							<s:GradientEntry color="0xE6E6E6" />
+							<s:GradientEntry color="0xFFFFFF" alpha="0.22"/>
+						</s:LinearGradientStroke>
+					</s:stroke>
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" />
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" ratio="0.44"/>
+							<s:GradientEntry color="0xFFFFFF" alpha="0" ratio="0.4401"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+
+				<!--- layer 2: title bar divider @private -->
+				<s:Rect id="tbDiv" left="0" right="0" height="1" bottom="0">
+					<s:fill>
+						<s:SolidColor color="0x000000" alpha="0.75" />
+					</s:fill>
+				</s:Rect>
+
+				<!-- layer 3: text -->
+				<!--- @copy spark.components.Panel#titleDisplay -->
+				<s:Label id="titleDisplay" maxDisplayedLines="1"
+						 left="9" right="36" top="1" bottom="0" minHeight="30" color="#FFFFFF" textAlign="left" fontSize="18" fontFamily="微软雅黑"
+						 verticalAlign="middle" fontWeight="bold" />
+
+				<!-- layer 4: moveArea -->
+				<!--- @copy spark.components.TitleWindow#moveArea -->
+				<s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
+
+				<!--- @copy spark.components.TitleWindow#closeButton -->
+				<s:Button id="closeButton" skinClass="com.skins.tdt.TitleWindowCloseButtonSkin"
+						  width="20" height="20" right="5" top="5" />
+			</s:Group>
+
+			<!--
+				Note: setting the minimum size to 0 here so that changes to the host component's
+				size will not be thwarted by this skin part's minimum size.   This is a compromise,
+				more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
+			-->
+			<!--- @copy spark.components.SkinnableContainer#contentGroup -->
+			<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0">
+			</s:Group>
+
+			<!--- @private -->
+			<s:Group id="bottomGroup" minWidth="0" minHeight="0" 
+					 includeIn="withControls">  
+
+				<s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}">
+
+					<!-- layer 0: control bar divider line -->
+					<s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
+						<s:fill>
+							<s:SolidColor color="0x000000" />
+						</s:fill>
+					</s:Rect>
+
+					<!-- layer 1: control bar highlight -->
+					<s:Rect left="0" right="0" top="1" bottom="0">
+						<s:stroke>
+							<s:LinearGradientStroke rotation="90" weight="1">
+								<s:GradientEntry color="0xFFFFFF" />
+								<s:GradientEntry color="0xD8D8D8" />
+							</s:LinearGradientStroke>
+						</s:stroke>
+					</s:Rect>
+
+					<!-- layer 2: control bar fill -->
+					<s:Rect left="1" right="1" top="2" bottom="1">
+						<s:fill>
+							<s:LinearGradient rotation="90">
+								<s:GradientEntry color="0xEDEDED"/>
+								<s:GradientEntry color="0xCDCDCD"/>
+							</s:LinearGradient>
+						</s:fill>
+					</s:Rect>
+				</s:Group>
+
+				<!--- @copy spark.components.Panel#controlBarGroup -->
+				<s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
+					<s:layout>
+						<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
+					</s:layout>
+				</s:Group>
+			</s:Group>
+		</s:Group>
+	</s:Group>
+</s:SparkSkin>

+ 21 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/AdvanceDataGridHeaderSkin.mxml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			 xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:mx="library://ns.adobe.com/flex/mx" width="3">
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+
+	
+
+
+	<s:Rect left="0" right="0"  top="0" bottom="-2" alpha="1">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="#6ab1ec" alpha="1" ratio="0"/>
+				<s:GradientEntry color="#b4e0ff" alpha="1" ratio="1"/>
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+</s:SparkSkin>

+ 238 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/ButtonRectImgSkin.mxml

@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for the Spark Button component.  
+
+@see spark.components.Button
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			 xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
+			 minWidth="21" minHeight="21" alpha.disabled="0.5" 
+			 xmlns:mx="library://ns.adobe.com/flex/mx" 
+			 creationComplete="init();"
+			 height="40" width="40">
+	
+	<!-- host component -->
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.GroupSkin#hostComponent
+		*/
+		[HostComponent("spark.components.Button")]
+		]]>
+	</fx:Metadata>
+	
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			/* Define the skin elements that should not be colorized. 
+			For button, the graphics are colorized but the label is not. */
+			static private const exclusions:Array = ["labelDisplay"];
+			
+			private function init():void
+			{
+				try
+				{
+					currImg.source = hostComponent.accessibilityDescription;
+				}
+				catch(e:Error)
+				{
+					
+				}
+			}
+			
+			/** 
+			 * @private
+			 */     
+			override public function get colorizeExclusions():Array {return exclusions;}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete(); 
+			}  
+			
+			/**
+			 *  @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
+			{
+				var cr:Number = getStyle("cornerRadius");
+				
+				if (cornerRadius != cr)
+				{
+					cornerRadius = cr;
+					shadow.radiusX = cornerRadius;
+					fill.radiusX = cornerRadius;
+					lowlight.radiusX = cornerRadius;
+					highlight.radiusX = cornerRadius;
+					border.radiusX = cornerRadius;
+				}
+				
+				if (highlightStroke) highlightStroke.radiusX = cornerRadius;
+				if (hldownstroke1) hldownstroke1.radiusX = cornerRadius;
+				if (hldownstroke2) hldownstroke2.radiusX = cornerRadius; 
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			private var cornerRadius:Number = 2;
+		]]>        
+	</fx:Script>
+	
+	<!-- states -->
+	<s:states>
+		<s:State name="up" />
+		<s:State name="over" />
+		<s:State name="down" />
+		<s:State name="disabled" />
+	</s:states>
+	
+	<!-- layer 1: shadow -->
+	<!--- @private -->
+	<s:Rect id="shadow" left="-1" right="-1" top="-1" bottom="-1" radiusX="2">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="0x000000" 
+								 color.down="0xFFFFFF"
+								 alpha="0.01"
+								 alpha.down="0" />
+				<s:GradientEntry color="0x000000" 
+								 color.down="0xFFFFFF" 
+								 alpha="0.07"
+								 alpha.down="0.5" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 2: fill -->
+	<!--- @private -->
+	<s:Rect id="fill" left="1" right="1" top="1" bottom="1" radiusX="2">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="0xFFFFFF" 
+								 color.over="0xBBBDBD" 
+								 color.down="0xAAAAAA" 
+								 alpha="0.85" />
+				<s:GradientEntry color="0xD8D8D8" 
+								 color.over="0x9FA0A1" 
+								 color.down="0x929496" 
+								 alpha="0.85" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 3: fill lowlight -->
+	<!--- @private -->
+	<s:Rect id="lowlight" left="1" right="1" top="1" bottom="1" radiusX="2">
+		<s:fill>
+			<s:LinearGradient rotation="270">
+				<s:GradientEntry color="0x000000" ratio="0.0" alpha="0.0627" />
+				<s:GradientEntry color="0x000000" ratio="0.48" alpha="0.0099" />
+				<s:GradientEntry color="0x000000" ratio="0.48001" alpha="0" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 4: fill highlight -->
+	<!--- @private -->
+	<s:Rect id="highlight" left="1" right="1" top="1" bottom="1" radiusX="2">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.0"
+								 alpha="0.33" 
+								 alpha.over="0.22" 
+								 alpha.down="0.12"/>
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.48"
+								 alpha="0.33"
+								 alpha.over="0.22"
+								 alpha.down="0.12" />
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.48001"
+								 alpha="0" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 5: highlight stroke (all states except down) -->
+	<!--- @private -->
+	<s:Rect id="highlightStroke" left="1" right="1" top="1" bottom="1" radiusX="2" excludeFrom="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0xFFFFFF" alpha.over="0.22" />
+				<s:GradientEntry color="0xD8D8D8" alpha.over="0.22" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 6: highlight stroke (down state only) -->
+	<!--- @private -->
+	<s:Rect id="hldownstroke1" left="1" right="1" top="1" bottom="1" radiusX="2" includeIn="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.0" />
+				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.001" />
+				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.0011" />
+				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.965" />
+				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.9651" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	<!--- @private -->
+	<s:Rect id="hldownstroke2" left="2" right="2" top="2" bottom="2" radiusX="2" includeIn="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0x000000" alpha="0.09" ratio="0.0" />
+				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.0001" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 7: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
+	<!--- @private -->
+	<s:Rect id="border" left="0" right="0" top="0" bottom="0" width="69" height="20" radiusX="2">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0x000000" 
+								 alpha="0.5625"
+								 alpha.down="0.6375" />
+				<s:GradientEntry color="0x000000" 
+								 alpha="0.75" 
+								 alpha.down="0.85" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 8: text -->
+	<!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay -->
+	<s:Label id="labelDisplay"
+			 textAlign="center"
+			 verticalAlign="middle"
+			 maxDisplayedLines="1"
+			 horizontalCenter="0" verticalCenter="1"
+			 left="10" right="10" top="2" bottom="2" text="">
+	</s:Label>
+	
+	<mx:Image id="currImg" source="@Embed('flexResources/map/pan.png')" width="28" height="28" horizontalCenter="0" verticalCenter="0"/>
+	
+</s:SparkSkin>

+ 113 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/ButtonSkin.mxml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+    ADOBE SYSTEMS INCORPORATED
+    Copyright 2008 Adobe Systems Incorporated
+    All Rights Reserved.
+
+    NOTICE: Adobe permits you to use, modify, and distribute this file
+    in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for the Spark Button component.  
+
+       @see spark.components.Button
+        
+      @langversion 3.0
+      @playerversion Flash 10
+      @playerversion AIR 1.5
+      @productversion Flex 4
+-->
+<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
+             xmlns:s="library://ns.adobe.com/flex/spark" 
+             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
+             width="58" height="26"  minHeight="28"
+             alpha.disabled="0.5">
+     
+    <fx:Metadata>
+        <![CDATA[ 
+        /** 
+         * @copy spark.skins.spark.ApplicationSkin#hostComponent
+         */
+        [HostComponent("spark.components.Button")]
+        ]]>
+    </fx:Metadata>
+    
+    <fx:Script fb:purpose="styling">
+        <![CDATA[         
+            import spark.components.Group;
+            /* Define the skin elements that should not be colorized. 
+            For button, the graphics are colorized but the label is not. */
+            static private const exclusions:Array = ["labelDisplay"];
+            
+            /** 
+             * @private
+             */     
+            override public function get colorizeExclusions():Array {return exclusions;}
+            
+            /**
+             * @private
+             */
+            override protected function initializationComplete():void
+            {
+                useChromeColor = true;
+                super.initializationComplete();
+            }  
+            
+            /**
+             *  @private
+             */
+            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
+            {
+                var cr:Number = getStyle("cornerRadius");
+                
+//                if (cornerRadius != cr)
+//                {
+//                    cornerRadius = cr;
+//                    shadow.radiusX = cornerRadius;
+//                    fill.radiusX = cornerRadius;
+//                    lowlight.radiusX = cornerRadius;
+//                }
+                
+//                if (highlightStroke) highlightStroke.radiusX = cornerRadius;
+//                if (hldownstroke1) hldownstroke1.radiusX = cornerRadius;
+//                if (hldownstroke2) hldownstroke2.radiusX = cornerRadius;
+                
+                super.updateDisplayList(unscaledWidth, unscaledHeight);
+            }
+            
+                                 
+        ]]>        
+    </fx:Script>
+        
+    <!-- states -->
+    <s:states>
+        <s:State name="up" />
+        <s:State name="over" />
+        <s:State name="down" />
+        <s:State name="disabled" />
+    </s:states>
+    
+    <!-- layer 2: fill -->
+    <!--- @private -->
+    <s:Rect id="fill" left="0" right="0" top="0" bottom="0">
+        <s:fill>
+			<s:BitmapFill  
+				source.up="@Embed('/flexResources/yjpt/list/btn.png')" 
+				source.down="@Embed('/flexResources/yjpt/list/btn_hover.png')" 
+				source.disabled="@Embed('/flexResources/yjpt/list/btn.png')"
+				source.over="@Embed('/flexResources/yjpt/list/btn_hover.png')"/>
+		</s:fill>
+    </s:Rect>
+    <!-- layer 8: text -->
+    <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay  -->
+    <s:Label id="labelDisplay"
+             textAlign="center"
+             maxDisplayedLines="1" fontSize="12"
+             horizontalCenter="0" verticalCenter="1" verticalAlign="middle"
+             left="10" right="10" top="2" bottom="2">
+    </s:Label>
+    
+</s:SparkButtonSkin>

+ 223 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/ComboBoxButtonSkin.mxml

@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2010 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for the anchor button on a Spark ComboBox component.  
+
+@see spark.components.ComboBox        
+@see spark.skins.spark.ComboBoxSkin
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="19" minHeight="23">
+	
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.ApplicationSkin#hostComponent
+		*/
+		[HostComponent("spark.components.Button")]
+		]]>
+	</fx:Metadata> 
+	
+	<fx:Script fb:purpose="styling">
+		/* Define the skin elements that should not be colorized. 
+		For dropDownList buttons, the graphics are colorized but the arrow is not. */
+		static private const exclusions:Array = ["arrow"];
+		
+		private var cornerRadius:Number = 0;
+		
+		/** 
+		 * @private
+		 */     
+		override public function get colorizeExclusions():Array {return exclusions;}
+		
+		/* Define the symbol fill items that should be colored by the "symbolColor" style. */
+		static private const symbols:Array = ["arrowFill1", "arrowFill2"];
+		
+		/**
+		 * @private 
+		 */
+		override public function get symbolItems():Array {return symbols};
+		
+		/**
+		 * @private
+		 */
+		override protected function initializationComplete():void
+		{
+			useChromeColor = true;
+			super.initializationComplete();
+		}
+		
+		/**
+		 *  @private
+		 */
+		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
+		{
+			var cr:Number = getStyle("cornerRadius");
+			
+			if (cornerRadius != cr)
+			{
+				cornerRadius = cr;
+				fill.bottomRightRadiusX = fill.topRightRadiusX = cornerRadius;
+				lowlight.bottomRightRadiusX = lowlight.topRightRadiusX = cornerRadius;
+				highlight.bottomRightRadiusX = highlight.topRightRadiusX = cornerRadius;
+				border.bottomRightRadiusX = border.topRightRadiusX = cornerRadius;
+			}
+			
+			if (highlightStroke) 
+				highlightStroke.bottomRightRadiusX = highlightStroke.topRightRadiusX = cornerRadius;
+			if (hldownstroke1)
+				hldownstroke1.bottomRightRadiusX = hldownstroke1.topRightRadiusX = cornerRadius;
+			if (hldownstroke2)
+				hldownstroke2.bottomRightRadiusX = hldownstroke2.topRightRadiusX = cornerRadius;
+			
+			super.updateDisplayList(unscaledWidth, unscaledHeight);
+		}
+	</fx:Script>
+	
+	<!-- states -->
+	<s:states>
+		<s:State name="up" />
+		<s:State name="over" />
+		<s:State name="down" />
+		<s:State name="disabled" />
+	</s:states>
+	
+	<!-- layer 1: fill -->
+	<!--- @private -->
+	<s:Rect id="fill" left="1" right="1" top="1" bottom="1">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="0xFFFFFF" 
+								 color.over="0xBBBDBD" 
+								 color.down="0xAAAAAA" 
+								 alpha="0.85" />
+				<s:GradientEntry color="0xD8D8D8" 
+								 color.over="0x9FA0A1" 
+								 color.down="0x929496" 
+								 alpha="0.85" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 2: fill lowlight -->
+	<!--- @private -->
+	<s:Rect id="lowlight" left="1" right="1" top="1" bottom="1">
+		<s:fill>
+			<s:LinearGradient rotation="270">
+				<s:GradientEntry color="0x000000" ratio="0.0" alpha="0.0627" />
+				<s:GradientEntry color="0x000000" ratio="0.48" alpha="0.0099" />
+				<s:GradientEntry color="0x000000" ratio="0.48001" alpha="0" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 3: fill highlight -->
+	<!--- @private -->
+	<s:Rect id="highlight" left="1" right="1" top="1" bottom="1">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.0"
+								 alpha="0.33" 
+								 alpha.over="0.22" 
+								 alpha.down="0.12"/>
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.48"
+								 alpha="0.33"
+								 alpha.over="0.22"
+								 alpha.down="0.12" />
+				<s:GradientEntry color="0xFFFFFF"
+								 ratio="0.48001"
+								 alpha="0" />
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	
+	<!-- layer 4: highlight stroke (all states except down) -->
+	<!--- @private -->
+	<s:Rect id="highlightStroke" left="1" right="1" top="1" bottom="1" radiusX="0" radiusY="0" excludeFrom="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0xFFFFFF" alpha.over="0.22" />
+				<s:GradientEntry color="0xD8D8D8" alpha.over="0.22" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 5: highlight stroke (down state only) -->
+	<!--- @private -->
+	<s:Rect id="hldownstroke1" left="1" right="1" top="1" bottom="1" radiusX="0" radiusY="0" includeIn="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.0" />
+				<s:GradientEntry color="0x000000" alpha="0.25" ratio="0.001" />
+				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.0011" />
+				<s:GradientEntry color="0x000000" alpha="0.07" ratio="0.965" />
+				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.9651" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	<!--- @private -->
+	<s:Rect id="hldownstroke2" left="2" right="2" top="2" bottom="2" radiusX="0" radiusY="0" includeIn="down">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				<s:GradientEntry color="0x000000" alpha="0.09" ratio="0.0" />
+				<s:GradientEntry color="0x000000" alpha="0.00" ratio="0.0001" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 6: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
+	<!--- @private -->
+	<s:Rect id="border" left="0" right="0" top="0" bottom="0" width="18" height="21">
+		<s:stroke>
+			<s:LinearGradientStroke rotation="90" weight="1">
+				
+				<!-- 000000 -->
+				<s:GradientEntry color="0xd2d2d2" 
+								 alpha="0.5625"
+								 alpha.down="0.6375" />
+				<s:GradientEntry color="0xd2d2d2" 
+								 alpha="0.75" 
+								 alpha.down="0.85" />
+			</s:LinearGradientStroke>
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- layer 7: arrow -->
+	<!--- The arrow graphic displayed in the anchor button. -->
+	<s:Path right="6" verticalCenter="0" id="arrow"
+			data="M 4.0 4.0 L 4.0 3.0 L 5.0 3.0 L 5.0 2.0 L 6.0 2.0 L 6.0 1.0 L 7.0 1.0 L 7.0 0.0 L 0.0 0.0 L 0.0 1.0 L 1.0 1.0 L 1.0 2.0 L 2.0 2.0 L 2.0 3.0 L 3.0 3.0 L 3.0 4.0 L 4.0 4.0">
+		<s:fill>
+			<s:RadialGradient rotation="90" focalPointRatio="1">   
+				<!--- 
+				@private
+				The first part of the arrow's gradient fill. 
+				The default alpha is .6. The default color if 0x000000.
+				-->
+				<s:GradientEntry id="arrowFill1" color="0" alpha="0.6" />
+				<!--- 
+				@private 
+				The second part of the arrow's gradient fill. 
+				The default alpha is .6. The default color if 0x000000.
+				-->
+				<s:GradientEntry id="arrowFill2" color="0" alpha="0.8" />
+			</s:RadialGradient>
+		</s:fill>
+	</s:Path>
+</s:SparkSkin>

+ 247 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/DateTimeInputSkin.mxml

@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+<!--- The default skin class for Spark TextInput component.  
+
+@see spark.components.TextInput
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
+			 alpha.disabledStates="0.5" blendMode="normal">
+	<fx:Metadata>[HostComponent("com.xt.hb.ui.QTextInput")]</fx:Metadata>
+	
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			import mx.core.FlexVersion;
+			
+			private var paddingChanged:Boolean;
+			
+			/* Define the skin elements that should not be colorized. */
+			static private const exclusions:Array = ["background", "textDisplay", "promptDisplay", "border"];
+			
+			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
+			static private const exclusions_4_0:Array = ["background", "textDisplay", "promptDisplay"];
+			
+			/**
+			 * @private
+			 */
+			override public function get colorizeExclusions():Array 
+			{
+				// Since border is styleable via borderColor, no need to allow chromeColor to affect
+				// the border.  This is wrapped in a compatibility flag since this change was added  
+				// in Flex 4.5
+				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+				{
+					return exclusions_4_0;
+				}
+				
+				return exclusions;
+			}
+			
+			/* Define the content fill items that should be colored by the "contentBackgroundColor" style. */
+			static private const contentFill:Array = ["bgFill"];
+			
+			/**
+			 *  @private
+			 */
+			override public function get contentItems():Array {return contentFill};
+			
+			/**
+			 *  @private
+			 */
+			override protected function commitProperties():void
+			{
+				super.commitProperties();
+				
+				if (paddingChanged)
+				{
+					updatePadding();
+					paddingChanged = false;
+				}
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+			
+			/**
+			 *  @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+			{
+				if (getStyle("borderVisible") == true)
+				{
+					border.visible = true;
+					shadow.visible = true;
+					background.left = background.top = background.right = background.bottom = 1;
+					textDisplay.left = textDisplay.top = textDisplay.right = textDisplay.bottom = 1;
+					if (promptDisplay)
+					{
+						promptDisplay.setLayoutBoundsSize(unscaledWidth - 2, unscaledHeight - 2);
+						promptDisplay.setLayoutBoundsPosition(1, 1);
+					}
+				}
+				else
+				{
+					border.visible = false;
+					shadow.visible = false;
+					background.left = background.top = background.right = background.bottom = 0;
+					textDisplay.left = textDisplay.top = textDisplay.right = textDisplay.bottom = 0;
+					if (promptDisplay)
+					{
+						promptDisplay.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
+						promptDisplay.setLayoutBoundsPosition(0, 0);
+					}
+				}
+				
+				borderStroke.color = getStyle("borderColor");
+				borderStroke.alpha = getStyle("borderAlpha");
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			/**
+			 *  @private
+			 */
+			private function updatePadding():void
+			{
+				if (!textDisplay)
+					return;
+				
+				// Push padding styles into the textDisplay
+				var padding:Number;
+				
+				padding = getStyle("paddingLeft");
+				if (textDisplay.getStyle("paddingLeft") != padding)
+					textDisplay.setStyle("paddingLeft", padding);
+				
+				padding = getStyle("paddingTop");
+				if (textDisplay.getStyle("paddingTop") != padding)
+					textDisplay.setStyle("paddingTop", padding);
+				
+				padding = getStyle("paddingRight");
+				if (textDisplay.getStyle("paddingRight") != padding)
+					textDisplay.setStyle("paddingRight", padding);
+				
+				padding = getStyle("paddingBottom");
+				if (textDisplay.getStyle("paddingBottom") != padding)
+					textDisplay.setStyle("paddingBottom", padding);
+				
+				if (!promptDisplay)
+					return;
+				
+				padding = getStyle("paddingLeft");
+				if (promptDisplay.getStyle("paddingLeft") != padding)
+					promptDisplay.setStyle("paddingLeft", padding);
+				
+				padding = getStyle("paddingTop");
+				if (promptDisplay.getStyle("paddingTop") != padding)
+					promptDisplay.setStyle("paddingTop", padding);
+				
+				padding = getStyle("paddingRight");
+				if (promptDisplay.getStyle("paddingRight") != padding)
+					promptDisplay.setStyle("paddingRight", padding);
+				
+				padding = getStyle("paddingBottom");
+				if (promptDisplay.getStyle("paddingBottom") != padding)
+					promptDisplay.setStyle("paddingBottom", padding);
+			}
+			
+			/**
+			 *  @private
+			 */
+			override public function styleChanged(styleProp:String):void
+			{
+				var allStyles:Boolean = !styleProp || styleProp == "styleName";
+				
+				super.styleChanged(styleProp);
+				
+				if (allStyles || styleProp.indexOf("padding") == 0)
+				{
+					paddingChanged = true;
+					invalidateProperties();
+				}
+			}
+		]]>
+	</fx:Script>
+	
+	<fx:Script>
+		<![CDATA[
+			/** 
+			 * @private 
+			 */     
+			private static const focusExclusions:Array = ["textDisplay"];
+			
+			/**
+			 *  @private
+			 */
+			override public function get focusSkinExclusions():Array { return focusExclusions;};
+		]]>
+	</fx:Script>
+	
+	<s:states>
+		<s:State name="normal"/>
+		<s:State name="disabled" stateGroups="disabledStates"/>
+		<s:State name="normalWithPrompt"/>
+		<s:State name="disabledWithPrompt" stateGroups="disabledStates"/>
+	</s:states>
+	
+	<!-- border --> 
+	<!--- @private -->
+	<s:Rect left="0" right="0" top="0" bottom="0" id="border">
+		<s:stroke>     
+			<!--- @private -->
+			<s:SolidColorStroke id="borderStroke" weight="1" />
+		</s:stroke>
+	</s:Rect>
+	
+	<!-- fill -->
+	<!--- Defines the appearance of the TextInput component's background. -->
+	<s:Rect id="background" left="1" right="1" top="1" bottom="1">
+		<s:fill>
+			<!--- @private Defines the background fill color. -->
+			<s:SolidColor id="bgFill" color="0xFFFFFF" />
+		</s:fill>
+	</s:Rect>
+	
+	<!-- shadow -->
+	<!--- @private -->
+	<s:Rect left="1" top="1" right="1" height="1" id="shadow">
+		<s:fill>
+			<s:SolidColor color="0x000000" alpha="0.12" />
+		</s:fill>
+	</s:Rect>
+	
+	<!-- text -->
+	<!--- @copy spark.components.supportClasses.SkinnableTextBase#textDisplay -->
+	<s:RichEditableText id="textDisplay"
+						verticalAlign="bottom"
+						widthInChars="10"
+						left="1" right="1" top="1" bottom="1" />
+	<!--- Defines the Label that is used for prompt text. The includeInLayout property is false so the prompt text does not affect measurement. -->
+	<s:Label id="promptDisplay" maxDisplayedLines="1"
+			 verticalAlign="middle"
+			 mouseEnabled="false" mouseChildren="false"
+			 includeIn="normalWithPrompt,disabledWithPrompt" 
+			 includeInLayout="false"
+			 />
+	
+</s:SparkSkin>

+ 178 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/LeftMenuChildSkin.mxml

@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for a Spark ToggleButton component.  
+
+@see spark.components.ToggleButton
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
+				   xmlns:s="library://ns.adobe.com/flex/spark"
+				   xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
+				   minWidth="20" minHeight="100"  height.selectedUpStates="100"  height.downStates="100" height.over="100" height.overAndSelected="100"
+				   alpha.disabledStates="0.5" autoIconManagement="false" 
+				   width="100%" height="100" >
+	<!--h:33    height.selectedUpStates="37"  height.downStates="37" height.over="35" height.overAndSelected="37"-->
+	<fx:Metadata>[HostComponent("spark.components.ButtonBarButton")]</fx:Metadata>
+	
+	<!-- host component -->
+	<fx:Script fb:purpose="styling">
+		
+		<![CDATA[
+			import mx.events.FlexEvent;
+			
+			protected function label1_initializeHandler(event:FlexEvent):void
+			{
+				// TODO Auto-generated method stub
+				var label:Label = event.currentTarget as Label; 
+				var text:String = event.currentTarget.text; 
+				var length:int = text.length; 
+				var newText:String = ""; 
+				for(var i:int = 0; i < length; i++) 
+				{ 
+					newText += text.charAt(i)+"\r\n"; 
+				} 
+				label.text = newText;
+			}
+		
+			/* Define the skin elements that should not be colorized. 
+			For toggle button, the graphics are colorized but the label is not. */
+			static private const exclusions:Array = ["labelDisplay"];
+			
+			/**
+			 * @private
+			 */    
+			override public function get colorizeExclusions():Array {return exclusions;}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
+			{
+				var cr:Number = getStyle("cornerRadius");
+				
+				if (cornerRadius != cr)
+				{
+					cornerRadius = 2;
+					//shadow.radiusX = cornerRadius;
+//					fill.topLeftRadiusX = cornerRadius;
+//					fill.topRightRadiusX= cornerRadius;
+					fill.radiusX = cornerRadius;
+				}
+				
+				
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			private var cornerRadius:Number = 8;
+		]]>
+	</fx:Script>
+	
+	<!-- states -->
+	<s:states>
+		<!--一个组件会有8种状态-->
+		<s:State name="up" /> <!--初始-->
+		<s:State name="over" stateGroups="overStates" />  <!--鼠标悬停-->
+		<s:State name="down" stateGroups="downStates" />  <!--鼠标按下去后-->
+		<s:State name="disabled" stateGroups="disabledStates" />  <!-- 禁用   占时没有设置-->
+		<s:State name="upAndSelected" stateGroups="selectedStates, selectedUpStates" />   <!--选中-->
+		<s:State name="overAndSelected" stateGroups="overStates, selectedStates" />  
+		<s:State name="downAndSelected" stateGroups="downStates, selectedStates" />
+		<s:State name="disabledAndSelected" stateGroups="selectedUpStates, disabledStates, selectedStates" />
+	</s:states>
+
+	<s:Rect left="0" right="1" bottom="0" top="0">
+		<s:fill>
+			<s:SolidColor color.up="#cce8ff"
+						  color.over="#afd3f1"
+						  color.down="#afd3f1"
+						  color.selectedStates="#afd3f1"
+					 />
+		</s:fill>
+	</s:Rect>
+
+	<s:Rect left="1" right="0" bottom="0" top="0">
+		<s:fill>
+			<s:SolidColor color.up="#cce8ff"
+						  color.over="#afd3f1"
+						  color.down="#EEF7FF"
+						  color.selectedStates="#EEF7FF"
+						  />
+		</s:fill>
+	</s:Rect>
+
+	<s:Rect left="1" right="1" bottom="1" top="0">
+		<s:fill>
+			<s:SolidColor color.up="#cce8ff"
+						  color.over="#afd3f1"
+						  color.down="#afd3f1"
+						  color.selectedStates="#afd3f1"
+						  />
+		</s:fill>
+	</s:Rect>
+
+	<s:Rect left="1" right="1" bottom="0" top="1">
+		<s:fill>
+			<s:SolidColor color.up="#cce8ff"
+						  color.over="#afd3f1"
+						  color.down="#afd3f1"
+						  color.selectedStates="#afd3f1"
+						  />
+		</s:fill>
+	</s:Rect>
+
+	
+	
+	
+	
+	<s:Rect id="fill" left="1" right="1" top="1" bottom="1">  
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<s:GradientEntry ratio="0" alpha="1.0"  color.up="#cce8ff" color.over="#EEF7FF" color.down="#F5FAFE" color.selectedStates="#F5FAFE"  />
+				<s:GradientEntry ratio="1"  alpha="1.0" color.up="#cce8ff" color.over="#EEF7FF" color.down="#F5FAFE" color.selectedStates="#F5FAFE"  />
+			</s:LinearGradient>		
+		</s:fill>		
+	</s:Rect>
+
+
+		
+	<s:Label id="labelDisplay" maxDisplayedLines="0" textAlign="center" 
+			 color="#2f6ea1" color.over="#2f6ea1" color.down="#2f6ea1"   color.selectedStates="#2f6ea1"  fontFamily="宋体"  fontSize="15"  
+			 horizontalCenter="0" verticalCenter="10" left="-5" width="27" fontWeight="normal" fontWeight.over="normal" fontWeight.down="bold"  fontWeight.selectedStates="bold" creationComplete="label1_initializeHandler(event);" >
+	</s:Label>
+	
+	
+	<s:BitmapImage id="iconDisplay" includeInLayout="{iconDisplay.source}" horizontalAlign="center" verticalAlign="middle" top="6" left="6"  />
+	<s:DataGroup id="DataGroup" width="100%" height="100%" >
+		<s:layout>
+			<s:HorizontalLayout verticalAlign="top"/>
+		</s:layout>
+	</s:DataGroup>
+	
+
+	
+</s:SparkButtonSkin>

+ 79 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/LeftMenuSkin.mxml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for the Spark ButtonBar component. The buttons on the ButtonBar component
+use the ButtonBarLastButtonSkin, ButtonBarFirstButtonSkin and ButtonBarMiddleButtonSkin classes.  
+
+@see spark.components.ButtonBar
+@see spark.components.ButtonBarButton    
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+		alpha.disabled="0.5">
+	
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.ApplicationSkin#hostComponent
+		*/
+		[HostComponent("spark.components.ButtonBar")]
+		]]>
+	</fx:Metadata> 
+	
+	<s:states>
+		<s:State name="normal" />
+		<s:State name="disabled" />
+	</s:states>
+	
+	<fx:Declarations>
+		<!--- 
+		@copy spark.components.ButtonBar#firstButton
+		@default spark.skins.spark.ButtonBarFirstButtonSkin
+		@see spark.skins.spark.ButtonBarFirstButtonSkin
+		-->
+		<fx:Component id="firstButton">
+			<s:ButtonBarButton skinClass="com.skins.tdt.LeftMenuChildSkin" />
+		</fx:Component>
+		
+		<!--- 
+		@copy spark.components.ButtonBar#middleButton
+		@default spark.skins.spark.ButtonBarMiddleButtonSkin
+		@see spark.skins.spark.ButtonBarMiddleButtonSkin
+		-->
+		<fx:Component id="middleButton" >
+			<s:ButtonBarButton skinClass="com.skins.tdt.LeftMenuChildSkin" />
+		</fx:Component>
+		
+		<!--- 
+		@copy spark.components.ButtonBar#lastButton
+		@default spark.skins.spark.ButtonBarLastButtonSkin
+		@see spark.skins.spark.ButtonBarLastButtonSkin
+		-->
+		<fx:Component id="lastButton" >
+			<s:ButtonBarButton skinClass="com.skins.tdt.LeftMenuChildSkin" />
+		</fx:Component>
+		
+	</fx:Declarations>
+	<!--- @copy spark.components.SkinnableDataContainer#dataGroup -->
+	<s:DataGroup id="dataGroup" width="100%" height="100%">
+		<s:layout>
+			<s:ButtonBarHorizontalLayout gap="-1"/>
+		</s:layout>
+	</s:DataGroup>
+	
+</s:Skin>
+

+ 36 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/SkinnableContainerSkin.mxml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			 xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:mx="library://ns.adobe.com/flex/mx" >
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	<s:states>
+		<s:State name="normal"/>
+		<s:State name="disabled"/>
+	</s:states>
+	<s:Rect height="100%" width="100%" alpha="1" >
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<!--s:GradientEntry color="#12b601" alpha="1" ratio="0"/-->
+				<s:GradientEntry color="#3c93b6" alpha="1" ratio="0"/>
+				<s:GradientEntry color="#46a3c4" alpha="1" ratio="1"/>
+			</s:LinearGradient>
+		</s:fill> 
+		
+	</s:Rect>
+	<s:Rect height="25" width="100%" alpha="1">
+		<s:fill>
+			<s:LinearGradient rotation="90">
+				<!--s:GradientEntry color="#12b601" alpha="1" ratio="0"/-->
+				<s:GradientEntry color="#98c5d5" alpha="1" ratio="0"/>
+				<s:GradientEntry color="#3c8fb2" alpha="1" ratio="1"/>
+			</s:LinearGradient>
+		</s:fill>
+	</s:Rect>
+	<s:Group id="contentGroup" left="0" right="0" bottom="0" top="0" alpha="1"   >
+		<s:layout >
+			<s:BasicLayout/>
+		</s:layout>
+	</s:Group>
+</s:SparkSkin>

+ 255 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/TextInputSkin.mxml

@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    ADOBE SYSTEMS INCORPORATED
+    Copyright 2008 Adobe Systems Incorporated
+    All Rights Reserved.
+
+    NOTICE: Adobe permits you to use, modify, and distribute this file
+    in accordance with the terms of the license agreement accompanying it.
+
+-->
+<!--- The default skin class for Spark TextInput component.  
+
+     @see spark.components.TextInput
+        
+      @langversion 3.0
+      @playerversion Flash 10
+      @playerversion AIR 1.5
+      @productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
+    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
+    alpha.disabledStates="0.5" blendMode="normal">
+
+    <fx:Metadata>
+    <![CDATA[ 
+        /** 
+         * @copy spark.skins.spark.ApplicationSkin#hostComponent
+         */
+        [HostComponent("spark.components.TextInput")]
+    ]]>
+    </fx:Metadata> 
+    
+    <fx:Script fb:purpose="styling">
+        <![CDATA[
+        import mx.core.FlexVersion;
+        
+        private var paddingChanged:Boolean;
+        
+        /* Define the skin elements that should not be colorized. */
+        static private const exclusions:Array = ["background", "textDisplay", "promptDisplay", "border"];
+        
+        /* exclusions before Flex 4.5 for backwards-compatibility purposes */
+        static private const exclusions_4_0:Array = ["background", "textDisplay", "promptDisplay"];
+        
+        /**
+         * @private
+         */
+        override public function get colorizeExclusions():Array 
+        {
+            // Since border is styleable via borderColor, no need to allow chromeColor to affect
+            // the border.  This is wrapped in a compatibility flag since this change was added  
+            // in Flex 4.5
+            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+            {
+                return exclusions_4_0;
+            }
+            
+            return exclusions;
+        }
+        
+        /* Define the content fill items that should be colored by the "contentBackgroundColor" style. */
+        static private const contentFill:Array = ["bgFill"];
+
+        /**
+         *  @private
+         */
+        override public function get contentItems():Array {return contentFill};
+        
+        /**
+         *  @private
+         */
+        override protected function commitProperties():void
+        {
+            super.commitProperties();
+            
+            if (paddingChanged)
+            {
+                updatePadding();
+                paddingChanged = false;
+            }
+        }
+        
+        /**
+         * @private
+         */
+        override protected function initializationComplete():void
+        {
+            useChromeColor = true;
+            super.initializationComplete();
+        }
+        
+        /**
+         *  @private
+         */
+        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+        {
+            if (getStyle("borderVisible") == true)
+            {
+                border.visible = true;
+                shadow.visible = true;
+                background.left = background.top = background.right = background.bottom = 1;
+                textDisplay.left = textDisplay.top = textDisplay.right = textDisplay.bottom = 1;
+                if (promptDisplay)
+                {
+                    promptDisplay.setLayoutBoundsSize(unscaledWidth - 2, unscaledHeight - 2);
+                    promptDisplay.setLayoutBoundsPosition(1, 1);
+                }
+            }
+            else
+            {
+                border.visible = false;
+                shadow.visible = false;
+                background.left = background.top = background.right = background.bottom = 0;
+                textDisplay.left = textDisplay.top = textDisplay.right = textDisplay.bottom = 0;
+                if (promptDisplay)
+                {
+                    promptDisplay.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
+                    promptDisplay.setLayoutBoundsPosition(0, 0);
+                }
+            }
+            
+            borderStroke.color = getStyle("borderColor");
+            borderStroke.alpha = getStyle("borderAlpha");
+            
+            super.updateDisplayList(unscaledWidth, unscaledHeight);
+        }
+
+        /**
+         *  @private
+         */
+        private function updatePadding():void
+        {
+            if (!textDisplay)
+                return;
+            
+            // Push padding styles into the textDisplay
+            var padding:Number;
+            
+            padding = getStyle("paddingLeft");
+            if (textDisplay.getStyle("paddingLeft") != padding)
+                textDisplay.setStyle("paddingLeft", padding);
+            
+            padding = getStyle("paddingTop");
+            if (textDisplay.getStyle("paddingTop") != padding)
+                textDisplay.setStyle("paddingTop", padding);
+            
+            padding = getStyle("paddingRight");
+            if (textDisplay.getStyle("paddingRight") != padding)
+                textDisplay.setStyle("paddingRight", padding);
+            
+            padding = getStyle("paddingBottom");
+            if (textDisplay.getStyle("paddingBottom") != padding)
+                textDisplay.setStyle("paddingBottom", padding);
+            
+            if (!promptDisplay)
+                return;
+            
+            padding = getStyle("paddingLeft");
+            if (promptDisplay.getStyle("paddingLeft") != padding)
+                promptDisplay.setStyle("paddingLeft", padding);
+            
+            padding = getStyle("paddingTop");
+            if (promptDisplay.getStyle("paddingTop") != padding)
+                promptDisplay.setStyle("paddingTop", padding);
+            
+            padding = getStyle("paddingRight");
+            if (promptDisplay.getStyle("paddingRight") != padding)
+                promptDisplay.setStyle("paddingRight", padding);
+            
+            padding = getStyle("paddingBottom");
+            if (promptDisplay.getStyle("paddingBottom") != padding)
+                promptDisplay.setStyle("paddingBottom", padding);
+        }
+        
+        /**
+         *  @private
+         */
+        override public function styleChanged(styleProp:String):void
+        {
+            var allStyles:Boolean = !styleProp || styleProp == "styleName";
+
+            super.styleChanged(styleProp);
+            
+            if (allStyles || styleProp.indexOf("padding") == 0)
+            {
+                paddingChanged = true;
+                invalidateProperties();
+            }
+        }
+        ]]>
+    </fx:Script>
+    
+    <fx:Script>
+        <![CDATA[
+        /** 
+         * @private 
+         */     
+        private static const focusExclusions:Array = ["textDisplay"];
+
+        /**
+         *  @private
+         */
+        override public function get focusSkinExclusions():Array { return focusExclusions;};
+        ]]>
+    </fx:Script>
+    
+    <s:states>
+        <s:State name="normal"/>
+        <s:State name="disabled" stateGroups="disabledStates"/>
+        <s:State name="normalWithPrompt"/>
+        <s:State name="disabledWithPrompt" stateGroups="disabledStates"/>
+    </s:states>
+    
+    <!-- border --> 
+    <!--- @private -->
+    <s:Rect left="0" right="0" top="0" bottom="0" id="border">
+        <s:stroke>     
+            <!--- @private -->
+            <s:SolidColorStroke id="borderStroke" weight="1" />
+        </s:stroke>
+    </s:Rect>
+
+    <!-- fill -->
+    <!--- Defines the appearance of the TextInput component's background. -->
+    <s:Rect id="background" left="1" right="1" top="1" bottom="1">
+        <s:fill>
+            <!--- @private Defines the background fill color. -->
+            <s:SolidColor id="bgFill" color="0xFFFFFF" />
+        </s:fill>
+    </s:Rect>
+    
+    <!-- shadow -->
+    <!--- @private -->
+    <s:Rect left="1" top="1" right="1" height="1" id="shadow">
+        <s:fill>
+            <s:SolidColor color="0x000000" alpha="0.12" />
+        </s:fill>
+    </s:Rect>
+    
+    <!-- text -->
+    <!--- @copy spark.components.supportClasses.SkinnableTextBase#textDisplay -->
+    <s:RichEditableText id="textDisplay"
+              verticalAlign="middle"
+              widthInChars="10"
+              left="1" right="1" top="1" bottom="1" />
+    <!--- Defines the Label that is used for prompt text. The includeInLayout property is false so the prompt text does not affect measurement. -->
+    <s:Label id="promptDisplay" maxDisplayedLines="1"
+                verticalAlign="middle"
+                mouseEnabled="false" mouseChildren="false"
+                includeIn="normalWithPrompt,disabledWithPrompt" 
+                includeInLayout="false"
+                />
+
+</s:SparkSkin>

+ 308 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinBWXQSkin.mxml

@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for a Spark TitleWindow container.  
+
+@see spark.skins.spark.TitleWindowCloseButtonSkin
+@see spark.components.TitleWindow
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false"
+			 minWidth="76" minHeight="76" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
+	
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.ApplicationSkin#hostComponent
+		*/
+		[HostComponent("spark.components.TitleWindow")]
+		]]>
+	</fx:Metadata> 
+	
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			import mx.core.FlexVersion;
+			
+			/* Define the skin elements that should not be colorized. 
+			For panel, border and title background are skinned, but the content area, background, border, and title text are not. */
+			static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "border"];
+			
+			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
+			static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup"];
+			
+			/**
+			 * @private
+			 */
+			override public function get colorizeExclusions():Array 
+			{
+				// Since border is styleable via borderColor, no need to allow chromeColor to affect
+				// the border.  This is wrapped in a compatibility flag since this change was added  
+				// in Flex 4.5
+				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+				{
+					return exclusions_4_0;
+				}
+				
+				return exclusions;
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+			{
+				if (getStyle("borderVisible") == true)
+				{
+					border.visible = true;
+					background.left = background.top = background.right = background.bottom = 1;
+					contents.left = contents.top = contents.right = contents.bottom = 1;
+				}
+				else
+				{
+					border.visible = false;
+					background.left = background.top = background.right = background.bottom = 0;
+					contents.left = contents.top = contents.right = contents.bottom = 0;
+				}
+				
+				dropShadow.visible = getStyle("dropShadowVisible");
+				
+				var cr:Number = getStyle("cornerRadius");
+				var withControls:Boolean = 
+					(currentState == "disabledWithControlBar" || 
+						currentState == "normalWithControlBar" ||
+						currentState == "inactiveWithControlBar");
+				
+				if (cornerRadius != cr)
+				{
+					cornerRadius = cr;
+					
+					dropShadow.tlRadius = cornerRadius;
+					dropShadow.trRadius = cornerRadius;
+					dropShadow.blRadius = withControls ? cornerRadius : 0;
+					dropShadow.brRadius = withControls ? cornerRadius : 0;
+					
+					setPartCornerRadii(topMaskRect, withControls); 
+					setPartCornerRadii(border, withControls); 
+					setPartCornerRadii(background, withControls);
+				}
+				
+				if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 
+				
+				borderStroke.color = getStyle("borderColor");
+				borderStroke.alpha = getStyle("borderAlpha");
+				backgroundFill.color = getStyle("backgroundColor");
+				backgroundFill.alpha = getStyle("backgroundAlpha");
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			/**
+			 * @private
+			 */  
+			private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void
+			{            
+				target.topLeftRadiusX = cornerRadius;
+				target.topRightRadiusX = cornerRadius;
+				target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
+				target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
+			}
+			
+			private var cornerRadius:Number;
+		]]>
+	</fx:Script>
+	
+	<s:states>
+		<s:State name="normal" />
+		<s:State name="inactive" stateGroups="inactiveGroup" />
+		<s:State name="disabled" />
+		<s:State name="normalWithControlBar" stateGroups="withControls" />
+		<s:State name="inactiveWithControlBar" stateGroups="withControls, inactiveGroup" />
+		<s:State name="disabledWithControlBar" stateGroups="withControls" />
+	</s:states>
+	
+	<!--- drop shadow can't be hittable so it stays sibling of other graphics @private-->
+	<s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" 
+							 alpha.inactiveGroup="0.22" distance="11"  distance.inactiveGroup="7"
+							 angle="90" color="0x000000" left="0" top="0" right="0" bottom="0"/>
+	
+	<!--- drop shadow can't be hittable so all other graphics go in this group -->
+	<s:Group left="0" right="0" top="0" bottom="0" >
+		
+		<!--- 表头-->
+		<s:Group left="0" top="0" right="0" bottom="0" id="topGroupMask">
+			<!--- @private-->
+			<s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0" />
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- bottom group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
+				 includeIn="withControls">
+			<!--- @private-->
+			<s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0" />
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- layer 1: border @private -->
+		<s:Rect id="border" left="0" right="0" top="0" bottom="0" >
+			<s:stroke>
+				<!--- Defines the TitleWindowSkin class's border stroke. The default value is 1. -->
+				<s:SolidColorStroke id="borderStroke" weight="1"  />
+			</s:stroke>
+		</s:Rect>
+		
+		<!-- layer 2: background fill -->
+		<!--- Defines the appearance of the TitleWindowSkin class's background. -->
+		<s:Rect id="background" left="1" top="1" right="1" bottom="1">
+			<s:fill>
+				<!--- Defines the TitleWindowSkin class's background fill. The default color is 0xFFFFFF.  -->
+				<s:SolidColor id="backgroundFill" color="#cce8ff"/>
+			</s:fill>
+			
+		</s:Rect>
+		
+		<!-- layer 3: contents -->
+		<!--- Contains the vertical stack of title bar content and control bar. -->
+		<s:Group left="1" right="1" top="1" bottom="1" id="contents">
+			<s:layout>
+				<s:VerticalLayout gap="0" horizontalAlign="justify" />
+			</s:layout>
+			<!--- @private -->
+			<s:Group id="topGroup" mask="{topGroupMask}" alpha.inactiveGroup=".5">
+				
+				<!--- 表头颜色 -->
+				
+				<s:Graphic width="100%" height="100%" id="tbFill">
+					<s:BitmapImage source="@Embed('flexResources/map/s_71.png')" fillMode="repeat"/>
+				</s:Graphic>
+				
+			
+				
+				<!---
+				<s:Rect id="tbFill" left="0" right="0" top="0" bottom="0">
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="#FFCB04" alpha="0.7"/>
+							<s:GradientEntry color="#FFCB04" />
+							<s:GradientEntry color="#FFCB04" alpha="0.7"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				-->
+				<!--- layer 1: title bar highlight @private -->
+				<s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0">
+					
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" />
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" ratio="0.44"/>
+							<s:GradientEntry color="0xFFFFFF" alpha="0" ratio="0.4401"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				
+				<!--- layer 2: title bar divider @private -->
+				<s:Rect id="tbDiv" left="0" right="0" height="0" bottom="0">
+					<s:fill>
+						<s:SolidColor color="#b0c1d2" alpha="0.75" />
+					</s:fill>
+				</s:Rect>
+				
+				<!-- layer 3: text -->
+				<!--- @copy spark.components.Panel#titleDisplay -->
+				<s:Label id="titleDisplay" maxDisplayedLines="1"
+						 left="9" right="36" top="1" bottom="0" minHeight="30" fontFamily="宋体"
+						 verticalAlign="middle" fontWeight="bold"  fontSize="12" color="#1d2d3e"/>
+				
+				<!-- layer 4: moveArea -->
+				<!--- @copy spark.components.TitleWindow#moveArea -->
+				<s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
+				
+				<!--- @copy spark.components.TitleWindow#closeButton -->
+				<s:Button id="closeButton" skinClass="spark.skins.spark.TitleWindowCloseButtonSkin"
+						  width="15" height="15" right="7" top="7"  />
+			</s:Group>
+			
+			<!--
+			Note: setting the minimum size to 0 here so that changes to the host component's
+			size will not be thwarted by this skin part's minimum size.   This is a compromise,
+			more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
+			-->
+			<!--- @copy spark.components.SkinnableContainer#contentGroup -->
+			<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0">
+			</s:Group>
+			
+			<!--- @private -->
+			<s:Group id="bottomGroup" minWidth="0" minHeight="0" 
+					 includeIn="withControls">  
+				
+				<s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}">
+					
+					<!-- layer 0: control bar divider line -->
+					<s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
+						<s:fill>
+							<s:SolidColor color="0x000000" />
+						</s:fill>
+					</s:Rect>
+					
+					<!-- layer 1: control bar highlight -->
+					<s:Rect left="0" right="0" top="1" bottom="0">
+						<s:stroke>
+							<s:LinearGradientStroke rotation="90" weight="1">
+								<s:GradientEntry color="0xFFFFFF" />
+								<s:GradientEntry color="0xD8D8D8" />
+							</s:LinearGradientStroke>
+						</s:stroke>
+					</s:Rect>
+					
+					<!-- layer 2: control bar fill -->
+					<s:Rect left="1" right="1" top="2" bottom="1">
+						<s:fill>
+							<s:LinearGradient rotation="90">
+								<s:GradientEntry color="0xEDEDED"/>
+								<s:GradientEntry color="0xCDCDCD"/>
+							</s:LinearGradient>
+						</s:fill>
+					</s:Rect>
+				</s:Group>
+				
+				<!--- @copy spark.components.Panel#controlBarGroup -->
+				<s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
+					<s:layout>
+						<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
+					</s:layout>
+				</s:Group>
+			</s:Group>
+		</s:Group>
+	</s:Group>
+</s:SparkSkin>

+ 308 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinHighSkin.mxml

@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for a Spark TitleWindow container.  
+
+@see spark.skins.spark.TitleWindowCloseButtonSkin
+@see spark.components.TitleWindow
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false"
+			 minWidth="76" minHeight="76" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
+	
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.ApplicationSkin#hostComponent
+		*/
+		[HostComponent("spark.components.TitleWindow")]
+		]]>
+	</fx:Metadata> 
+	
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			import mx.core.FlexVersion;
+			
+			/* Define the skin elements that should not be colorized. 
+			For panel, border and title background are skinned, but the content area, background, border, and title text are not. */
+			static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "border"];
+			
+			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
+			static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup"];
+			
+			/**
+			 * @private
+			 */
+			override public function get colorizeExclusions():Array 
+			{
+				// Since border is styleable via borderColor, no need to allow chromeColor to affect
+				// the border.  This is wrapped in a compatibility flag since this change was added  
+				// in Flex 4.5
+				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+				{
+					return exclusions_4_0;
+				}
+				
+				return exclusions;
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+			{
+				if (getStyle("borderVisible") == true)
+				{
+					border.visible = true;
+					background.left = background.top = background.right = background.bottom = 1;
+					contents.left = contents.top = contents.right = contents.bottom = 1;
+				}
+				else
+				{
+					border.visible = false;
+					background.left = background.top = background.right = background.bottom = 0;
+					contents.left = contents.top = contents.right = contents.bottom = 0;
+				}
+				
+				dropShadow.visible = getStyle("dropShadowVisible");
+				
+				var cr:Number = getStyle("cornerRadius");
+				var withControls:Boolean = 
+					(currentState == "disabledWithControlBar" || 
+						currentState == "normalWithControlBar" ||
+						currentState == "inactiveWithControlBar");
+				
+				if (cornerRadius != cr)
+				{
+					cornerRadius = cr;
+					
+					dropShadow.tlRadius = cornerRadius;
+					dropShadow.trRadius = cornerRadius;
+					dropShadow.blRadius = withControls ? cornerRadius : 0;
+					dropShadow.brRadius = withControls ? cornerRadius : 0;
+					
+					setPartCornerRadii(topMaskRect, withControls); 
+					setPartCornerRadii(border, withControls); 
+					setPartCornerRadii(background, withControls);
+				}
+				
+				if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 
+				
+				borderStroke.color = getStyle("borderColor");
+				borderStroke.alpha = getStyle("borderAlpha");
+				backgroundFill.color = getStyle("backgroundColor");
+				backgroundFill.alpha = getStyle("backgroundAlpha");
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			/**
+			 * @private
+			 */  
+			private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void
+			{            
+				target.topLeftRadiusX = cornerRadius;
+				target.topRightRadiusX = cornerRadius;
+				target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
+				target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
+			}
+			
+			private var cornerRadius:Number;
+		]]>
+	</fx:Script>
+	
+	<s:states>
+		<s:State name="normal" />
+		<s:State name="inactive" stateGroups="inactiveGroup" />
+		<s:State name="disabled" />
+		<s:State name="normalWithControlBar" stateGroups="withControls" />
+		<s:State name="inactiveWithControlBar" stateGroups="withControls, inactiveGroup" />
+		<s:State name="disabledWithControlBar" stateGroups="withControls" />
+	</s:states>
+	
+	<!--- drop shadow can't be hittable so it stays sibling of other graphics @private-->
+	<s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" 
+							 alpha.inactiveGroup="0.22" distance="11"  distance.inactiveGroup="7"
+							 angle="90" color="0x000000" left="0" top="0" right="0" bottom="0"/>
+	
+	<!--- drop shadow can't be hittable so all other graphics go in this group -->
+	<s:Group left="0" right="0" top="0" bottom="0" >
+		
+		<!--- 表头-->
+		<s:Group left="0" top="0" right="0" bottom="0" id="topGroupMask">
+			<!--- @private-->
+			<s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0" />
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- bottom group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
+				 includeIn="withControls">
+			<!--- @private-->
+			<s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0" />
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- layer 1: border @private -->
+		<s:Rect id="border" left="0" right="0" top="0" bottom="0" >
+			<s:stroke>
+				<!--- Defines the TitleWindowSkin class's border stroke. The default value is 1. -->
+				<s:SolidColorStroke id="borderStroke" weight="1"  />
+			</s:stroke>
+		</s:Rect>
+		
+		<!-- layer 2: background fill -->
+		<!--- Defines the appearance of the TitleWindowSkin class's background. -->
+		<s:Rect id="background" left="1" top="1" right="1" bottom="1">
+			<s:fill>
+				<!--- Defines the TitleWindowSkin class's background fill. The default color is 0xFFFFFF.  -->
+				<s:SolidColor id="backgroundFill" color="#cce8ff"/>
+			</s:fill>
+			
+		</s:Rect>
+		
+		<!-- layer 3: contents -->
+		<!--- Contains the vertical stack of title bar content and control bar. -->
+		<s:Group left="1" right="1" top="1" bottom="1" id="contents">
+			<s:layout>
+				<s:VerticalLayout gap="0" horizontalAlign="justify" />
+			</s:layout>
+			<!--- @private -->
+			<s:Group id="topGroup" mask="{topGroupMask}" alpha.inactiveGroup=".5">
+				
+				<!--- 表头颜色 
+				
+				<s:Graphic width="100%" height="100%" id="tbFill">
+					<s:BitmapImage source="@Embed('flexResources/homePage/s_71.png')" fillMode="repeat"/>
+				</s:Graphic>
+				-->
+			
+				
+				
+				<s:Rect id="tbFill" left="0" right="0" top="0" bottom="0">
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="#FFCB04" alpha="0.7"/>
+							<s:GradientEntry color="#FFCB04" />
+							<s:GradientEntry color="#FFCB04" alpha="0.7"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				
+				<!--- layer 1: title bar highlight @private -->
+				<s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0">
+					
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" />
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" ratio="0.44"/>
+							<s:GradientEntry color="0xFFFFFF" alpha="0" ratio="0.4401"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				
+				<!--- layer 2: title bar divider @private -->
+				<s:Rect id="tbDiv" left="0" right="0" height="0" bottom="0">
+					<s:fill>
+						<s:SolidColor color="#b0c1d2" alpha="0.75" />
+					</s:fill>
+				</s:Rect>
+				
+				<!-- layer 3: text -->
+				<!--- @copy spark.components.Panel#titleDisplay -->
+				<s:Label id="titleDisplay" maxDisplayedLines="1"
+						 left="9" right="36" top="1" bottom="0" minHeight="30" fontFamily="宋体"
+						 verticalAlign="middle" fontWeight="bold"  fontSize="12" color="#1d2d3e"/>
+				
+				<!-- layer 4: moveArea -->
+				<!--- @copy spark.components.TitleWindow#moveArea -->
+				<s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
+				
+				<!--- @copy spark.components.TitleWindow#closeButton -->
+				<s:Button id="closeButton" skinClass="spark.skins.spark.TitleWindowCloseButtonSkin"
+						  width="15" height="15" right="7" top="7"  />
+			</s:Group>
+			
+			<!--
+			Note: setting the minimum size to 0 here so that changes to the host component's
+			size will not be thwarted by this skin part's minimum size.   This is a compromise,
+			more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
+			-->
+			<!--- @copy spark.components.SkinnableContainer#contentGroup -->
+			<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0">
+			</s:Group>
+			
+			<!--- @private -->
+			<s:Group id="bottomGroup" minWidth="0" minHeight="0" 
+					 includeIn="withControls">  
+				
+				<s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}">
+					
+					<!-- layer 0: control bar divider line -->
+					<s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
+						<s:fill>
+							<s:SolidColor color="0x000000" />
+						</s:fill>
+					</s:Rect>
+					
+					<!-- layer 1: control bar highlight -->
+					<s:Rect left="0" right="0" top="1" bottom="0">
+						<s:stroke>
+							<s:LinearGradientStroke rotation="90" weight="1">
+								<s:GradientEntry color="0xFFFFFF" />
+								<s:GradientEntry color="0xD8D8D8" />
+							</s:LinearGradientStroke>
+						</s:stroke>
+					</s:Rect>
+					
+					<!-- layer 2: control bar fill -->
+					<s:Rect left="1" right="1" top="2" bottom="1">
+						<s:fill>
+							<s:LinearGradient rotation="90">
+								<s:GradientEntry color="0xEDEDED"/>
+								<s:GradientEntry color="0xCDCDCD"/>
+							</s:LinearGradient>
+						</s:fill>
+					</s:Rect>
+				</s:Group>
+				
+				<!--- @copy spark.components.Panel#controlBarGroup -->
+				<s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
+					<s:layout>
+						<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
+					</s:layout>
+				</s:Group>
+			</s:Group>
+		</s:Group>
+	</s:Group>
+</s:SparkSkin>

+ 300 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWinSkin.mxml

@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+ADOBE SYSTEMS INCORPORATED
+Copyright 2008 Adobe Systems Incorporated
+All Rights Reserved.
+
+NOTICE: Adobe permits you to use, modify, and distribute this file
+in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for a Spark TitleWindow container.  
+
+@see spark.skins.spark.TitleWindowCloseButtonSkin
+@see spark.components.TitleWindow
+
+@langversion 3.0
+@playerversion Flash 10
+@playerversion AIR 1.5
+@productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
+			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false"
+			 minWidth="76" minHeight="76" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
+	
+	<fx:Metadata>
+		<![CDATA[ 
+		/** 
+		* @copy spark.skins.spark.ApplicationSkin#hostComponent
+		*/
+		[HostComponent("spark.components.TitleWindow")]
+		]]>
+	</fx:Metadata> 
+	
+	<fx:Script fb:purpose="styling">
+		<![CDATA[
+			import mx.core.FlexVersion;
+			
+			/* Define the skin elements that should not be colorized. 
+			For panel, border and title background are skinned, but the content area, background, border, and title text are not. */
+			static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "border"];
+			
+			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
+			static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup"];
+			
+			/**
+			 * @private
+			 */
+			override public function get colorizeExclusions():Array 
+			{
+				// Since border is styleable via borderColor, no need to allow chromeColor to affect
+				// the border.  This is wrapped in a compatibility flag since this change was added  
+				// in Flex 4.5
+				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+				{
+					return exclusions_4_0;
+				}
+				
+				return exclusions;
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function initializationComplete():void
+			{
+				useChromeColor = true;
+				super.initializationComplete();
+			}
+			
+			/**
+			 * @private
+			 */
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+			{
+				if (getStyle("borderVisible") == true)
+				{
+					border.visible = true;
+					background.left = background.top = background.right = background.bottom = 1;
+					contents.left = contents.top = contents.right = contents.bottom = 1;
+				}
+				else
+				{
+					border.visible = false;
+					background.left = background.top = background.right = background.bottom = 0;
+					contents.left = contents.top = contents.right = contents.bottom = 0;
+				}
+				
+				dropShadow.visible = getStyle("dropShadowVisible");
+				
+				var cr:Number = getStyle("cornerRadius");
+				var withControls:Boolean = 
+					(currentState == "disabledWithControlBar" || 
+						currentState == "normalWithControlBar" ||
+						currentState == "inactiveWithControlBar");
+				
+				if (cornerRadius != cr)
+				{
+					cornerRadius = cr;
+					
+					dropShadow.tlRadius = cornerRadius;
+					dropShadow.trRadius = cornerRadius;
+					dropShadow.blRadius = withControls ? cornerRadius : 0;
+					dropShadow.brRadius = withControls ? cornerRadius : 0;
+					
+					setPartCornerRadii(topMaskRect, withControls); 
+					setPartCornerRadii(border, withControls); 
+					setPartCornerRadii(background, withControls);
+				}
+				
+				if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 
+				
+				borderStroke.color = getStyle("borderColor");
+				borderStroke.alpha = getStyle("borderAlpha");
+				backgroundFill.color = getStyle("backgroundColor");
+				backgroundFill.alpha = getStyle("backgroundAlpha");
+				
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+			}
+			
+			/**
+			 * @private
+			 */  
+			private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void
+			{            
+				target.topLeftRadiusX = cornerRadius;
+				target.topRightRadiusX = cornerRadius;
+				target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
+				target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
+			}
+			
+			private var cornerRadius:Number;
+		]]>
+	</fx:Script>
+	
+	<s:states>
+		<s:State name="normal" />
+		<s:State name="inactive" stateGroups="inactiveGroup" />
+		<s:State name="disabled" />
+		<s:State name="normalWithControlBar" stateGroups="withControls" />
+		<s:State name="inactiveWithControlBar" stateGroups="withControls, inactiveGroup" />
+		<s:State name="disabledWithControlBar" stateGroups="withControls" />
+	</s:states>
+	
+	<!--- drop shadow can't be hittable so it stays sibling of other graphics @private-->
+	<s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" 
+							 alpha.inactiveGroup="0.22" distance="11"  distance.inactiveGroup="7"
+							 angle="90" color="0x000000" left="0" top="0" right="0" bottom="0"/>
+	
+	<!--- drop shadow can't be hittable so all other graphics go in this group -->
+	<s:Group left="0" right="0" top="0" bottom="0" >
+		
+		<!--- top group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="topGroupMask">
+			<!--- @private-->
+			<s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0"/>
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- bottom group mask @private-->
+		<s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
+				 includeIn="withControls">
+			<!--- @private-->
+			<s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
+				<s:fill>
+					<s:SolidColor alpha="0"/>
+				</s:fill>
+			</s:Rect>
+		</s:Group>
+		
+		<!--- layer 1: border @private -->
+		<s:Rect id="border" left="0" right="0" top="0" bottom="0" >
+			<s:stroke>
+				<!--- Defines the TitleWindowSkin class's border stroke. The default value is 1. -->
+				<s:SolidColorStroke id="borderStroke" weight="1"  />
+			</s:stroke>
+		</s:Rect>
+		
+		<!-- layer 2: background fill -->
+		<!--- Defines the appearance of the TitleWindowSkin class's background. -->
+		<s:Rect id="background" left="1" top="1" right="1" bottom="1">
+			<s:fill>
+				<!--- Defines the TitleWindowSkin class's background fill. The default color is 0xFFFFFF. -->
+				<s:SolidColor id="backgroundFill" color="#eff1f4"/>
+			</s:fill>
+			
+		</s:Rect>
+		
+		<!-- layer 3: contents -->
+		<!--- Contains the vertical stack of title bar content and control bar. -->
+		<s:Group left="1" right="1" top="1" bottom="1" id="contents">
+			<s:layout>
+				<s:VerticalLayout gap="0" horizontalAlign="justify" />
+			</s:layout>
+			<!--- @private -->
+			<s:Group id="topGroup" mask="{topGroupMask}" alpha.inactiveGroup=".5">
+				
+				<!--- layer 0: title bar fill @private -->
+				<s:Rect id="tbFill" left="0" right="0" top="0" bottom="0">
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="#dee7f0" alpha="1"/>
+							<s:GradientEntry color="#dee7f0" alpha="1"/>
+							<s:GradientEntry color="#dee7f0" alpha="1"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				
+				<!--- layer 1: title bar highlight @private -->
+				<s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0">
+					
+					<s:fill>
+						<s:LinearGradient rotation="90">
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" />
+							<s:GradientEntry color="0xFFFFFF" alpha="0.15" ratio="0.44"/>
+							<s:GradientEntry color="0xFFFFFF" alpha="0" ratio="0.4401"/>
+						</s:LinearGradient>
+					</s:fill>
+				</s:Rect>
+				
+				<!--- layer 2: title bar divider @private -->
+				<s:Rect id="tbDiv" left="0" right="0" height="0" bottom="0">
+					<s:fill>
+						<s:SolidColor color="#b0c1d2" alpha="0.75" />
+					</s:fill>
+				</s:Rect>
+				
+				<!-- layer 3: text -->
+				<!--- @copy spark.components.Panel#titleDisplay -->
+				<s:Label id="titleDisplay" maxDisplayedLines="1"
+						 left="9" right="36" top="1" bottom="0" minHeight="30" fontFamily="宋体"
+						 verticalAlign="middle" fontWeight="bold"  fontSize="12" color="#1d2d3e"/>
+				
+				<!-- layer 4: moveArea -->
+				<!--- @copy spark.components.TitleWindow#moveArea -->
+				<s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
+				
+				<!--- @copy spark.components.TitleWindow#closeButton -->
+				<s:Button id="closeButton" skinClass="spark.skins.spark.TitleWindowCloseButtonSkin"
+						  width="15" height="15" right="7" top="7"  />
+			</s:Group>
+			
+			<!--
+			Note: setting the minimum size to 0 here so that changes to the host component's
+			size will not be thwarted by this skin part's minimum size.   This is a compromise,
+			more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
+			-->
+			<!--- @copy spark.components.SkinnableContainer#contentGroup -->
+			<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0">
+			</s:Group>
+			
+			<!--- @private -->
+			<s:Group id="bottomGroup" minWidth="0" minHeight="0" 
+					 includeIn="withControls">  
+				
+				<s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}">
+					
+					<!-- layer 0: control bar divider line -->
+					<s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
+						<s:fill>
+							<s:SolidColor color="0x000000" />
+						</s:fill>
+					</s:Rect>
+					
+					<!-- layer 1: control bar highlight -->
+					<s:Rect left="0" right="0" top="1" bottom="0">
+						<s:stroke>
+							<s:LinearGradientStroke rotation="90" weight="1">
+								<s:GradientEntry color="0xFFFFFF" />
+								<s:GradientEntry color="0xD8D8D8" />
+							</s:LinearGradientStroke>
+						</s:stroke>
+					</s:Rect>
+					
+					<!-- layer 2: control bar fill -->
+					<s:Rect left="1" right="1" top="2" bottom="1">
+						<s:fill>
+							<s:LinearGradient rotation="90">
+								<s:GradientEntry color="0xEDEDED"/>
+								<s:GradientEntry color="0xCDCDCD"/>
+							</s:LinearGradient>
+						</s:fill>
+					</s:Rect>
+				</s:Group>
+				
+				<!--- @copy spark.components.Panel#controlBarGroup -->
+				<s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
+					<s:layout>
+						<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
+					</s:layout>
+				</s:Group>
+			</s:Group>
+		</s:Group>
+	</s:Group>
+</s:SparkSkin>

+ 112 - 0
gkaq/gis-flex/trunk/src/com/skins/tdt/TitleWindowCloseButtonSkin.mxml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+    ADOBE SYSTEMS INCORPORATED
+    Copyright 2008 Adobe Systems Incorporated
+    All Rights Reserved.
+
+    NOTICE: Adobe permits you to use, modify, and distribute this file
+    in accordance with the terms of the license agreement accompanying it.
+
+-->
+
+<!--- The default skin class for the Spark Button component.  
+
+       @see spark.components.Button
+        
+      @langversion 3.0
+      @playerversion Flash 10
+      @playerversion AIR 1.5
+      @productversion Flex 4
+-->
+<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
+             xmlns:s="library://ns.adobe.com/flex/spark" 
+             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
+             minWidth="21" minHeight="21" 
+             alpha.disabled="0.5">
+     
+    <fx:Metadata>
+        <![CDATA[ 
+        /** 
+         * @copy spark.skins.spark.ApplicationSkin#hostComponent
+         */
+        [HostComponent("spark.components.Button")]
+        ]]>
+    </fx:Metadata>
+    
+    <fx:Script fb:purpose="styling">
+        <![CDATA[         
+            import spark.components.Group;
+            /* Define the skin elements that should not be colorized. 
+            For button, the graphics are colorized but the label is not. */
+            static private const exclusions:Array = ["labelDisplay"];
+            
+            /** 
+             * @private
+             */     
+            override public function get colorizeExclusions():Array {return exclusions;}
+            
+            /**
+             * @private
+             */
+            override protected function initializationComplete():void
+            {
+                useChromeColor = true;
+                super.initializationComplete();
+            }  
+            
+            /**
+             *  @private
+             */
+            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
+            {
+                var cr:Number = getStyle("cornerRadius");
+                
+                if (cornerRadius != cr)
+                {
+                    cornerRadius = cr;
+                    fill.radiusX = cornerRadius;
+                }
+                
+                
+                super.updateDisplayList(unscaledWidth, unscaledHeight);
+            }
+            
+            private var cornerRadius:Number = 2;
+                                 
+        ]]>        
+    </fx:Script>
+        
+    <!-- states -->
+    <s:states>
+        <s:State name="up" />
+        <s:State name="over" />
+        <s:State name="down" />
+        <s:State name="disabled" />
+		<s:State name="normal"/>
+    </s:states>
+    
+    <!-- layer 2: fill -->
+    <!--- @private -->
+    <s:Rect id="fill" left="1" right="1" top="1" bottom="1" radiusX="2">
+		<s:fill>
+			<s:BitmapFill  
+				source.up="@Embed('/flexResources/yjpt/list/close.png')" 
+				source.down="@Embed('/flexResources/yjpt/list/close_hover.png')" 
+				source.disabled="@Embed('/flexResources/yjpt/list/close.png')"
+				source.over="@Embed('/flexResources/yjpt/list/close_hover.png')"/>
+		</s:fill>
+    </s:Rect>
+
+    
+    <!-- layer 8: text -->
+    <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay  -->
+    <s:Label id="labelDisplay"
+             textAlign="center"
+             maxDisplayedLines="1"
+             horizontalCenter="0" verticalCenter="1" verticalAlign="middle"
+             left="10" right="10" top="2" bottom="2">
+    </s:Label>
+    
+</s:SparkButtonSkin>

+ 228 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/AisMgr.as

@@ -0,0 +1,228 @@
+package com.xt.hb.ais
+{
+	import com.esri.ags.Graphic;
+	import com.esri.ags.Map;
+	import com.esri.ags.geometry.Extent;
+	import com.esri.ags.geometry.Geometry;
+	import com.esri.ags.geometry.MapPoint;
+	import com.esri.ags.layers.GraphicsLayer;
+	import com.esri.ags.symbols.SimpleFillSymbol;
+	import com.esri.ags.symbols.SimpleLineSymbol;
+	import com.esri.ags.symbols.SimpleMarkerSymbol;
+	import com.esri.ags.utils.JSONUtil;
+	import com.xt.hb.common.InfoModel;
+	import com.xt.hb.utils.AisUtils;
+	import com.xt.hb.utils.CommonUtils;
+	import com.xt.hb.utils.ConfigUtil;
+	import com.xt.hb.utils.ConstUtil;
+	import com.xt.hb.utils.MapUtils;
+	import com.xt.hb.utils.RemoteUtils;
+	
+	import flash.events.MouseEvent;
+	import flash.events.TimerEvent;
+	import flash.utils.Timer;
+	
+	import mx.core.FlexGlobals;
+	import mx.rpc.events.AbstractEvent;
+	import mx.rpc.events.FaultEvent;
+	import mx.rpc.events.ResultEvent;
+
+	public class AisMgr extends ShipMgr
+	{
+		private var cbUpdateTimer:Timer;
+		private static var  instance:AisMgr;
+		private static var showAis:Boolean;
+//		private static var  currLevel;
+		/** 船舶闪烁定时器 */
+		public function AisMgr(singletonEnforcer:SingletonEnforcer)
+		{
+			cbUpdateTimer = new Timer(MapUtils.aisRefreshTime);
+			cbUpdateTimer.addEventListener(TimerEvent.TIMER ,function(event:TimerEvent=null):void
+			{
+				if(showAis){
+					instance.refreshAis();
+				}
+			});
+		}
+		/**
+		 * 获取单例服务
+		 */
+		public static function getInstance():AisMgr {
+			if(instance == null){
+				instance = new AisMgr(new SingletonEnforcer());
+			}
+			return instance;
+		}
+//		/** 当前选中的船舶 */
+//		public var selected:Graphic;
+		/**
+		 * 停止显示ais
+		 */
+		public function stopAis():void{
+			showAis=false;
+			var hscbLayer:GraphicsLayer = MapUtils.getHscbLayer();
+			hscbLayer.clear();
+			cbUpdateTimer.stop();
+		}
+		/**
+		 * 根据当前地图加载海事Ais数据
+		 */
+		public function refreshAis():void{
+			showAis = true;
+			cbUpdateTimer.stop();
+			var extend:Extent = MapUtils.map.extent;
+			if(ConfigUtil.getMapLayerState(ConstUtil.L_ID_AIS) == ConstUtil.CHECK_STATE_1) {
+				RemoteUtils.callRemote("aisCtl","queryAis",queryAisCallback,JSONUtil.encode(extend));
+			}
+		}
+		/**
+		 * 海事Ais查询结果处理
+		 */
+		private function queryAisCallback(r:AbstractEvent):void
+		{
+			if(r is FaultEvent){
+				var fault:	FaultEvent =r as FaultEvent;
+			}else {
+				if(ConfigUtil.getMapLayerState(ConstUtil.L_ID_AIS) == ConstUtil.CHECK_STATE_0) {
+					return;
+				}
+				var hscbLayer:GraphicsLayer = MapUtils.getHscbLayer();
+				var resEvent:	ResultEvent =r as ResultEvent;
+				var hscbInfoArr:Array = resEvent.result as Array;
+				if(null != hscbInfoArr && hscbInfoArr.length>0){
+					hscbLayer.clear();
+				}
+				if(null !=selected && currSelType == "ais"){
+					MapUtils.clearAISGraphic();
+				}
+				var map:Map = FlexGlobals.topLevelApplication.getMap();
+				// 获取地图级别大小
+				var currScale:Number =  map.scale;
+				var pointFlg:Boolean = false;
+				if(currScale>70000) {
+					pointFlg = true;
+				}
+				if(null != hscbInfoArr && hscbInfoArr.length>0){
+					MapUtils.setCbSize(map.scale);
+					for(var i:int=0;i<hscbInfoArr.length;i++)
+					{
+					 	var ship:Object =hscbInfoArr[i];
+						var lon:Number=Number(ship.lon);
+						var lat:Number=Number(ship.lat);
+						var course:Number=Number(ship.course);
+						var length:Number=Number(ship.length);
+						var width:Number=Number(ship.width);
+						var speed:Number=Number(ship.speed);
+						var allShiptype:String = ship.ship_type;
+						var shiptype:String = allShiptype.charAt(0);
+						// 根据daner属性判断船的颜色
+						var danger:String = ship.danger;
+						var cbGraphic:Graphic = null;
+						if(pointFlg) {
+							cbGraphic = new Graphic(new MapPoint(lon,lat),
+								new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,
+									2,0x00FF00,1,0,0,0,new SimpleLineSymbol("solid",0x00FF00,1,1) ));
+							hscbLayer.add(cbGraphic);
+						} else {
+							// 颜色
+							//var color:Number = AisUtils.getColorByShipType(shiptype);
+							var color:Number = AisUtils.getColorByDanger(danger);
+							cbGraphic = new Graphic();
+							cbGraphic.geometry =new  HscbGeometry(lon,lat,course,length,width,speed);
+							cbGraphic.symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,color,1,new SimpleLineSymbol("solid",0xFFC400,1,0.5) );
+							cbGraphic.attributes = ship;
+							cbGraphic.useHandCursor=true;
+							cbGraphic.buttonMode = true;
+							cbGraphic.mouseChildren=false;
+							cbGraphic.addEventListener(MouseEvent.CLICK,hscbClick);
+							cbGraphic.addEventListener(MouseEvent.MOUSE_OVER,hscbMouseOver);
+							cbGraphic.addEventListener(MouseEvent.MOUSE_OUT,hscbMouseOut);
+							if(null !=selected && currSelType == "ais"){
+								if(selected.attributes.mmsi && selected.attributes.mmsi == ship.mmsi){
+									HscbGeometry(cbGraphic.geometry).selected();
+								}
+							}
+							hscbLayer.add(cbGraphic);
+							// 增加文字描述
+							//构建标签  
+//							var textSymbol:RemarkSymbol = new RemarkSymbol(ship.name, 0);
+//							var mygeometry:Geometry=new MapPoint(lon,lat);
+//							var grahic2:Graphic=new Graphic(mygeometry,textSymbol);  
+//							//添加标签  
+//							hscbLayer.add(grahic2);
+						}
+					}
+				}
+			}
+			cbUpdateTimer.start();
+		}
+		/**
+		 * 海事船舶移入事件
+		 */ 
+		private function hscbMouseOver(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			var model:InfoModel = new InfoModel();
+			var infoArr: Array = [
+				//"船名 : " + g.attributes.name,
+				"IMO : " + g.attributes.imo,
+				"MMSI : " + g.attributes.mmsi,
+				"呼号 : " + g.attributes.callsign,
+				"最后时间: " + CommonUtils.formatPatternDate(
+					new Date(Number(g.attributes.time)*1000),
+					CommonUtils.DATE_MIN_FMT)
+			];
+			RemoteUtils.callRemote("aisCtl","getShipName",function(ae:AbstractEvent):void{
+				var nameArr : Array = [];
+				if(ae is FaultEvent){
+					nameArr.push("船名 : " + g.attributes.name);
+				}else {
+					var shipName:String = ResultEvent(ae).result as String;
+					nameArr.push("船名 : " + shipName);
+				}
+				model.showInfoWindow(nameArr.concat(infoArr), e);
+			},g.attributes.name);
+		}
+		/**
+		 * 海事船舶移出事件
+		 */ 
+		private function hscbMouseOut(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			MapUtils.map.infoWindow.hide();
+		}
+		/**
+		 * 海事船舶点击事件
+		 */ 
+		private function hscbClick(e:MouseEvent):void
+		{
+			currSelType = "ais";
+			var g:Graphic=e.currentTarget as Graphic;
+			selected = g;
+			HscbGeometry(g.geometry).selected();
+			openPopWin(g);
+		}
+		//显示弹窗
+		private var pop:ShipViewPanel = new ShipViewPanel();
+		/**
+		 * 打开船舶窗口
+		 */
+		private function openPopWin(cbgraphic:Graphic):void{
+			RemoteUtils.callRemote("aisCtl","getShipName",function(ae:AbstractEvent):void{
+				var nameArr : Array = [];
+				if(ae is FaultEvent){
+					pop.ship = cbgraphic.attributes;
+				}else {
+					var shipName:String = ResultEvent(ae).result as String;
+					var shipObj:Object = cbgraphic.attributes;
+					shipObj.name = shipName;
+					pop.ship = shipObj;
+				}
+				if(!MapUtils.getShipPopWin().contains(pop)){
+					MapUtils.getShipPopWin().addChild(pop);
+				}
+			},cbgraphic.attributes.name);
+		}
+	}
+}
+class SingletonEnforcer {}

+ 129 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/BwxqModel.mxml

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			   xmlns:s="library://ns.adobe.com/flex/spark" 
+			   xmlns:mx="library://ns.adobe.com/flex/mx" 
+			   xmlns:tree="com.tree.*"
+			   skinClass="com.skins.tdt.TitleWinSkin"
+			   title="泊位作业记录"   close="{PopUpManager.removePopUp(this);}"
+			   width="660" height="340" xmlns:components="com.xt.hb.ui.*"
+			   creationComplete="init()">
+
+	<fx:Style>
+	</fx:Style>
+	
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	
+	<fx:Script>
+		<![CDATA[
+			import com.xt.hb.events.PageEvent;
+			import com.xt.hb.utils.ConstUtil;
+			import com.xt.hb.utils.RemoteUtils;
+			import com.xt.hb.utils.ServicesUtility;
+			
+			import mx.collections.ArrayCollection;
+			import mx.controls.Alert;
+			import mx.managers.PopUpManager;
+			import mx.rpc.events.AbstractEvent;
+			import mx.rpc.events.FaultEvent;
+			import mx.rpc.events.ResultEvent;
+			
+			
+			[Bindable]
+			private var dataArr:ArrayCollection = new ArrayCollection();
+			
+			private var pageSize:int = ConstUtil.DATAGRIDCTRL_DATA_NUMBER; 
+			
+			private var isFirst:Boolean = true;//如果根据新的条件查询,则此变量设为true,如果翻页则值为false
+			
+			private var _bwid:String;
+			[Bindable]
+			public function get bwid():String{
+				return _bwid;
+			}
+			public function set bwid(value:String):void{
+				_bwid = value;
+			}
+			
+			// 页面初始化
+			public function init():void
+			{
+				this.pagePersons.addEventListener(PageEvent.PAGECHANGE, pageChangeHandle);
+				//clickBtn();
+				queryBwInfo(pageSize, 1);
+			}
+			
+			// 页面跳转
+			private function pageChangeHandle(event:PageEvent):void
+			{
+				var page:int = event.data as int;
+				queryBwInfo(pageSize,page);
+				closeWindow();
+			}
+			
+			/**
+			 * 查询
+			 */
+			private function queryBwInfo(size:int=0,page:int=1):void
+			{
+				// 远程调用
+				RemoteUtils.callRemote("aisCtl","queryBwPage",function(ae:AbstractEvent):void{
+					if(ae is FaultEvent){
+						Alert.show("ERROR Call aisCtl queryBwPage");
+					}else {
+						var resultObj:Object = ResultEvent(ae).result as Object;
+						queryBwInfoResult(resultObj);
+					}
+				},bwid,page,size);
+//				var ro:RemoteObject=new RemoteObject();
+//				ro.destination="query_gq";
+//				ro.queryGQInfo(pageSize,page,obj);
+//				ro.addEventListener(ResultEvent.RESULT, queryGQInfoResult);
+//				ro.addEventListener(FaultEvent.FAULT, queryGQInfoFault);
+			}
+			
+			private function queryBwInfoResult(obj:Object):void
+			{
+				dataArr = obj.list as ArrayCollection;
+				this.pagePersons.orgData=dataArr;
+				this.pagePersons.dataGrid=dg;
+				this.pagePersons.totalRecord = obj.total;
+				if(isFirst)
+					this.pagePersons.dataBind(true);
+				isFirst = false;
+			}
+			
+			// 加载进度
+			private function closeWindow():void
+			{
+				//CommonUtility.waitingShow("正在查询中,请稍等。。。");
+			}
+		]]>
+	</fx:Script>
+	<mx:VBox width="100%" height="100%" verticalGap="0">
+		<s:SkinnableContainer width="100%" height="100%" skinClass="com.skins.tdt.SkinnableContainerSkin">
+			<s:layout>
+				<s:HorizontalLayout/>
+			</s:layout>
+			<mx:DataGrid id="dg" width="100%" height="100%" click="" dataProvider="{dataArr}" headerBackgroundSkin="com.skins.tdt.AdvanceDataGridHeaderSkin"
+						 horizontalScrollPolicy="off" verticalScrollPolicy="auto">
+				<mx:columns>
+					<mx:DataGridColumn dataField="id" headerText="ID" visible="false"/>
+					<mx:DataGridColumn width="120" dataField="bh" headerText="申请单编号" showDataTips="true"/>
+					<mx:DataGridColumn width="140" dataField="wxwpmc" headerText="危险品名" showDataTips="true"/>
+					<mx:DataGridColumn width="60" dataField="zysl" headerText="作业数量"/>
+					<mx:DataGridColumn width="170" dataField="zysjq" headerText="作业时间"/>
+					<mx:DataGridColumn width="170" dataField="kgsj" headerText="开工时间"/>
+					
+				</mx:columns>
+			</mx:DataGrid>
+		</s:SkinnableContainer>
+		<mx:HBox width="100%" height="30" backgroundAlpha="0.3" backgroundColor="#84c4ee" verticalAlign="middle">
+			<s:Spacer width="150"/>
+			<s:Spacer width="100%"/>
+			<components:PageDataGridCtrl id="pagePersons" height="25"/>
+			<s:Spacer width="150"/>
+		</mx:HBox>
+	</mx:VBox>
+</s:TitleWindow>

+ 201 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/GpsMgr.as

@@ -0,0 +1,201 @@
+package com.xt.hb.ais
+{
+	import com.esri.ags.Graphic;
+	import com.esri.ags.Map;
+	import com.esri.ags.geometry.Extent;
+	import com.esri.ags.geometry.MapPoint;
+	import com.esri.ags.layers.GraphicsLayer;
+	import com.esri.ags.symbols.SimpleFillSymbol;
+	import com.esri.ags.symbols.SimpleLineSymbol;
+	import com.esri.ags.symbols.SimpleMarkerSymbol;
+	import com.xt.hb.common.InfoModel;
+	import com.xt.hb.utils.AisUtils;
+	import com.xt.hb.utils.CommonUtils;
+	import com.xt.hb.utils.ConfigUtil;
+	import com.xt.hb.utils.ConstUtil;
+	import com.xt.hb.utils.MapUtils;
+	import com.xt.hb.utils.RemoteUtils;
+	import com.xt.hb.utils.ServicesUtility;
+	
+	import flash.events.MouseEvent;
+	import flash.events.TimerEvent;
+	import flash.utils.Timer;
+	
+	import mx.collections.ArrayCollection;
+	import mx.core.FlexGlobals;
+	import mx.rpc.events.AbstractEvent;
+	import mx.rpc.events.FaultEvent;
+	import mx.rpc.events.ResultEvent;
+
+	public class GpsMgr extends ShipMgr
+	{
+		private var gpsUpdateTimer:Timer;
+		private static var  instance:GpsMgr;
+		private static var showAis:Boolean;
+		private static var gpsArr:ArrayCollection;
+//		private static var  currLevel;
+		/** 船舶闪烁定时器 */
+		public function GpsMgr(singletonEnforcer:SingletonEnforcer)
+		{
+			//gpsUpdateTimer = new Timer(MapUtils.gpsRefreshTime*10000);
+			//gpsUpdateTimer.addEventListener(TimerEvent.TIMER ,function(event:TimerEvent=null):void
+			//{
+				//instance.refreshGps();
+			//});
+		}
+		/**
+		 * 获取单例服务
+		 */
+		public static function getInstance():GpsMgr {
+			if(instance == null){
+				instance = new GpsMgr(new SingletonEnforcer());
+			}
+			return instance;
+		}
+//		/** 当前选中的船舶 */
+//		private var selected:Graphic;
+		/**
+		 * 停止显示Gps
+		 */
+		public function stopGps():void{
+			var hscbLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GPS);
+			hscbLayer.clear();
+			gpsArr = null;
+			//gpsUpdateTimer.stop();
+		}
+		/**
+		 * 根据当前地图加载海事Gps数据
+		 */
+		public function refreshGps():void{
+			//gpsUpdateTimer.stop();
+			if(null == gpsArr) {
+				var extend:Extent = MapUtils.map.extent;
+				RemoteUtils.callRemote("gpsCtl","queryGpsRealtime",queryGpsCallback);
+			} else {
+				dealHscbData(gpsArr);
+			}
+		}
+		/**
+		 * 海事Gps查询结果处理
+		 */
+		private function queryGpsCallback(e:AbstractEvent):void
+		{
+			if(e is FaultEvent){
+				trace("error");
+			}else {
+				if(ConfigUtil.getMapLayerState(ConstUtil.L_ID_GPS) == ConstUtil.CHECK_STATE_0) {
+					return;
+				}
+				gpsArr = ResultEvent(e).result as ArrayCollection;
+				dealHscbData(gpsArr);
+			}
+		}
+		private function dealHscbData(arr:ArrayCollection):void {
+			var hscbLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GPS);
+			if(null != arr && arr.length>0){
+				hscbLayer.clear();
+			}
+			var map:Map = FlexGlobals.topLevelApplication.getMap();
+			// 获取地图级别大小
+			var currScale:Number =  map.scale;
+			var pointFlg:Boolean = false;
+			if(currScale>70000) {
+				pointFlg = true;
+			}
+			if(null != arr && arr.length>0){
+				trace(arr.length);
+				MapUtils.setCbSize(map.scale);
+				for(var i:int=0;i<arr.length;i++)
+				{
+					var ship:Object =arr[i];
+					var lon:Number=Number(ship.jd);
+					var lat:Number=Number(ship.wd);
+					if(lon == 0 || lat == 0) {
+						continue;
+					}
+					var course:Number=0;
+					var length:Number=100;
+					var width:Number=20;
+					var speed:Number=Number(ship.sd);
+					var cbGraphic:Graphic = null;
+					if(pointFlg) {
+						cbGraphic = new Graphic(new MapPoint(lon,lat),
+							new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,
+								2,0x0000FF,1,0,0,0,new SimpleLineSymbol("solid",0x0000FF,1,1) ));
+					} else {
+						// 颜色
+						var color:Number = 0x0000FF;
+						cbGraphic = new Graphic();
+						cbGraphic.geometry =new  HscbGeometry(lon,lat,course,length,width,speed);
+						cbGraphic.symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,color,1,new SimpleLineSymbol("solid",0xFFC400,1,0.5) );
+						cbGraphic.attributes = ship;
+						cbGraphic.useHandCursor=true;
+						cbGraphic.buttonMode = true;
+						cbGraphic.mouseChildren=false;
+						cbGraphic.addEventListener(MouseEvent.CLICK,hscbClick);
+						//							cbGraphic.addEventListener(MouseEvent.MOUSE_OVER,hscbMouseOver);
+						//							cbGraphic.addEventListener(MouseEvent.MOUSE_OUT,hscbMouseOut);
+						if(null !=selected){
+							if(selected.attributes.mmsi && selected.attributes.mmsi == ship.mmsi){
+								HscbGeometry(cbGraphic.geometry).selected();
+							}
+						}
+					}
+					hscbLayer.add(cbGraphic);
+				}
+			}
+		}
+		/**
+		 * 海事船舶移入事件
+		 */ 
+		private function hscbMouseOver(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			var model:InfoModel = new InfoModel();
+			var infoArr: Array = [
+				"船名 : " + g.attributes.name,
+				"IMO : " + g.attributes.imo,
+				"MMSI : " + g.attributes.mmsi,
+				"呼号 : " + g.attributes.callsign,
+				"最后时间: " + CommonUtils.formatPatternDate(
+					new Date(Number(g.attributes.time)*1000),
+					CommonUtils.DATE_MIN_FMT)
+			];
+			model.showInfoWindow(infoArr, e);
+		}
+		/**
+		 * 海事船舶移出事件
+		 */ 
+		private function hscbMouseOut(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			MapUtils.map.infoWindow.hide();
+		}
+		/**
+		 * 海事船舶点击事件
+		 */ 
+		private function hscbClick(e:MouseEvent):void
+		{
+			currSelType = "gps";
+			var g:Graphic=e.currentTarget as Graphic;
+			selected = g;
+			HscbGeometry(g.geometry).selected();
+			//openPopWin(g);
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_GPS,g,g.attributes,e);
+		}
+		//显示弹窗
+		private var pop:ShipViewPanel = new ShipViewPanel();
+		/**
+		 * 打开船舶窗口
+		 */
+		private function openPopWin(cbgraphic:Graphic):void{
+			pop.ship = cbgraphic.attributes ;
+			if(!MapUtils.getShipPopWin().contains(pop)){
+				MapUtils.getShipPopWin().addChild(pop);
+			}
+		}
+	}
+}
+class SingletonEnforcer {}

+ 157 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/HscbGeometry.as

@@ -0,0 +1,157 @@
+package com.xt.hb.ais
+{
+	import com.esri.ags.Graphic;
+	import com.esri.ags.SpatialReference;
+	import com.esri.ags.geometry.Geometry;
+	import com.esri.ags.geometry.MapPoint;
+	import com.esri.ags.geometry.Polygon;
+	import com.esri.ags.geometry.Polyline;
+	import com.esri.ags.layers.GraphicsLayer;
+	import com.esri.ags.symbols.SimpleLineSymbol;
+	import com.xt.hb.utils.MapUtils;
+	
+	import flash.events.TimerEvent;
+	import flash.utils.Timer;
+	
+	import mx.effects.Glow;
+
+	/**
+	 * 船舶
+	 */
+	public class HscbGeometry extends Polygon
+	{
+		private var _lon:Number;
+		private	var _lat:Number;
+		public function HscbGeometry(lon:Number,lat:Number,course:Number,length:Number,width:Number,speed:Number)
+		{
+			super(null, new SpatialReference(4326));
+			setCbxx(lon,lat,course,length,width,speed);
+		}
+		/**
+		 * 获取海事船舶图层
+		 */
+		private function getTempGraphicLayer():GraphicsLayer{
+			var tempGLayer:GraphicsLayer = MapUtils.map.getLayer("L_ID_TEMPG") as GraphicsLayer;
+			if(null == tempGLayer){
+				tempGLayer = new GraphicsLayer();
+				tempGLayer.id="L_ID_TEMPG";
+				tempGLayer.name="L_NAME_TEMPG";
+				MapUtils.map.addLayer(tempGLayer);
+			}
+			return tempGLayer;
+		}
+		public function selected():void{
+			//暂把跟踪框放于临时图层	
+			var trackG:Graphic = new Graphic();
+			trackG.geometry = drawtracking();
+			trackG.symbol = new SimpleLineSymbol("solid",0xF7621A,1,6);
+			trackG.name="AISG";
+			var tempG:GraphicsLayer = 	getTempGraphicLayer();
+			// 清除标记
+			MapUtils.clearAISGraphic();
+			tempG.add(trackG);
+			var glow:Glow =createGlow(trackG);
+			glow.play();
+			var glowTimer:Timer = new Timer(600);
+			glowTimer.addEventListener(TimerEvent.TIMER,function(event:TimerEvent):void{
+				glow.play();
+			},false, 0, true);
+			glowTimer.start();
+		}
+		//跟踪闪烁效果
+		private function createGlow(fea:Graphic):Glow
+		{
+			var glow:Glow = new Glow(fea);
+			glow.color = 0xFDE67B;//0x0000ff;
+			glow.blurXFrom = 0;
+			glow.blurXTo = 100;
+			glow.blurYFrom = 0;
+			glow.blurYTo = 100;
+			glow.duration = 600;
+			return glow;
+		} 
+		//标绘船舶追踪
+		private function drawtracking():Geometry
+		{
+			var geo:Polyline=new Polyline();
+			
+			var c_x:Number=0.000700;//依据船舶形状画跟踪外框
+			var c_y:Number=0.000700;//依据船舶形状画跟踪外框
+			var d:Number=0.000400;//线段长度
+			//左上角
+			var X_1_1:Number = lon - c_x; var X_1_2:Number = X_1_1 + d;
+			var Y_1_1:Number = lat + c_y; var Y_1_2:Number = Y_1_1 - d;
+			geo.addPath([new MapPoint(X_1_1,Y_1_2),new MapPoint(X_1_1,Y_1_1),new MapPoint(X_1_2,Y_1_1)]);
+			//右上角
+			var X_2_1:Number = lon + c_x; var X_2_2:Number = X_2_1 - d;
+			var Y_2_1:Number = lat + c_y; var Y_2_2:Number = Y_2_1 - d;
+			geo.addPath([new MapPoint(X_2_1,Y_2_2),new MapPoint(X_2_1,Y_2_1),new MapPoint(X_2_2,Y_2_1)]);
+			//右下角
+			var X_3_1:Number = lon + c_x; var X_3_2:Number = X_3_1 - d;
+			var Y_3_1:Number = lat - c_y; var Y_3_2:Number = Y_3_1 + d;
+			geo.addPath([new MapPoint(X_3_1,Y_3_2),new MapPoint(X_3_1,Y_3_1),new MapPoint(X_3_2,Y_3_1)]);
+			//左下角
+			var X_4_1:Number = lon - c_x; var X_4_2:Number = X_4_1 + d;
+			var Y_4_1:Number = lat - c_y; var Y_4_2:Number = Y_4_1 + d;
+			geo.addPath([new MapPoint(X_4_1,Y_4_2),new MapPoint(X_4_1,Y_4_1),new MapPoint(X_4_2,Y_4_1)]);
+			
+			return geo;
+		}
+		/**
+		 * 设置船舶信息
+		 */
+		public function setCbxx(lon:Number,lat:Number,course:Number,length:Number,width:Number,speed:Number):void{
+			this._lon = lon;
+			this._lat=lat;
+			//先以中心点为原点
+			//后期考虑转换异常,异常方向取0度
+			course = -(course/180) * Math.PI; //弧度   顺时针旋转
+			var c_x:Number=MapUtils.c_x;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+			//if(w>1)
+			//	c_x=c_x*w/100;		
+			var c_y:Number=MapUtils.c_y;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+			var _o_x:Number=0;//船舶顶点
+			var _o_y:Number=c_y*2;
+			var v_o_x:Number=lon+_o_x*Math.cos(course)-_o_y*Math.sin(course);
+			var v_o_y:Number=lat+_o_x*Math.sin(course)+_o_y*Math.cos(course);
+			var _1_x:Number=c_x;//船舶角点1
+			var _1_y:Number=c_y;
+			var v_1_x:Number=lon+_1_x*Math.cos(course)-_1_y*Math.sin(course);
+			var v_1_y:Number=lat+_1_x*Math.sin(course)+_1_y*Math.cos(course);
+			var _2_x:Number=c_x;//船舶角点2
+			var _2_y:Number=-c_y;
+			var v_2_x:Number=lon+_2_x*Math.cos(course)-_2_y*Math.sin(course);
+			var v_2_y:Number=lat+_2_x*Math.sin(course)+_2_y*Math.cos(course);
+			var _3_x:Number=-c_x;//船舶角点3
+			var _3_y:Number=-c_y;
+			var v_3_x:Number=lon+_3_x*Math.cos(course)-_3_y*Math.sin(course);
+			var v_3_y:Number=lat+_3_x*Math.sin(course)+_3_y*Math.cos(course);
+			var _4_x:Number=-c_x;//船舶角点4
+			var _4_y:Number=c_y;
+			var v_4_x:Number=lon+_4_x*Math.cos(course)-_4_y*Math.sin(course);
+			var v_4_y:Number=lat+_4_x*Math.sin(course)+_4_y*Math.cos(course);	
+			//求一个点围绕任一个非原点的中心点	旋转
+			this.addRing([new MapPoint(v_o_x,v_o_y),new MapPoint(v_1_x,v_1_y),new MapPoint(v_2_x,v_2_y),new MapPoint(v_3_x,v_3_y),new MapPoint(v_4_x,v_4_y),new MapPoint(v_o_x,v_o_y)]);
+			//船首线与船速成正比 
+			if(speed>0)
+			{
+				var c_j:Number=MapUtils.c_j;
+				c_j=c_j*speed/5+MapUtils.c_j_1;
+				var v_j_x:Number=lon+0*Math.cos(course)-c_j*Math.sin(course);
+				var v_j_y:Number=lat+0*Math.sin(course)+c_j*Math.cos(course);
+				this.addRing([new MapPoint(v_o_x,v_o_y),new MapPoint(v_j_x,v_j_y),new MapPoint(v_o_x,v_o_y)]);
+			}
+		}
+		
+		public function get lat():Number
+		{
+			return _lat;
+		}
+		
+		public function get lon():Number
+		{
+			return _lon;
+		}
+
+	}
+}

+ 387 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/LocusQueryPanel.mxml

@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
+			   xmlns:s="library://ns.adobe.com/flex/spark"
+			   xmlns:mx="library://ns.adobe.com/flex/mx"
+			   xmlns:common="port.query.*"
+			   xmlns:show="port.show*"
+			   xmlns:AdvancedDataGrid="com.AdvancedDataGrid.*"
+			   xmlns:SubClasses="com.AdvancedDataGrid.SubClasses.*"
+			   width="400" height="280" borderVisible="false" close="{PopUpManager.removePopUp(this);}" color="#314a5e" fontFamily="宋体" fontSize="12" fontWeight="bold"
+			   skinClass="com.skins.tdt.TitleWinSkin" title='绘制 {((!ship.name||ship.name=="null")?"":ship.name)+"("+ship.mmsi+")"}的航行轨迹' initialize="init(event)" xmlns:model="port.query.model.*" xmlns:show1="port.show.*" xmlns:ais="com.xt.hb.ais.*">
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	<fx:Script>
+		<![CDATA[
+			import com.AdvancedDataGrid.Util.ItemRendererIFactory;
+			import com.esri.ags.Graphic;
+			import com.esri.ags.geometry.MapPoint;
+			import com.esri.ags.geometry.Polyline;
+			import com.esri.ags.layers.GraphicsLayer;
+			import com.esri.ags.symbols.SimpleLineSymbol;
+			import com.esri.ags.symbols.SimpleMarkerSymbol;
+			import com.xt.hb.common.InfoModel;
+			import com.xt.hb.utils.CommonUtils;
+			import com.xt.hb.utils.MapUtils;
+			import com.xt.hb.utils.RemoteUtils;
+			
+			import mx.collections.ArrayCollection;
+			import mx.controls.Alert;
+			import mx.core.FlexGlobals;
+			import mx.events.FlexEvent;
+			import mx.formatters.DateFormatter;
+			import mx.managers.PopUpManager;
+			import mx.rpc.events.AbstractEvent;
+			import mx.rpc.events.FaultEvent;
+			import mx.rpc.events.ResultEvent;
+			import mx.rpc.remoting.RemoteObject;
+			
+			import spark.events.IndexChangeEvent;
+			
+			private var _ship:Object ; //船舶信息
+			[Bindable]
+			private var resultData:ArrayCollection = new ArrayCollection();
+			[Bindable]
+			private var hourArr:ArrayCollection = new ArrayCollection();
+			private const DEFAULT_DAYS_AGE:int = 2;
+			
+			protected function queryLocus(event:MouseEvent):void{
+				var btn:QueryButton = event.currentTarget as QueryButton ;
+				clearData();
+				//				var ro:RemoteObject=new RemoteObject();
+				//				ro.destination="service_hscb_AIS";
+				
+				RemoteUtils.callRemote("aisCtl","queryAISCBsByMMSI",function(e:AbstractEvent):void{
+					if(e is FaultEvent){
+						queryInfoFault(e as FaultEvent);
+						btn.unLocked();
+					}else {
+						var hscbArr:ArrayCollection = ResultEvent(e).result as ArrayCollection;
+						queryInfoResult(hscbArr);
+						btn.unLocked();
+					}
+				},ship.mmsi,startTime()+"",endTime()+"");
+				//查询显示小时
+				//				ro.queryAISCBsByMMSI(ship.mmsi,startTime(),endTime());
+				//				ro.addEventListener(ResultEvent.RESULT,
+				//					function(e:ResultEvent):void{
+				//						var hscbArr:ArrayCollection = e.result as ArrayCollection;
+				//						queryInfoResult(hscbArr);
+				//						btn.unLocked();
+				//					});
+				//				ro.addEventListener(FaultEvent.FAULT, function(e:FaultEvent):void{ 
+				//					queryInfoFault(e);
+				//					btn.unLocked();
+				//				});
+			}
+			//清除上次的数据
+			private function clearData():void{
+				resultData.removeAll();
+				clearLocusFeature();
+			}
+			private function startTime():Number{
+				var strdate:String = beginDate.text+" 00:00:00";
+				var date:Date = DateFormatter.parseDateString(strdate);
+				return date.time;
+			}
+			private function endTime():Number{
+				var strdate:String = endDate.text+" 23:59:59";
+				var date:Date = DateFormatter.parseDateString(strdate);
+				return date.time;
+			}
+			private function housAge():Number{
+				var date:Date = new Date();
+				var hour:int = Number(hous.selectedItem.value);
+				date.hours = date.hours-hour ; 
+				return date.time;
+			}
+			public function hourQuery(param:Object):void{
+				currentState = "inOneDay";
+				menuBar.selectedIndex=0;
+				hous.selectedIndex = param["hour"];
+				hourBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
+			}
+			public function dayQuery(param:Object):void{
+				currentState = "outOneDay";
+				menuBar.selectedIndex=1;
+				beginDate.text =  param["startTime"];
+				endDate.text = param["endTime"] ;
+				dayBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
+			}
+			private function queryInfoResult(hscbArr:ArrayCollection):void{
+				if(hscbArr.length==0){
+					Alert.show("没有记录");
+					return ;
+				}
+				if(shipHasExists()){
+					ship.sog = ship.speed;
+					ship.angle = ship.course;
+					hscbArr.addItemAt(ship,0);
+				}
+				//显示详情
+				resultData.addAll(hscbArr);
+				//加上本次船舶
+				var begin:Object = hscbArr[0];
+				addLocusFeature(madeLineFeature(begin,begin)); //画出线
+				addLocusFeature(madePointFeature(begin),true); //画出起点船
+				var end:Object = null ;
+				for(var i:int=1;i<hscbArr.length;i++){
+					begin = hscbArr[i-1];
+					end = hscbArr[i] ;
+					addLocusFeature(madeLineFeature(begin,end)); //画出线
+					addLocusFeature(madePointFeature(end),true); //画出终点
+				}
+			}
+			//船只是否有位置
+			private function shipHasExists():Boolean{
+				return ship.hasOwnProperty("lon")&&ship.hasOwnProperty("lat") ;
+			}
+			//添加轨迹图层
+			private function addLocusFeature(fea:Graphic,isFront:Boolean=false):void{
+				fea.name = "Locus";
+				if(isFront){
+					MapUtils.getTempGraphicLayer().add(fea);
+				}else{
+					MapUtils.getTempGraphicLayer().addChildAt(fea,0);
+				}
+			}
+			//删除轨迹图
+			public function clearLocusFeature():void{
+				var tempFeatureLayer:GraphicsLayer = MapUtils.getTempGraphicLayer();
+				for(var i:int=tempFeatureLayer.graphicProvider.length-1;i>=0 ;i--){
+					var f:Graphic=tempFeatureLayer.graphicProvider[i] as Graphic;
+					if(f.name=="Locus"){
+						tempFeatureLayer.remove(f);
+						tempFeatureLayer.removeChildAt(0);
+					}
+				}
+			}
+			private function queryInfoFault(event:FaultEvent):void
+			{
+				Alert.show("ERROR:"+event.fault.message);
+			}
+			[Bindable]
+			public function get ship():Object
+			{
+				return _ship;
+			}
+			
+			public function set ship(value:Object):void
+			{
+				if(_ship==null){
+					_ship = value;
+					return ;
+				}
+				if(_ship["mmsi"]!=value["mmsi"]){
+					_ship = value;
+					clearData();
+					return ;
+				}
+				if(_ship["time"]!=value["time"]){
+					if(resultData.length>0){
+						//更新数据第一个节点	
+						resultData.addItemAt(value,0);	
+						//重绘轨迹
+						addLocusFeature(madeLineFeature(resultData.getItemAt(1),resultData.getItemAt(0))); //画出线
+						addLocusFeature(madePointFeature(value),true); //画出终点
+					}
+					_ship = value ;
+				}
+			}
+			
+			/**
+			 * 格式化日期
+			 * 去掉毫秒数
+			 * */
+			public static function getTimeStr(time:Number):String{
+				var strTime:String = time+"";
+				//截取秒数
+				return strTime.substr(0,strTime.length-3);	
+			}
+			private function madePointFeature(obj:Object):Graphic{
+				var x:Number=Number(obj.lon);
+				var y:Number=Number(obj.lat);
+				var fc:Number=0xff0000;//计算颜色
+				var cbFea:Graphic = new Graphic(new MapPoint(x,y),
+					new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,
+						10,0xFFFF00,1,0,0,0,new SimpleLineSymbol("solid",0xEA1F00,1,3) ));//new Feature(new GeoPoint(x,y));
+				// 添加点移入移出事件
+				cbFea.attributes = obj;
+				cbFea.addEventListener(MouseEvent.MOUSE_OVER,tracePointMouseOver);
+				cbFea.addEventListener(MouseEvent.MOUSE_OUT,tracePointMouseOut);
+				return cbFea;
+			}
+			private function madeLineFeature(begin:Object,end:Object):Graphic{
+				var p1:MapPoint = new MapPoint(Number(begin.lon),Number(begin.lat));
+				var p2:MapPoint = new MapPoint(Number(end.lon),Number(end.lat));
+				var line:Polyline = new Polyline();
+				line.addPath([p1,p2]);
+				var fea:Graphic = new Graphic(line,getLocusStyle());
+				return fea ;
+			}
+			private function getLocusStyle():SimpleLineSymbol{
+				var ret:SimpleLineSymbol  = new SimpleLineSymbol();
+				ret.color = 0x0099FF;
+				ret.width = 3;
+				ret.alpha = 1;
+				ret.style=SimpleLineSymbol.STYLE_SOLID;
+				return ret ;
+			}
+			private function formatTime(item:Object,column:AdvancedDataGridColumn):String{
+				if(item[column.dataField] is Date){
+					return CommonUtils.formatDate(item[column.dataField]);
+				}else if(item[column.dataField] is Number){
+					var date:Date = new Date(Number(item[column.dataField])*1000);
+					return  CommonUtils.formatDate(date);
+				}else {
+					return null;
+				}
+			}
+			
+			protected function locationShip(e:MouseEvent):void{
+				var item:Object = this.historyList.selectedItem; 
+				var x:Number=Number(item.lon);
+				var y:Number=Number(item.lat);
+				MapUtils.map.centerAt(new MapPoint(x,y));
+				//				var point:MapPoint  = new MapPoint();
+				//				point.x = x;
+				//				point.y = y;
+				//				MapUtils.map.centerAt(point);
+				//				MapUtils.map.move(x,y);
+				//				FlexGlobals.topLevelApplication.map.panTo((new Point2D(x,y)));
+			}
+			protected function dateTypeChangeHandler(event:IndexChangeEvent):void{
+				currentState =  this.menuBar.selectedItem.stateName ;		
+			}
+			
+			protected function init(event:FlexEvent):void{
+				initHourArr();
+			}
+			protected function initHourArr():void{
+				for	(var i:int=1 ;i<=24;i++){
+					var obj:Object = {lable:i+"小时以内",value:i+""};
+					hourArr.addItem(obj)
+				}
+			}
+			
+			protected function queryHourLocus(event:MouseEvent):void{
+				var btn:QueryButton = event.currentTarget as QueryButton ;
+				clearData();
+				RemoteUtils.callRemote("aisCtl","queryAISCBsByMMSI",function(e:AbstractEvent):void{
+					if(e is FaultEvent){
+						queryInfoFault(e as FaultEvent);
+						btn.unLocked();
+					}else {
+						var hscbArr:ArrayCollection = ResultEvent(e).result as ArrayCollection;
+						queryInfoResult(hscbArr);
+						btn.unLocked();
+					}
+				},ship.mmsi,housAge()+"",new Date().time+"");
+			}
+			private function today():String{
+				var fr:DateFormatter=new DateFormatter();
+				fr.formatString="YYYY-MM-DD";
+				var d:Date = new Date();
+				return  fr.format(d);
+			}
+			private function daysAge():String{
+				var fr:DateFormatter=new DateFormatter();
+				fr.formatString="YYYY-MM-DD";
+				var d:Date = new Date();
+				d.date = d.date-DEFAULT_DAYS_AGE ;
+				return  fr.format(d);
+			}
+			
+			/**
+			 * 海事船舶轨迹移入事件
+			 */ 
+			private function tracePointMouseOver(e:MouseEvent):void
+			{
+				var model:InfoModel = new InfoModel();
+				var obj = e.currentTarget.attributes;
+				var strDate:String = "";
+				if(typeof(obj.time) == "number") {
+					strDate = CommonUtils.formatPatternDate(
+						new Date(Number(obj.time)*1000),
+						CommonUtils.DATE_MIN_FMT);
+				} else if(typeof(obj.time) == "object") {
+					strDate = CommonUtils.formatPatternDate(
+						obj.time,
+						CommonUtils.DATE_MIN_FMT);
+				}
+				var infoArr: Array = [
+					"时间 : " + strDate,
+					"位置 : " + obj.lat + "E " + obj.lon+ "N ",
+					"状态 : " + ship.status,
+					"航速 : " + CommonUtils.nullToEmpty(obj.sog),
+					"航向 : " + CommonUtils.nullToEmpty(obj.angle),
+					"目的港 : " + ship.dest,
+					"E.T.A : " + ship.eta
+				];
+				var g:Graphic=e.currentTarget as Graphic;
+				model.showInfoWindow(infoArr, e);
+			}
+			/**
+			 * 海事船舶轨迹移出事件
+			 */ 
+			private function tracePointMouseOut(e:MouseEvent):void
+			{
+				MapUtils.map.infoWindow.hide();
+				var g:Graphic=e.currentTarget as Graphic;
+			}
+		]]>
+	</fx:Script>
+	<s:states>
+		<s:State name="inOneDay"/>
+		<s:State name="outOneDay"/>
+	</s:states>
+	<mx:VBox width="100%" height="100%" backgroundColor="#cce8ff" borderVisible="false" horizontalGap="0" verticalGap="0">
+		<mx:VBox width="100%" height="56" backgroundColor="#ffffff"  verticalGap="-1">
+			<s:HGroup width="100%" height="24"  >
+				<s:TabBar id="menuBar" buttonMode="true" change="dateTypeChangeHandler(event);"  labelField="label"
+						  requireSelection="true" useHandCursor="true" >
+					<s:ArrayCollection>
+						<fx:Object label="一天以内" stateName="inOneDay" />
+						<fx:Object label="一天以上" stateName="outOneDay"/>
+					</s:ArrayCollection>
+				</s:TabBar>
+			</s:HGroup>
+			<mx:VBox  backgroundColor="#B4B4B5" width="100%" height="30">			
+				<mx:HBox id="inOneDayBox" width="100%" height="30" includeIn="inOneDay"   verticalAlign="middle" horizontalGap="6" verticalGap="0"  borderVisible="false">
+					<s:Spacer width="8" height="100%"/>
+					<s:ComboBox  id="hous" dataProvider="{hourArr}"  width="280" labelField="lable"  selectedIndex="2"/>
+					<ais:QueryButton id="hourBtn" label="查询" click="queryHourLocus(event)" />
+					<s:Spacer width="8" height="100%"/>
+				</mx:HBox>
+				<mx:HBox id="outOneDayBox" width="100%" height="30" includeIn="outOneDay"   verticalAlign="middle" horizontalGap="5" verticalGap="0"  borderVisible="false">
+					<s:Spacer width="8" height="100%"/>
+					<s:Label text="航行日期:" />
+					<mx:DateField formatString="YYYY-MM-DD" id="beginDate" width="97" monthNames='["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]' 
+								  dayNames="['日','一','二','三','四','五','六']"  text="{daysAge()}" yearNavigationEnabled="true" showToday="true"  />
+					<s:Label text="至" />
+					<mx:DateField formatString="YYYY-MM-DD" id="endDate" 	width="97" monthNames='["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]' 
+								  dayNames="['日','一','二','三','四','五','六']" text="{today()}" yearNavigationEnabled="true" showToday="true" />
+					<ais:QueryButton id="dayBtn" label="查询" click="queryLocus(event)" />
+					<s:Spacer width="8" height="100%"/>
+				</mx:HBox>
+			</mx:VBox>
+		</mx:VBox>
+		<s:Spacer width="8"/>		
+		<mx:VBox width="100%"  height="100%" backgroundColor="#FFFFFF" horizontalGap="0" verticalGap="0"  borderVisible="false">			
+			<s:Spacer  height="8"/>				
+			<AdvancedDataGrid:AdvancedDataGrid id="historyList" width="300%" height="100%"
+											   alternatingItemColors="[#f5faff,#eaefff]"
+											   dataProvider="{this.resultData}"
+											   borderAlpha="0"  horizontalScrollPolicy="on"
+											   draggableColumns="true"  wordWrap="true" variableRowHeight="true"  
+											   sortableColumns="false" 
+											   sortExpertMode="true" doubleClick="locationShip(event)" doubleClickEnabled="true">
+				<AdvancedDataGrid:groupedColumns>				
+					<SubClasses:AdvancedDataGridColumn dataField="lon" headerText="经度" itemRenderer="{new ItemRendererIFactory()}"  />		
+					<SubClasses:AdvancedDataGridColumn dataField="lat" headerText="纬度" />										
+					<SubClasses:AdvancedDataGridColumn  dataField="time" headerText="信号采集时间" labelFunction="formatTime" />	
+				</AdvancedDataGrid:groupedColumns>
+			</AdvancedDataGrid:AdvancedDataGrid>
+		</mx:VBox>
+	</mx:VBox>
+</s:TitleWindow>

+ 30 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/QueryButton.mxml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
+		  xmlns:s="library://ns.adobe.com/flex/spark" 
+		  xmlns:mx="library://ns.adobe.com/flex/mx" >
+	
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	<fx:Script>
+		<![CDATA[
+			import mx.events.FlexEvent;
+			
+			//锁住查询按钮
+			private function locked():void{
+				this.enabled = false ;
+				this.label = "查询中...";
+			}
+			//解锁查询按钮
+			public function unLocked():void{
+				this.enabled = true ;
+				this.label = "查询";
+			}
+			
+			override protected function clickHandler(e:MouseEvent):void{
+				super.clickHandler(e);
+				locked();
+			}
+		]]>
+	</fx:Script>
+</s:Button>

+ 53 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/RemarkSymbol.as

@@ -0,0 +1,53 @@
+package com.xt.hb.ais
+{
+	import com.esri.ags.symbols.TextSymbol;
+	
+	import flash.text.TextFormat;
+
+	/**
+	 * 文字备注
+	 */
+	public class RemarkSymbol extends TextSymbol
+	{
+		private var formerText:String;
+		
+		//private var _text:String=null; 
+		private var _htmlText:String=null; 
+		private var _color:uint=0;
+		private var _alpha:Number=0x000000;
+		private var _border:Boolean=false;
+		private var _borderColor:uint=0xffffff;
+		private var _background:Boolean=false;
+		private var _backgroundColor:uint=0xFF9900;
+		private var _placement:String="middle";
+		//private var _angle:Number=0;
+		private var _xoffset:Number=0;
+		private var _yoffset:Number=10;
+		private var _textFormat:TextFormat=new TextFormat("微软雅黑",12,0xFFC400);
+		private var _textAttribute:String=null;
+		private var _textFunction:Function=null;
+		
+		public function RemarkSymbol(text:String, _angle:Number)
+		{
+			//var textSymbol:myTextSymbol=new myTextSymbol(
+			//	Vertical,name,null,0x000000,1,false,0xffffff,false,0xFF9900,"middle",angle,0,0,new TextFormat("微软雅黑",12));  
+			//构建标签  
+			//var grahic2:Graphic=new Graphic(mygeometry,textSymbol);  
+			super(text, _htmlText, _color, _alpha, _border, _borderColor, _background, _backgroundColor, _placement, _angle, _xoffset, _yoffset, _textFormat, _textAttribute, _textFunction);  
+//			if(Vertical)
+//			{
+//				formerText = text;
+//				init();
+//			}
+		}
+		
+		private function init():void {
+			var tempText:String = "";
+			for (var i:int = 0; i < formerText.length; i++) {
+				tempText += formerText.charAt(i) + "\n";
+			}
+			this.text = tempText;
+			
+		} 
+	}
+}

+ 10 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/ShipMgr.as

@@ -0,0 +1,10 @@
+package com.xt.hb.ais
+{
+	import com.esri.ags.Graphic;
+	public class ShipMgr
+	{
+		/** 当前选中的类型  (AIS、GPS) */
+		public static var currSelType:String;
+		public static var selected:Graphic;
+	}
+} class SingletonEnforcer {}

+ 159 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/ShipViewPanel.mxml

@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
+			   xmlns:s="library://ns.adobe.com/flex/spark"
+			   xmlns:mx="library://ns.adobe.com/flex/mx"
+			   xmlns:common="port.common.*"
+			   xmlns:AdvancedDataGrid="com.AdvancedDataGrid.*"
+			   xmlns:SubClasses="com.AdvancedDataGrid.SubClasses.*"
+			   width="400" height="210" borderVisible="false" close="closeWindow(event)" 
+			    fontFamily="宋体" fontSize="12"  
+			   skinClass="com.skins.tdt.TitleWinHighSkin" title='船舶明细 - {(!ship.name||ship.name=="null")?"":ship.name}({ship.mmsi})' >
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 --> 
+	</fx:Declarations>
+	
+	<fx:Script>
+		<![CDATA[
+			import com.xt.hb.utils.AisUtils;
+			import com.xt.hb.utils.CommonUtility;
+			import com.xt.hb.utils.CommonUtils;
+			import com.xt.hb.utils.MapUtils;
+			
+			import mx.core.FlexGlobals;
+			import mx.events.CloseEvent;
+			private var _ship:Object = null ;
+			public static var locusPanel:LocusQueryPanel =  new LocusQueryPanel();
+			 
+			[Bindable]
+			public function get ship():Object{
+				return _ship;
+			}
+			public function set ship(value:Object):void{
+				_ship = value;
+				locusPanel.ship = value ;
+				dispatchEvent(new Event("shipChanged"));
+			}
+			[Bindable(event="shipChanged")]
+			public function shipType():String{
+				var code:String =  ship["ship_type"] ;
+				return AisUtils.getCbhwlxByCode(code.charAt(0));
+			}
+			[Bindable(event="shipChanged")]
+			public function formatTime():String{
+				var date:Date = new Date(Number(ship["time"])*1000);
+				return CommonUtils.formatDate(date);
+			}
+			//查询并且显示轨迹和面板
+			public static function queryAndViewLocusPanel(ship:Object,param:Object):void{
+				locusPanel.ship = ship;
+				//显示弹出层
+				addLocusPanelToPopLayer();
+				//小时查询
+				if(param["type"]=="hour"){
+					locusPanel.hourQuery(param);
+				}else{
+					locusPanel.dayQuery(param);
+				}
+			}
+			protected function showTrace(event:MouseEvent):void{
+				addLocusPanelToPopLayer();
+			}
+			
+			public static function addLocusPanelToPopLayer():void{
+				var x:int =FlexGlobals.topLevelApplication.width-850;
+				var y:int =FlexGlobals.topLevelApplication.height-280 ;
+				if(!locusPanel)
+					locusPanel = new LocusQueryPanel();
+				CommonUtility.showTitleWindow(locusPanel,false,x,y); 
+			}
+			
+			protected function clearShipLocus(event:MouseEvent):void{
+				if(locusPanel==null){
+					return ;
+				}
+				locusPanel.clearLocusFeature();
+				
+			}
+			protected function closeWindow(event:CloseEvent):void{
+				MapUtils.getShipPopWin().removeAllChildren();
+				//解除聚焦闪烁
+				MapUtils.clearAISGraphic();
+			}
+		]]>
+	</fx:Script>
+	<mx:VBox width="100%" height="100%" backgroundColor="#F0F0F0"  borderVisible="false" horizontalGap="0" verticalGap="0">
+		<s:Spacer width="8"/>
+		<mx:VBox width="100%">	
+			<mx:Grid width="100%" borderVisible="false" horizontalGap="0" verticalGap="0" >
+				<mx:GridRow height="3" />
+				<mx:GridRow height="16" >
+					<mx:GridItem width="100"><s:Spacer width="2" /><s:Label  text="船舶名称:" /></mx:GridItem>
+					<mx:GridItem width="100"><s:Label color="#3A00FF" text="{ship.name}" toolTip="{ship.name}" /></mx:GridItem>
+					<mx:GridItem width="100"><s:Label  text="MMSI:" /></mx:GridItem>
+					<mx:GridItem width="100"><s:Label color="#3A00FF"  text="{ship.mmsi}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="是否危险品船舶:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF"  text='{ship.danger=="1"?"是":"否"}'/></mx:GridItem>
+					<mx:GridItem ><s:Label text="船舶以及货物类型:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ shipType()}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label text="航行状态:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text='{ship.status}' /></mx:GridItem>
+					<mx:GridItem ><s:Label  text="航行速度(kts):" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text='{ship.speed}' /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="目的港:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.dest}" /></mx:GridItem>
+					<mx:GridItem ><s:Label  text="预计到港时间:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text='{CommonUtils.formatETA(ship.eta)}' /></mx:GridItem>
+					
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="船长(米):" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.length}" /></mx:GridItem>
+					<mx:GridItem ><s:Label   text="船宽(米):" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.width}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="航迹向(度):" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.course}" /></mx:GridItem>
+					<mx:GridItem ><s:Label  text="呼号:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.callsign}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="船旗:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.flag}" /></mx:GridItem>
+					<mx:GridItem ><s:Label   text="建造时间:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.build}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label   text="船籍港:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.port}" /></mx:GridItem>
+					<mx:GridItem ><s:Label   text="船舶IMO:" /></mx:GridItem>
+					<mx:GridItem ><s:Label  color="#3A00FF" text="{ship.imo}" /></mx:GridItem>
+				</mx:GridRow>
+				<mx:GridRow height="16">
+					<mx:GridItem ><s:Spacer width="2" /><s:Label  text="信号时间:" /></mx:GridItem>
+					<mx:GridItem colSpan="3" ><s:Label color="#3A00FF"  text="{formatTime()}" /></mx:GridItem>
+				</mx:GridRow>
+			</mx:Grid>
+		</mx:VBox>
+		<s:Group >
+			<s:Line width="100%"  xFrom="0" xTo="400" yFrom="0" yTo="0"  >
+				<s:stroke>
+					<s:SolidColorStroke color="#4AA2DF" weight="1" caps="square"/>
+				</s:stroke>
+			</s:Line>				
+		</s:Group>
+		<mx:HBox width="100%" height="30" backgroundColor="#F0F0F0"   verticalAlign="middle" horizontalGap="5" verticalGap="0"  borderVisible="false">
+			<s:Spacer width="200"/>
+			<mx:LinkButton label="绘制轨迹"  fontWeight="bold" fontSize="14"    color="#2f6ea1"  rollOverColor="#FEB355" buttonMode="true" useHandCursor="true"  click="showTrace(event)" />
+			<s:Spacer width="8"/>
+			<mx:LinkButton label="清除轨迹" fontWeight="bold" fontSize="14"  color="#2f6ea1" rollOverColor="#FEB355" buttonMode="true" useHandCursor="true" click="clearShipLocus(event)" />
+		</mx:HBox>	
+	</mx:VBox>
+</s:TitleWindow>

+ 32 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ais/TuliModel.mxml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			   xmlns:s="library://ns.adobe.com/flex/spark" 
+			   xmlns:mx="library://ns.adobe.com/flex/mx" 
+			   xmlns:tree="com.tree.*"
+			   skinClass="com.skins.tdt.TitleWinSkin"
+			   close="{PopUpManager.removePopUp(this);}"
+			   width="463" height="320" xmlns:components="com.xt.hb.ui.*"
+			   creationComplete="init()">
+
+	<fx:Style>
+	</fx:Style>
+	
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	
+	<fx:Script>
+		<![CDATA[
+			import mx.managers.PopUpManager;
+			
+			// 页面初始化
+			public function init():void
+			{
+			}
+		]]>
+	</fx:Script>
+	<mx:VBox width="100%" height="100%" verticalGap="0">
+		<s:Image id="tuli" buttonMode="false" width="463" height="285"
+				 source="flexResources/tuli/tuli.png" toolTip=""/>
+	</mx:VBox>
+</s:TitleWindow>

+ 229 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/cfg/MapConfig.xml

@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Root>
+	<MapServices>   
+		<Service Label="遥感影像" ID="SERVICE_ID_DOM" Type="A" URL="http://${serverName}:${port}/iserver/services/map-STDOM/rest/maps/jshdimage@iServerREST">
+		</Service>
+		<Service Label="矢量底图" ID="SERVICE_ID_SLDT" Type="AB" URL="http://${serverName}:${port}/iserver/services/map-gk/rest/maps/gist">
+		</Service>
+		<Service Label="首页地图" ID="SERVICE_ID_SYDT" Type="AB" URL="http://${serverName}:${port}/iserver/services/map-gk/rest/maps/gist1">
+		</Service>
+		<Service Label="港口资源" ID="SERVICE_ID_GKZY" Type="" URL="http://${serverName}:${port}/iserver/services/map-GKZY/rest/maps/GKZY">
+			<Layer Label="过江通道文字标签" ID="L_ID_JSY_GJTD_A" Name="V0716过江通道" Owner="GKZYData.1" Show="1"/>
+			<Layer Label="高等级航道标签" ID="L_ID_JSY_GHD_A" Name="高等级航道名称" Owner="GKZYData.1"/>
+			
+			<Layer Label="过江通道" ID="L_ID_JSY_GJTD" Name="V0716过江通道" Owner="GKZYData.2" Show="1"/>
+
+			
+			<Layer Label="盐城港高速标签" ID="L_ID_JSY_GSGL_YC_A" Name="V0703高速_YC" Owner="GKZYData.1"/>
+			<Layer Label="盐城港国道标签" ID="L_ID_JSY_GD_YC_A" Name="V0703国道_YC" Owner="GKZYData.1"/>
+			<Layer Label="盐城港省道标签" ID="L_ID_JSY_SD_YC_A" Name="V0703省道_YC" Owner="GKZYData.1"/>
+			<Layer Label="盐城港疏港公路标签" ID="L_ID_JSY_SGGL_YC_A" Name="V0703疏港公路_YC" Owner="GKZYData.1"/>
+			
+			<Layer Label="连云港港高速标签" ID="L_ID_JSY_GSGL_LYG_A" Name="V0703高速_LYG" Owner="GKZYData.1"/>
+			<Layer Label="连云港港国道标签" ID="L_ID_JSY_GD_LYG_A" Name="V0703国道_LYG" Owner="GKZYData.1"/>
+			<Layer Label="连云港港省道标签" ID="L_ID_JSY_SD_LYG_A" Name="V0703省道_LYG" Owner="GKZYData.1"/>
+			<Layer Label="连云港港疏港公路标签" ID="L_ID_JSY_SGGL_LYG_A" Name="V0703疏港公路_LYG" Owner="GKZYData.1"/>
+			
+			<Layer Label="南通港高速标签" ID="L_ID_JSY_GSGL_NT_A" Name="V0703高速_NT" Owner="GKZYData.1"/>
+			<Layer Label="南通港国道标签" ID="L_ID_JSY_GD_NT_A" Name="V0703国道_NT" Owner="GKZYData.1"/>
+			<Layer Label="南通港省道标签" ID="L_ID_JSY_SD_NT_A" Name="V0703省道_NT" Owner="GKZYData.1"/>
+			<Layer Label="南通港疏港公路标签" ID="L_ID_JSY_SGGL_NT_A" Name="V0703疏港公路_NT" Owner="GKZYData.1"/>
+			
+			<Layer Label="苏州港高速标签" ID="L_ID_JSY_GSGL_SZ_A" Name="V0703高速_SZ" Owner="GKZYData.1"/>
+			<Layer Label="苏州港国道标签" ID="L_ID_JSY_GD_SZ_A" Name="V0703国道_SZ" Owner="GKZYData.1"/>
+			<Layer Label="苏州港省道标签" ID="L_ID_JSY_SD_SZ_A" Name="V0703省道_SZ" Owner="GKZYData.1"/>
+			<Layer Label="苏州港疏港公路标签" ID="L_ID_JSY_SGGL_SZ_A" Name="V0703疏港公路_SZ" Owner="GKZYData.1"/>
+			
+			<Layer Label="泰州港高速标签" ID="L_ID_JSY_GSGL_TZ_A" Name="V0703高速_TZ" Owner="GKZYData.1"/>
+			<Layer Label="泰州港省道标签" ID="L_ID_JSY_SD_TZ_A" Name="V0703省道_TZ" Owner="GKZYData.1"/>
+			<Layer Label="泰州港疏港公路标签" ID="L_ID_JSY_SGGL_TZ_A" Name="V0703疏港公路_TZ" Owner="GKZYData.1"/>
+			
+			<Layer Label="扬州港高速标签" ID="L_ID_JSY_GSGL_YZ_A" Name="V0703高速_YZ" Owner="GKZYData.1"/>
+			<Layer Label="扬州港国道标签" ID="L_ID_JSY_GD_YZ_A" Name="V0703国道_YZ" Owner="GKZYData.1"/>
+			<Layer Label="扬州港省道标签" ID="L_ID_JSY_SD_YZ_A" Name="V0703省道_YZ" Owner="GKZYData.1"/>
+			<Layer Label="扬州港疏港公路标签" ID="L_ID_JSY_SGGL_YZ_A" Name="V0703疏港公路_YZ" Owner="GKZYData.1"/>
+			
+			<Layer Label="江阴(无锡)港高速标签" ID="L_ID_JSY_GSGL_JY_A" Name="V0703高速_JY" Owner="GKZYData.1"/>
+			<Layer Label="江阴(无锡)港省道标签" ID="L_ID_JSY_SD_JY_A" Name="V0703省道_JY" Owner="GKZYData.1"/>
+			<Layer Label="江阴(无锡)港疏港公路标签" ID="L_ID_JSY_SGGL_JY_A" Name="V0703疏港公路_JY" Owner="GKZYData.1"/>
+			
+			<Layer Label="常州港高速标签" ID="L_ID_JSY_GSGL_CZ_A" Name="V0703高速_CZ" Owner="GKZYData.1"/>
+			<Layer Label="常州港省道标签" ID="L_ID_JSY_SD_CZ_A" Name="V0703省道_CZ" Owner="GKZYData.1"/>
+			<Layer Label="常州港疏港公路标签" ID="L_ID_JSY_SGGL_CZ_A" Name="V0703疏港公路_CZ" Owner="GKZYData.1"/>
+			
+			<Layer Label="镇江港高速标签" ID="L_ID_JSY_GSGL_ZJ_A" Name="V0703高速_ZJ" Owner="GKZYData.1"/>
+			<Layer Label="镇江港国道标签" ID="L_ID_JSY_GD_ZJ_A" Name="V0703国道_ZJ" Owner="GKZYData.1"/>
+			<Layer Label="镇江港省道标签" ID="L_ID_JSY_SD_ZJ_A" Name="V0703省道_ZJ" Owner="GKZYData.1"/>
+			<Layer Label="镇江港疏港公路标签" ID="L_ID_JSY_SGGL_ZJ_A" Name="V0703疏港公路_ZJ" Owner="GKZYData.1"/>
+			
+			<Layer Label="南京港高速标签" ID="L_ID_JSY_GSGL_NJ_A" Name="V0703高速_NJ" Owner="GKZYData.1"/>
+			<Layer Label="南京港国道标签" ID="L_ID_JSY_GD_NJ_A" Name="V0703国道_NJ" Owner="GKZYData.1"/>
+			<Layer Label="南京港省道标签" ID="L_ID_JSY_SD_NJ_A" Name="V0703省道_NJ" Owner="GKZYData.1"/>
+			<Layer Label="南京港疏港公路标签" ID="L_ID_JSY_SGGL_NJ_A" Name="V0703疏港公路_NJ" Owner="GKZYData.1"/>
+		    
+			
+			<Layer Label="仅标识" ID="ID1" Name="港区文字0626_noNT" Owner="GKZYData.1" Show="1"/>  
+			<Layer Label="仅标识" ID="ID1_1" Name="港区文字0626_NT" Owner="GKZYData.1" Show="1"/> 
+			<Layer Label="仅标识" ID="ID1_0" Name="港区文字_一条线版" Owner="GKZYData.1" />   
+			<Layer Label="仅标识" ID="ID2" Name="作业区文字" Owner="GKZYData.1" Show="1"/>			
+			
+			<Layer Label="南京港规划镂空图层" ID="L_ID_GQGH_NJ_LK" Name="南京规划图" Owner="GKZYData" />  
+			<Layer Label="扬州港规划镂空图层" ID="L_ID_GQGH_YZ_LK" Name="扬州规划图" Owner="GKZYData" /> 
+            <Layer Label="泰州港规划镂空图层" ID="L_ID_GQGH_TZ_LK" Name="泰州规划图" Owner="GKZYData" /> 
+            <Layer Label="江阴港规划镂空图层" ID="L_ID_GQGH_JY_LK" Name="江阴规划图" Owner="GKZYData" /> 
+			<Layer Label="苏州港规划镂空图层" ID="L_ID_GQGH_SZ_LK" Name="苏州规划图" Owner="GKZYData" /> 
+            <Layer Label="镇江港规划镂空图层" ID="L_ID_GQGH_ZJ_LK" Name="镇江规划图" Owner="GKZYData" /> 
+           	<Layer Label="盐城港规划镂空图层" ID="L_ID_GQGH_YC_LK" Name="盐城规划图" Owner="GKZYData" /> 
+           	<Layer Label="连云港规划镂空图层" ID="L_ID_GQGH_LYG_LK" Name="连云港规划图" Owner="GKZYData" /> 
+           	
+			<Layer Label="南京港规划标注" ID="L_ID_GQGH_NJ_A" Name="南京规划图标注" Owner="GKZYData.1" />  
+			<Layer Label="南京港规划" ID="L_ID_GQGH_NJ" Name="南京规划图" Owner="GKZYData.1" /> 
+           	<Layer Label="扬州港规划标注" ID="L_ID_GQGH_YZ_A" Name="扬州规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="扬州港规划" ID="L_ID_GQGH_YZ" Name="扬州规划图" Owner="GKZYData.1" /> 
+			<Layer Label="泰州港规划标注" ID="L_ID_GQGH_TZ_A" Name="泰州规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="泰州港规划" ID="L_ID_GQGH_TZ" Name="泰州规划图" Owner="GKZYData.1" /> 
+			<Layer Label="江阴港规划标注" ID="L_ID_GQGH_JY_A" Name="江阴规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="江阴港规划" ID="L_ID_GQGH_JY" Name="江阴规划图" Owner="GKZYData.1" /> 
+			<Layer Label="苏州港规划标注" ID="L_ID_GQGH_SZ_A" Name="苏州规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="苏州港规划" ID="L_ID_GQGH_SZ" Name="苏州规划图" Owner="GKZYData.1" /> 
+			<Layer Label="镇江港规划标注" ID="L_ID_GQGH_ZJ_A" Name="镇江规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="镇江港规划" ID="L_ID_GQGH_ZJ" Name="镇江规划图" Owner="GKZYData.1" /> 
+			<Layer Label="盐城港规划标注" ID="L_ID_GQGH_YC_A" Name="盐城规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="盐城港规划" ID="L_ID_GQGH_YC" Name="盐城规划图" Owner="GKZYData.1" /> 
+			<Layer Label="连云港港规划标注" ID="L_ID_GQGH_LYG_A" Name="连云港规划图标注" Owner="GKZYData.1" /> 
+            <Layer Label="连云港港规划" ID="L_ID_GQGH_LYG" Name="连云港规划图" Owner="GKZYData.2" /> 
+						
+			<Layer Label="泊位标注" ID="L_ID_BW_1" Name="L_BW_PY" Owner="GKZYData.1" Show="1"/>       
+			<Layer Label="码头标注" ID="L_ID_MT_1" Name="L_MT_PY" Owner="GKZYData.1" />       
+			<Layer Label="港口经营人标注" ID="L_ID_GKJYR_1" Name="L_GKJYR_PY" Owner="GKZYData.1" Show="1"/> 
+			<Layer Label="港口经营人透明标注" ID="L_ID_GKJYR_11" Name="L_GKJYR_PY" Owner="GKZYData.3" />      
+			<Layer Label="锚地现状标注" ID="L_ID_MD_XZ_1" Name="L_MD_XZ_PY" Owner="GKZYData.1" />       
+			<Layer Label="锚地规划标注" ID="L_ID_MD_GH_1" Name="L_MD_GH_PY" Owner="GKZYData.1" />       
+			<Layer Label="港区标注" ID="L_ID_GQ_5" Name="L_GQ_PY" Owner="GKZYData.2" />
+			<Layer Label="摄像头" ID="L_ID_SP" Name="L_SP_PT" Owner="GKZYData"/>    
+			<Layer Label="港口" ID="L_ID_GK_PT" Name="港口_首页图标" Owner="GKZYData"/> 
+			<Layer Label="岸线现状" ID="L_ID_AX_XZ" Name="L_AX_XZ_PL" Owner="GKZYData"/>       
+			<Layer Label="泊位镂空图层" ID="L_ID_BW01" Name="L_BW_PY" Owner="GKZYData.2"/>       
+			<Layer Label="码头前沿镂空图层" ID="L_ID_MT01" Name="L_MT_PY" Owner="GKZYData.2"/>       
+			<Layer Label="锚地现状镂空图层" ID="L_ID_MD_XZ01" Name="L_MD_XZ_PY" Owner="GKZYData.2" />       
+			<Layer Label="锚地规划镂空图层" ID="L_ID_MD_GH01" Name="L_MD_GH_PY" Owner="GKZYData.2"/>     
+			<Layer Label="泊位" ID="L_ID_BW" Name="L_BW_PY" Owner="GKZYData" Show="1"/>       
+			<Layer Label="码头前沿" ID="L_ID_MT" Name="L_MT_PY" Owner="GKZYData" Show="1"/>       
+			<Layer Label="锚地现状" ID="L_ID_MD_XZ" Name="L_MD_XZ_PY" Owner="GKZYData" />       
+			<Layer Label="锚地" ID="L_ID_MD_GH" Name="L_MD_GH_PY" Owner="GKZYData"/> 
+			<Layer Label="港口经营人" ID="L_ID_GKJYR" Name="L_GKJYR_PY" Owner="GKZYData" Show="1"/> 
+			<Layer Label="港口经营人" ID="L_ID_GKJYR_2" Name="L_GKJYR_PY" Owner="GKZYData.2" Show="1"/>      
+			<Layer Label="作业区" ID="L_ID_ZYQ" Name="L_ZYQ_PY" Owner="GKZYData.2" Show="1"/>       
+			<Layer Label="港区" ID="L_ID_GQ" Name="L_GQ_PY" Owner="GKZYData.3" Show="1"/> 
+			<Layer Label="作业区" ID="L_ID_ZYQ_2" Name="L_ZYQ_PY" Owner="GKZYData.1" Show="1"/>   
+			<Layer Label="港区" ID="L_ID_GQ_2" Name="L_GQ_PY" Owner="GKZYData.1" Show="1"/> 
+			<Layer Label="港口区域" ID="L_ID_GK_PY" Name="L_GK_PY" Owner="GKZYData"/>      
+			<Layer Label="市界" ID="L_ID_SJ" Name="L_SJ_PY" Owner="GKZYData"/>     
+			<Layer Label="港口危险货物企业" ID="L_ID_AQ_WXHWQY" Name="L_GKZY_AQ_WXHWQY_PT" Owner="GKZYData"/>       
+			<Layer Label="应急物资库" ID="L_ID_AQ_YJWZK" Name="L_GKZY_AQ_YJWZK_PT" Owner="GKZYData"/>       
+			<Layer Label="港口危险化学品仓储设施" ID="L_ID_AQ_WHPCCSS" Name="L_GKZY_AQ_WHPCCSS_PT" Owner="GKZYData"/>       
+			<Layer Label="重大危险源企业" ID="L_ID_AQ_ZDWXYQY" Name="L_GKZY_AQ_ZDWXYQY_PT" Owner="GKZYData"/>       
+			<Layer Label="取水口" ID="L_ID_AQ_QSK" Name="L_GKZY_AQ_QSK_PT" Owner="GKZYData"/>  
+			<Layer Label="应急网络_消防" ID="L_ID_AQ_XF" Name="应急网络_消防" Owner="GKZYData"/>
+			<Layer Label="应急网络_交警" ID="L_ID_AQ_JJ" Name="应急网络_交警" Owner="GKZYData"/>
+			<Layer Label="取水口" ID="L_ID_AQ_QSK2" Name="取水口" Owner="GKZYData"/>
+			<Layer Label="应急网络_公安" ID="L_ID_AQ_GA" Name="应急网络_公安" Owner="GKZYData"/>
+			<Layer Label="医院药店" ID="L_ID_AQ_YY" Name="医院药店" Owner="GKZYData"/>
+		    <Layer Label="港口范围" ID="L_ID_GKFW" Name="港口范围" Owner="GKZYData"/> 
+		    <Layer Label="罐区" ID="L_ID_AQ_GQ" Name="罐区" Owner="GKZYData"/>
+		
+		    <Layer Label="南京港高速" ID="L_ID_JSY_GSGL_NJ" Name="高速0626" Owner="GKZYData"/>
+		    <Layer Label="镇江港高速" ID="L_ID_JSY_GSGL_ZJ" Name="高速0626" Owner="GKZYData.1"/>
+			<Layer Label="扬州港高速" ID="L_ID_JSY_GSGL_YZ" Name="V0703高速" Owner="GKZYData"/>
+		   	<Layer Label="泰州港高速" ID="L_ID_JSY_GSGL_TZ" Name="V0703高速" Owner="GKZYData.1"/>
+			<Layer Label="常州港高速" ID="L_ID_JSY_GSGL_CZ" Name="V0703高速" Owner="GKZYData.2"/>
+		    <Layer Label="江阴港高速" ID="L_ID_JSY_GSGL_JY" Name="V0703高速" Owner="GKZYData.3"/>
+			<Layer Label="苏州港高速" ID="L_ID_JSY_GSGL_SZ" Name="V0703高速" Owner="GKZYData.4"/>
+		    <Layer Label="南通港高速" ID="L_ID_JSY_GSGL_NT" Name="V0703高速" Owner="GKZYData.5"/>
+			<Layer Label="连云港港高速" ID="L_ID_JSY_GSGL_LYG" Name="V0703高速" Owner="GKZYData.6"/>
+		    <Layer Label="盐城港高速" ID="L_ID_JSY_GSGL_YC" Name="V0703高速" Owner="GKZYData.7"/>
+		    <Layer Label="高速" ID="L_ID_JSY_GSGL" Name="高速公路3" Owner="GKZYData"/>
+		    <Layer Label="南京港国道" ID="L_ID_JSY_GD_NJ" Name="国道0626" Owner="GKZYData"/>
+		    <Layer Label="镇江港国道" ID="L_ID_JSY_GD_ZJ" Name="国道0626" Owner="GKZYData.1"/>
+			<Layer Label="扬州港国道" ID="L_ID_JSY_GD_YZ" Name="V0703国道" Owner="GKZYData"/>
+
+			<Layer Label="苏州港国道" ID="L_ID_JSY_GD_SZ" Name="V0703国道" Owner="GKZYData.1"/>
+		    <Layer Label="南通港国道" ID="L_ID_JSY_GD_NT" Name="V0703国道" Owner="GKZYData.2"/>
+			<Layer Label="连云港港国道" ID="L_ID_JSY_GD_LYG" Name="V0703国道" Owner="GKZYData.3"/>
+		    <Layer Label="盐城港国道" ID="L_ID_JSY_GD_YC" Name="V0703国道" Owner="GKZYData.4"/>
+		    <Layer Label="国道" ID="L_ID_JSY_GD" Name="普通国道路段" Owner="GKZYData"/>
+		    <Layer Label="南京港省道" ID="L_ID_JSY_SD_NJ" Name="省道0626" Owner="GKZYData.1"/>
+		    <Layer Label="镇江港省道" ID="L_ID_JSY_SD_ZJ" Name="省道0626" Owner="GKZYData"/>
+			<Layer Label="扬州港省道" ID="L_ID_JSY_SD_YZ" Name="V0703省道" Owner="GKZYData"/>
+		   	<Layer Label="泰州港省道" ID="L_ID_JSY_SD_TZ" Name="V0703省道" Owner="GKZYData.1"/>
+			<Layer Label="常州港省道" ID="L_ID_JSY_SD_CZ" Name="V0703省道" Owner="GKZYData.2"/>
+		    <Layer Label="江阴港省道" ID="L_ID_JSY_SD_JY" Name="V0703省道" Owner="GKZYData.3"/>
+			<Layer Label="苏州港省道" ID="L_ID_JSY_SD_SZ" Name="V0703省道" Owner="GKZYData.4"/>
+		    <Layer Label="南通港省道" ID="L_ID_JSY_SD_NT" Name="V0703省道" Owner="GKZYData.5"/>
+			<Layer Label="连云港港省道" ID="L_ID_JSY_SD_LYG" Name="V0703省道" Owner="GKZYData.6"/>
+		    <Layer Label="盐城港省道" ID="L_ID_JSY_SD_YC" Name="V0703省道" Owner="GKZYData.7"/>
+		    <Layer Label="省道" ID="L_ID_JSY_SD" Name="普通省道路段" Owner="GKZYData"/>
+		    <Layer Label="南京港疏港公路" ID="L_ID_JSY_SGGL_NJ" Name="疏港公路0626" Owner="GKZYData.1"/>
+		    <Layer Label="镇江港疏港公路" ID="L_ID_JSY_SGGL_ZJ" Name="疏港公路0626" Owner="GKZYData"/>
+			<Layer Label="扬州港疏港公路" ID="L_ID_JSY_SGGL_YZ" Name="V0703疏港公路" Owner="GKZYData"/>
+		   	<Layer Label="泰州港疏港公路" ID="L_ID_JSY_SGGL_TZ" Name="V0703疏港公路" Owner="GKZYData.1"/>
+			<Layer Label="常州港疏港公路" ID="L_ID_JSY_SGGL_CZ" Name="V0703疏港公路" Owner="GKZYData.2"/>
+		    <Layer Label="江阴港疏港公路" ID="L_ID_JSY_SGGL_JY" Name="V0703疏港公路" Owner="GKZYData.3"/>
+			<Layer Label="苏州港疏港公路" ID="L_ID_JSY_SGGL_SZ" Name="V0703疏港公路" Owner="GKZYData.4"/>
+		    <Layer Label="南通港疏港公路" ID="L_ID_JSY_SGGL_NT" Name="V0703疏港公路" Owner="GKZYData.5"/>
+			<Layer Label="连云港港疏港公路" ID="L_ID_JSY_SGGL_LYG" Name="V0703疏港公路" Owner="GKZYData.6"/>
+		    <Layer Label="盐城港疏港公路" ID="L_ID_JSY_SGGL_YC" Name="V0703疏港公路" Owner="GKZYData.7"/>
+		    <Layer Label="疏港公路" ID="L_ID_JSY_SGGL" Name="疏港公路" Owner="GKZYData"/>			
+			<Layer Label="南京港铁路" ID="L_ID_JSY_TL_NJ" Name="铁路0626" Owner="GKZYData.1"/>
+			<Layer Label="镇江港铁路" ID="L_ID_JSY_TL_ZJ" Name="铁路0626" Owner="GKZYData"/>
+			<Layer Label="扬州港铁路" ID="L_ID_JSY_TL_YZ" Name="V0703铁路" Owner="GKZYData"/>
+			<Layer Label="泰州港铁路" ID="L_ID_JSY_TL_TZ" Name="V0703铁路" Owner="GKZYData.1"/>
+
+			<Layer Label="江阴港铁路" ID="L_ID_JSY_TL_JY" Name="V0703铁路" Owner="GKZYData.2"/>
+
+			<Layer Label="南通港铁路" ID="L_ID_JSY_TL_NT" Name="V0703铁路" Owner="GKZYData.3"/>
+
+		    <Layer Label="铁路" ID="L_ID_JSY_TL" Name="沿江铁路" Owner="GKZYData"/>
+		    <Layer Label="高等级航道" ID="L_ID_JSY_GHD" Name="T3级以上航道L" Owner="GKZYData"/>
+		    <Layer Label="管道" ID="L_ID_JSY_GUAND" Name="管道0626" Owner="GKZYData"/>
+			<Layer Label="港口名称点" ID="L_ID_GK_PT1" Name="港名称" Owner="GKZYData"/>
+			
+			<Layer Label="应急网络_边防" ID="L_ID_AQ_BF" Name="L_AQ_BF" Owner="GKZYData"/>
+			<Layer Label="应急网络_环保" ID="L_ID_AQ_HB" Name="L_AQ_HB" Owner="GKZYData"/>
+			<Layer Label="应急网络_搜救中心" ID="L_ID_AQ_SJZX" Name="L_AQ_SJZX" Owner="GKZYData"/>
+		</Service>
+	</MapServices>
+	<DataServices>
+		<Service Label="港口资源" ID="DATA_SERVICE_GKZY" URL="http://${serverName}:${port}/iserver/services/data-GKZY/rest/data">
+			<Layer Label="泊位" ID="L_ID_BW" Name="L_BW_PY" Owner="GKZYData"/>
+			<Layer Label="岸线现状" ID="L_ID_AX_XZ" Name="L_AX_XZ_PL" Owner="GKZYData"/> 
+			<Layer Label="港区" ID="L_ID_GQ" Name="L_GQ_PY" Owner="GKZYData"/>    
+			<Layer Label="港口区域" ID="L_ID_GK_PY" Name="L_GK_PY" Owner="GKZYData"/>      
+			<Layer Label="市界" ID="L_ID_SJ" Name="L_SJ_PY" Owner="GKZYData"/>       
+			<Layer Label="锚地现状" ID="L_ID_MD_XZ" Name="L_MD_XZ_PY" Owner="GKZYData"/>     
+			<Layer Label="锚地" ID="L_ID_MD_GH" Name="L_MD_GH_PY" Owner="GKZYData"/> 
+			<Layer Label="港口经营人" ID="L_ID_GKJYR" Name="L_GKJYR_PY" Owner="GKZYData"/>      
+			<Layer Label="码头前沿" ID="L_ID_MT" Name="L_MT_PY" Owner="GKZYData"/>      
+			<Layer Label="作业区" ID="L_ID_ZYQ" Name="L_ZYQ_PY" Owner="GKZYData"/>      
+			<Layer Label="岸线现状临时层" ID="L_ID_AX_XZ_TMP" Name="L_AX_XZ_PL_TMP" Owner="GKZYData"/> 
+			<Layer Label="码头前沿临时层" ID="L_ID_MT_TMP" Name="L_MT_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="泊位临时层" ID="L_ID_BW_TMP" Name="L_BW_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="锚地现状临时层" ID="L_ID_MD_XZ_TMP" Name="L_MD_XZ_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="作业区临时层" ID="L_ZYQ_PY_TMP" Name="L_ZYQ_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="港区临时层" ID="L_GQ_PY_TMP" Name="L_GQ_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="锚地规划临时层" ID="L_MD_GH_PY_TMP" Name="L_MD_GH_PY_TMP" Owner="GKZYData"/> 
+			<Layer Label="经营人临时图层" ID="L_GKJYR_PY_TMP" Name="L_GKJYR_PY_TMP" Owner="GKZYData"/> 
+			
+			
+			<Layer Label="港口危险化学品仓储设施" ID="L_ID_AQ_WHPCCSS" Name="L_GKZY_AQ_WHPCCSS_PT" Owner="GKZYData"/> 
+			<Layer Label="港口危险货物企业" ID="L_ID_AQ_WXHWQY" Name="L_GKZY_AQ_WXHWQY_PT" Owner="GKZYData"/> 
+			<Layer Label="取水口" ID="L_ID_AQ_QSK" Name="L_GKZY_AQ_QSK_PT" Owner="GKZYData"/> 
+			<Layer Label="应急物资库" ID="L_ID_AQ_YJWZK" Name="L_GKZY_AQ_YJWZK_PT" Owner="GKZYData"/> 
+			<Layer Label="重大危险源企业" ID="L_ID_AQ_ZDWXYQY" Name="L_GKZY_AQ_ZDWXYQY_PT" Owner="GKZYData"/> 
+		</Service>
+	</DataServices>
+	<AnalystServices>
+		<Service Label="港口资源" ID="ANALYST_SERVICE_GKZY" URL="http://${serverName}:${port}/iserver/services/spatialAnalysis-GKZY/restjsr/spatialanalyst">
+		</Service>
+	</AnalystServices>
+</Root>

+ 21 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/cfg/MenuConfig.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node CDID="M_SYS" CDMC="港口资源系统菜单" CDMS="根节点" CDXH="0" CJSJ="null" ID="1" SJCDID="-1" STATE="0">
+    <node CDID="M_AQXT" CDMC="安全系统" CDTB="" CDMS="null" CDXH="1" CJSJ="null" ID="281e1e57-a443-4d11-92ff-2483ffb41505" SJCDID="5eaa0b0f-849c-4301-b076-b7270d4ffb9c" STATE="0">
+      <node CDID="ALL" CDMC="全部" CDTB="" CDMS="null" CDXH="1" CJSJ="null" ID="e0413fe6-6dad-4e10-b465-9285bc43c203" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_WHPCCSS" CDMC="港口危险化学品仓储设施" CDTB="flexResources/png/aq_whpccss.png" CDMS="null" CDXH="1" CJSJ="null" ID="e0413fe6-6dad-4e10-b465-9285bc43c203" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_WXHWQY" CDMC="港口危险货物企业" CDTB="flexResources/png/aq_wxhwqy.png" CDMS="null" CDXH="2" CJSJ="null" ID="0f75f453-4317-4940-bc0b-120ba3b94039" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_QSK" CDMC="取水口" CDTB="flexResources/png/aq_qsk.png" CDMS="null" CDXH="3" CJSJ="null" ID="4744c601-bbe0-4664-b1fa-74e016cb82e2" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_YJWZK" CDMC="应急物资库" CDTB="flexResources/png/aq_yywzk.png" CDMS="null" CDXH="4" CJSJ="null" ID="55448a54-e5ad-4a27-96e7-651edf33f0e9" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_ZDWXYQY" CDMC="重大危险源企业" CDTB="flexResources/png/aq_zdwxy.gif" CDMS="null" CDXH="5" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5a" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41505" STATE="0"/>
+      <node CDID="L_ID_AQ_XF" CDMC="消防" CDTB="flexResources/png/aq_xf.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5b" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41506" STATE="0"/>
+      <node CDID="L_ID_AQ_YY" CDMC="医院" CDTB="flexResources/png/aq_yy.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5c" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41507" STATE="0"/>
+      <node CDID="L_ID_AQ_JJ" CDMC="交警" CDTB="flexResources/png/aq_jj.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5d" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41508" STATE="0"/>
+      <node CDID="L_ID_AQ_GA" CDMC="公安" CDTB="flexResources/png/aq_ga.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5e" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41509" STATE="0"/>
+      <node CDID="L_ID_AQ_BF" CDMC="边防" CDTB="flexResources/png/aq_bf.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32169dd5e" SJCDID="281e1e57-a443-4d11-92ff-2483ffb42501" STATE="0"/>
+      <node CDID="L_ID_AQ_HB" CDMC="环保" CDTB="flexResources/png/aq_hb.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32169dd6e" SJCDID="281e1e57-a443-4d11-92ff-2483ffb42502" STATE="0"/>
+      <node CDID="L_ID_AQ_SJZX" CDMC="搜救中心" CDTB="flexResources/png/aq_sjzx.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32169dd7e" SJCDID="281e1e57-a443-4d11-92ff-2483ffb42503" STATE="0"/>
+      <node CDID="L_ID_AQ_GQ" CDMC="罐区" CDTB="flexResources/png/aq_gq.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5f" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41510" STATE="0"/>
+      <node CDID="L_ID_BW" CDMC="泊位" CDTB="flexResources/png/aq_bw.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5g" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41511" STATE="0"/>
+      <node CDID="L_ID_SP" CDMC="摄像头" CDTB="flexResources/png/aq_sxt.png" CDMS="null" CDXH="6" CJSJ="null" ID="0717a6fb-d965-4b43-8fd8-96d32069dd5g" SJCDID="281e1e57-a443-4d11-92ff-2483ffb41511" STATE="0"/>
+    </node>
+</node>

+ 13 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/cfg/ServiceConfig.as

@@ -0,0 +1,13 @@
+// ActionScript file
+package com.xt.hb.cfg
+{
+	public class ServiceConfig
+	{		
+		public function ServiceConfig()		{	}
+		/**
+		 * flex发布路径
+		 */
+		public static const  service_flexPath:String = "flexs";
+	}
+
+}

+ 72 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/common/InfoModel.mxml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
+		   xmlns:s="library://ns.adobe.com/flex/spark"
+		   xmlns:mx="library://ns.adobe.com/flex/mx"
+		   backgroundColor="#DFF1F9" cornerRadius="7"
+		   initialize="init(event)">
+	<fx:Script>
+		<![CDATA[
+			import com.xt.hb.utils.MapUtils;
+			
+			import mx.controls.Label;
+			import mx.events.FlexEvent;
+			protected function init(event:FlexEvent):void{
+				setInfoWindowStyle();
+				var label:Label = null;
+				if(null != infoArr && infoArr.length > 0){
+					for each(var info:String in infoArr){
+						label = new Label();
+						label.text=info;
+						infoBox.addChild(label);
+					}
+				} else {
+					label = new Label();
+					infoBox.addChild(label);
+				}
+				setInfoWindowStyle();
+			}
+			public var infoArr:Array;
+			public var plusX:Number = 1;
+			public var plusY:Number = -1;
+			/**
+			 * 设置infoWindow样式
+			 */
+			public function setInfoWindowStyle():void{
+//				MapUtils.map.infoWindow.label = "标题??";
+//				MapUtils.map.infoWindow.setStyle("backgroundColor",0xDFF1F9);
+//				MapUtils.map.infoWindow.setStyle("borderStyle","solid");
+//				MapUtils.map.infoWindow.setStyle("borderColor",0xA2F1F9);
+				MapUtils.map.infoWindow.labelVisible = false;
+				MapUtils.map.infoWindow.closeButtonVisible = false;
+			}
+			/**
+			 * 弹出
+			 */
+			public function showInfoWindow(arr:Array, e:MouseEvent):void{
+				this.percentWidth = 100;
+				MapUtils.map.infoWindow.percentWidth = 100;
+				show(arr, e);
+			}
+			/**
+			 * 自定义宽度弹出
+			 */
+			public function showInfoWindow1(arr:Array, e:MouseEvent, width:Number):void{
+				MapUtils.map.infoWindow.width = width;
+				this.width = width;
+				show(arr, e);
+			}
+			
+			/**
+			 * 自定义宽度弹出
+			 */
+			public function show(arr:Array, e:MouseEvent):void{
+				infoArr = arr;
+				MapUtils.map.infoWindow.content = this;
+				MapUtils.map.infoWindow.show(MapUtils.map.toMapFromStage(
+					e.stageX + plusX, e.stageY + plusY));
+			} 
+		]]>
+	</fx:Script>
+	<mx:VBox backgroundColor="0xDFF1F9" id="infoBox" horizontalGap="0" verticalGap="0">
+	</mx:VBox>
+</mx:Canvas> 

+ 109 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/entity/T_R_MENU.as

@@ -0,0 +1,109 @@
+package com.xt.hb.entity
+{
+	[Bindable]
+	[RemoteClass(alias="com.port.entity.T_R_MENU")]
+	public class T_R_MENU
+	{
+		public function T_R_MENU()
+		{
+		}
+
+		private var _ID:String;
+		private var _CDMC:String;
+		private var _CDMS:String;
+		private var _CDXH:Number;
+		private var _SJCDID:String;
+		private var _CJSJ:Date;
+		private var _CDID:String;
+		private var _CDTB:String;
+		private var _STATE:String;
+		private var _SHOWCHECKBOX:String ; //是否显示c节点的checkbox控件   1:显示
+
+		
+
+
+		public function get SHOWCHECKBOX():String
+		{
+			return _SHOWCHECKBOX;
+		}
+
+		public function set SHOWCHECKBOX(value:String):void
+		{
+			_SHOWCHECKBOX = value;
+		}
+
+		public function get ID():String
+		{
+			return _ID;
+		}
+		public function set ID(value:String):void
+		{
+			_ID = value;
+		}
+		public function get CDMC():String
+		{
+			return _CDMC;
+		}
+		public function set CDMC(value:String):void
+		{
+			_CDMC = value;
+		}
+		public function get CDMS():String
+		{
+			return _CDMS;
+		}
+		public function set CDMS(value:String):void
+		{
+			_CDMS = value;
+		}
+		public function get CDXH():Number
+		{
+			return _CDXH;
+		}
+		public function set CDXH(value:Number):void
+		{
+			_CDXH = value;
+		}
+		public function get SJCDID():String
+		{
+			return _SJCDID;
+		}
+		public function set SJCDID(value:String):void
+		{
+			_SJCDID = value;
+		}
+		public function get CJSJ():Date
+		{
+			return _CJSJ;
+		}
+		public function set CJSJ(value:Date):void
+		{
+			_CJSJ = value;
+		}
+		public function get CDID():String
+		{
+			return _CDID;
+		}
+		public function set CDID(value:String):void
+		{
+			_CDID = value;
+		}
+		public function get CDTB():String
+		{
+			return _CDTB;
+		}
+		public function set CDTB(value:String):void
+		{
+			_CDTB = value;
+		}
+		public function get STATE():String
+		{
+			return _STATE;
+		}
+		public function set STATE(value:String):void
+		{
+			_STATE = value;
+		}
+	}
+}
+

+ 31 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/DataConfigEvent.as

@@ -0,0 +1,31 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+	public class DataConfigEvent extends BaseEvent
+	{
+		/**
+		 * 定义当配置文件载入时,ConfigDataEvent事件对象的type属性。
+		 */		
+		public static const MAPCONFIG_LOAD:String	= "mapConfigLoad";
+		
+		public static const MENUCONFIG_LOAD:String	= "menuConfigLoad";
+		
+		public static const CONFIG_LOAD_ERROR:String = "configLoadError";
+		//--------------------------------------------------------------------------
+		//
+		//  Constructor
+		//
+		//--------------------------------------------------------------------------
+		/**
+		 * 处理配置文件数据时,都会将 ConfigDataEvent 对象分派到事件流中。
+		 * @param type 定义事件类型。
+		 * @param data 定义事件信息。
+		 */ 		
+		public function DataConfigEvent(type:String,  data:Object=null)
+		{
+			
+			super(type);
+			if (data != null) _data = data;
+		}
+	}
+}

+ 18 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/MenusEvent.as

@@ -0,0 +1,18 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+	public class MenusEvent extends BaseEvent
+	{
+		public static const MENUHIDE:String = "menuhide";
+		
+		public static const MENUOVER:String = "menuover";
+		
+		public function MenusEvent(type:String,  data:Object=null)
+		{
+			super(type);
+			if (data != null) _data = data;
+		}
+		
+		
+	}
+}

+ 31 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/NavigationEvent.as

@@ -0,0 +1,31 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+	
+	public class NavigationEvent extends BaseEvent
+	{
+		
+		public static var LOGOCHANGE:String = "logoChange";
+		
+		public static var MENUCHANGETWO:String = "menuchangetwo";
+		
+		public static var RETURNLOGIN:String = "returnlogin";
+		
+		public static var NAVIGATIONCLOSE:String = "navigationclose";
+		
+		public static var MENUCHAGE:String = "menuChange";
+		
+		public static var CHECKBOXSET:String = "checkBoxSet";
+		
+		/**
+		 * 返回上一菜单状态
+		 * */
+		public static var MENUBACK:String = "menuBack";
+		
+		public function NavigationEvent(type:String,  data:Object=null)
+		{
+			super(type);
+			if (data != null) _data = data;
+		}
+	}
+}

+ 15 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/PageEvent.as

@@ -0,0 +1,15 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+
+	public class PageEvent extends BaseEvent
+	{
+		public static const PAGECHANGE:String = "pagechange";
+		
+		public function PageEvent(type:String,  data:Object=null)
+		{
+			super(type);
+			if (data != null) _data = data;
+		}
+	}
+}

+ 17 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/QueryLayerEvent.as

@@ -0,0 +1,17 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+
+	public class QueryLayerEvent extends BaseEvent
+	{
+		public static const QUERY_SUCCESS:String = "QUERY_SUCCESS";
+		
+		public static const QUERY_FAULT:String = "QUERY_FAULT";
+		
+		public function QueryLayerEvent(type:String,  data:Object=null)
+		{
+			super(type);
+			if (data != null) _data = data;
+		}
+	}
+}

+ 16 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/events/TCKZCheckBoxClickEvent.as

@@ -0,0 +1,16 @@
+package com.xt.hb.events
+{
+	import com.supermap.framework.events.BaseEvent;
+	
+	public class TCKZCheckBoxClickEvent extends BaseEvent
+	{
+		/**
+		 * 图层控制树节点的CheckBox发生Click事件
+		 * */
+		public static var TCKZ_TreeNodeCheckBox_Click:String = "tckzTreeNodeClick";
+		public function TCKZCheckBoxClickEvent(type:String="", data:Object=null)
+		{
+			super(type, data);
+		}
+	}
+}

+ 20 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/modules/BaseModule.as

@@ -0,0 +1,20 @@
+package com.xt.hb.modules
+{
+	import mx.core.IVisualElement;
+	
+	import spark.modules.Module;
+	
+	public class BaseModule extends Module
+	{
+		public function BaseModule()
+		{
+			super();
+		}
+		/**
+		 * 模块初始化设置
+		 */
+		public function init(parent:IVisualElement):Boolean{
+			return true;
+		}
+	}
+}

+ 30 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/modules/MapModule.mxml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<modules:BaseModule xmlns:fx="http://ns.adobe.com/mxml/2009"
+					xmlns:s="library://ns.adobe.com/flex/spark"
+					xmlns:mx="library://ns.adobe.com/flex/mx"
+					xmlns:modules="com.xt.hb.modules.*"
+					width="400" height="300"e.com/flex/mx" xmlns:modules="com.xt.hb.modules.*" width="400" height="300" creationComplete="module_creationCompleteHandler">
+	<fx:Declarations>
+	</fx:Declarations>
+	<fx:Script>
+		<![CDATA[
+			import mx.controls.Alert;
+			import mx.core.IVisualElement;
+			import mx.events.FlexEvent;
+			/**
+			 * 初始化时加载控件的皮肤
+			 * */
+			private function module_creationCompleteHandler(event:FlexEvent):void
+			{
+				Alert.show("module_creationCompleteHandler");
+			}
+			
+			override public function init(parent:IVisualElement):Boolean
+			{
+				Alert.show("initModule");
+				return super.initModule(parent);
+			}
+			
+		]]>
+	</fx:Script>
+</modules:BaseModule>

+ 73 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/object/FieldObject.as

@@ -0,0 +1,73 @@
+package com.xt.hb.object
+{
+	public class FieldObject
+	{
+		public function FieldObject(label:String = null,field:String = null,showInGrid:Boolean = true,showInPop:Boolean = true,dicFlag:String = "")
+		{
+			this.setLabel(label);
+			this.setField(field);
+			this.setShowInGrid(showInGrid);
+			this.setShowInPop(showInPop);
+			this.setDicFlag(dicFlag);
+		}
+		
+		private var label:String;
+		
+		private var field:String;
+		
+		private var showInGrid:Boolean;
+		
+		private var showInPop:Boolean;
+		
+		private var dicFlag:String;
+		
+		public function getLabel():String
+		{
+			return this.label;
+		}
+		
+		public function setLabel(label:String):void
+		{
+			this.label = label;
+		}
+		
+		public function getField():String
+		{
+			return field;
+		}
+		
+		public function setField(field:String):void
+		{
+			this.field = field;
+		}
+		
+		public function isShowInGrid():Boolean
+		{
+			return this.showInGrid;
+		}
+		
+		public function setShowInGrid(showInGrid:Boolean):void
+		{
+			this.showInGrid = showInGrid;
+		}
+		
+		public function isShowInPop():Boolean
+		{
+			return this.showInPop;
+		}
+		
+		public function setShowInPop(showInPop:Boolean):void
+		{
+			this.showInPop = showInPop;
+		}
+		
+		public function setDicFlag(dicFlag:String):void
+		{
+			this.dicFlag = dicFlag;
+		}
+		public function getDicFlag():String
+		{
+			return this.dicFlag;
+		}
+	}
+}

+ 62 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/server/QueryAction.as

@@ -0,0 +1,62 @@
+package com.xt.hb.server
+{
+	import com.esri.ags.FeatureSet;
+	import com.esri.ags.Graphic;
+	
+	import mx.controls.Alert;
+	import mx.rpc.AsyncResponder;
+	
+	
+	public class QueryAction
+	{
+		public function QueryAction()
+		{
+		}
+		
+		private var layerid:String = null;
+		
+		private var eventType:String;
+		
+		private var RETURN_DATA_NUMBER:int = 500;
+		
+		public function queryLayer(layerId:String,eventFlag:String,
+								   where:String = null,isExpectCount:Boolean = false):void
+		{
+//			queryTask.url="http://192.168.57.74:8399/arcgis/rest/services/hbaq/MapServer/1/";
+			//queryTask.query.text=qText.text;
+			//queryTask.query.where="STATE_NAME like '%"+qText.text+"%'";
+			//设置查询语句
+//			query.where="1=1";
+			//查询结果是否返回Geometry
+//			query.returnGeometry=true;
+//			query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
+			//设置要查询的字段
+//			var fields:Array=new Array();
+//			fields.push("OBJECTID");
+//			fields.push("STATE_NAME");
+//			fields.push("POP2000");
+//			queryTask.query.outFields=fields; 
+			//进行查询成功调用onResult方法,错误失败调用onFault
+//			queryTask.execute(query,new AsyncResponder(onResult,onFault))
+		}
+		
+		//查询成功活进行高亮显示已经数据Grid显示
+		private function onResult(featureSet:FeatureSet,token:Object = null):void
+		{
+			var resultlist:Array=new Array();
+			for each(var griphic:Graphic in featureSet.features)
+			{
+				trace(griphic);
+//				myGraphicsLayer.add(griphic);
+//				resultlist.push({"ID":griphic.attributes.OBJECTID,"STATE_NAME":griphic.attributes.STATE_NAME})
+			}
+		}
+		
+		//查询失败提示
+		private function onFault(info:Object, token:Object = null ):void
+		{
+			//Alert.show(info.toString());
+			Alert.show("输入的查询语句不正确!");
+		}
+	}
+}

+ 72 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/server/XMLDecoder.as

@@ -0,0 +1,72 @@
+package com.xt.hb.server
+{
+	import com.xt.hb.events.DataConfigEvent;
+	
+	import flash.events.EventDispatcher;
+	
+	import mx.rpc.events.FaultEvent;
+	import mx.rpc.events.ResultEvent;
+	import mx.rpc.http.HTTPService;
+	
+	[Event(name="mapConfigLoad", type="com.xt.hb.events.DataConfigEvent")]
+	[Event(name="menuConfigLoad", type="com.xt.hb.events.DataConfigEvent")]
+	public class XMLDecoder extends EventDispatcher
+	{
+		public function XMLDecoder()
+		{			
+			mapConfigLoad(); 
+			menuConfigLoad();
+		}
+		
+		private var mapConfig:String = "com/xt/hb/cfg/MapConfig.xml";
+		private var menuConfig:String = "com/xt/hb/cfg/MenuConfig.xml";
+		
+		private function mapConfigLoad():void
+		{
+			var configService:HTTPService = new HTTPService();			
+			configService.url = mapConfig;
+			configService.resultFormat = "e4x";
+			configService.addEventListener(ResultEvent.RESULT, configResult);
+			configService.addEventListener(FaultEvent.FAULT, configFault);	
+			configService.send();
+		}
+		
+		private function configResult(event:ResultEvent):void
+		{						
+			var config:XML = event.result as XML;
+			dispatchEvent(new DataConfigEvent(DataConfigEvent.MAPCONFIG_LOAD, config));
+		}
+		
+		/**
+		 *  当主配置文件解析失败时 派发CONFIG_LOAD_ERROR事件
+		 */
+		private function configFault(event:FaultEvent):void
+		{			
+			this.dispatchEvent(new DataConfigEvent(DataConfigEvent.CONFIG_LOAD_ERROR, event.fault));
+		}
+		
+		private function menuConfigLoad():void
+		{
+			var configService:HTTPService = new HTTPService();			
+			configService.url = menuConfig;
+			configService.resultFormat = "e4x";
+			configService.addEventListener(ResultEvent.RESULT, menuConfigResult);
+			configService.addEventListener(FaultEvent.FAULT, menuConfigFault);	
+			configService.send();
+		}
+		
+		private function menuConfigResult(event:ResultEvent):void
+		{						
+			var config:XML = event.result as XML;
+			dispatchEvent(new DataConfigEvent(DataConfigEvent.MENUCONFIG_LOAD, config));
+		}
+		
+		/**
+		 *  当主配置文件解析失败时 派发CONFIG_LOAD_ERROR事件
+		 */
+		private function menuConfigFault(event:FaultEvent):void
+		{			
+			this.dispatchEvent(new DataConfigEvent(DataConfigEvent.CONFIG_LOAD_ERROR, event.fault));
+		}
+	}
+}

+ 88 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/tdt/MapOperateModel.mxml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
+		  xmlns:s="library://ns.adobe.com/flex/spark" 
+		  xmlns:mx="library://ns.adobe.com/flex/mx"
+		  creationComplete="initApp()">
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	<fx:Script>
+		<![CDATA[
+			import com.esri.ags.Map;
+			import com.xt.hb.ais.TuliModel;
+			import com.xt.hb.utils.CommonUtility;
+			
+			import mx.core.FlexGlobals;
+
+			
+			private var map:Map;
+			
+			private function initApp():void
+			{
+				map = map = FlexGlobals.topLevelApplication.getMap();
+			} 
+			//清除
+			protected function clearAll(event:MouseEvent):void
+			{
+				FlexGlobals.topLevelApplication.clearAllTempLayer();
+			}
+			private function btnClick(event:MouseEvent):void
+			{
+				if(!map)
+					map = FlexGlobals.topLevelApplication.getMap();
+				var uid:String = event.currentTarget.uid;
+				switch(uid)
+				{
+					case "pan":
+					{
+						break;
+					}
+					case "zoonIn":
+					{
+						map.zoomIn();
+						break;
+					}
+					case "zoomOut":
+					{
+						map.zoomOut();
+						break;
+					}
+					case "tuli":
+					{
+						var tuliModel:TuliModel = new TuliModel;
+						var width:int = FlexGlobals.topLevelApplication.stage.stageWidth;
+						var height:int = FlexGlobals.topLevelApplication.stage.stageHeight;
+						var x:Number = width/2-232;
+						var y:Number = height/2 - 144;
+						CommonUtility.showTitleWindow(tuliModel, false, x, y);
+						break;
+					}
+				}
+			}
+			
+			//图层控制
+			private function tckz(event:MouseEvent):void
+			{
+				FlexGlobals.topLevelApplication.showTCKZModel();
+			}
+		]]>
+	</fx:Script>
+	<s:SkinnableContainer id="scaleBar">
+		<s:layout>
+			<s:VerticalLayout gap="5" />
+		</s:layout> 
+		<s:SkinnableContainer > 
+			<s:HGroup gap="10" horizontalCenter="0" verticalCenter="0">
+				<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" toolTip="图层控制"  skinClass="com.skins.tdt.ButtonRectImgSkin"  accessibilityDescription="flexResources/map/tckz.png" click="tckz(event)"  visible="true"/>
+				<!--<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" uid="pan" toolTip="平移"  skinClass="com.skins.tdt.ButtonRectImgSkin" accessibilityDescription="flexResources/map/translation.png" click="btnClick(event)"/>-->
+				<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" uid="zoonIn" toolTip="拉框放大" skinClass="com.skins.tdt.ButtonRectImgSkin" accessibilityDescription="flexResources/map/zoomin.png" click="btnClick(event)"/>   
+				<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" uid="zoomOut" toolTip="拉框缩小" skinClass="com.skins.tdt.ButtonRectImgSkin" accessibilityDescription="flexResources/map/zoomout.png" click="btnClick(event)"/>
+				<!--
+				<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" toolTip="清除" skinClass="com.skins.tdt.ButtonRectImgSkin" accessibilityDescription="flexResources/map/clear1.png" click="clearAll(event)"/>
+				
+				<s:Button width="30" height="30" useHandCursor="true" buttonMode="true" uid="tuli" toolTip="图例" skinClass="com.skins.tdt.ButtonRectImgSkin" accessibilityDescription="flexResources/map/viewEntire.png" click="btnClick(event)"/>-->
+				
+				</s:HGroup>
+		</s:SkinnableContainer>
+	</s:SkinnableContainer>
+</s:Module>

+ 120 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/tdt/TianDiTuTiledMapServiceLayer.as

@@ -0,0 +1,120 @@
+package com.xt.hb.tdt
+{
+	import com.esri.ags.SpatialReference;
+	import com.esri.ags.geometry.Extent;
+	import com.esri.ags.geometry.MapPoint;
+	import com.esri.ags.layers.TiledMapServiceLayer;
+	import com.esri.ags.layers.supportClasses.LOD;
+	import com.esri.ags.layers.supportClasses.TileInfo;
+	
+	import flash.net.URLRequest;
+	
+	//import mx.controls.Alert;
+	
+	public class TianDiTuTiledMapServiceLayer extends TiledMapServiceLayer
+	{
+		private var _tileInfo:TileInfo;
+		private var _baseURL:String;
+		private var _baseURLs:String;
+		private var _initExtent:String;
+		private var _id:String;
+		private var _name:String;
+		private var _alpha:Number;
+		private var _visible:Boolean;
+		private var _showLevel:String;
+		
+		public function TianDiTuTiledMapServiceLayer()
+		{
+			super();
+			this._tileInfo = new TileInfo();
+			this._baseURLs = "";
+			this._initExtent = null;
+			this.buildTileInfo();
+			setLoaded(true);
+		}
+		
+		
+		public function set baseURL(baseurl:String):void
+		{
+			_baseURL = baseurl;
+		}
+		public function set baseURLs(baseurls:String):void
+		{
+			_baseURLs = baseurls;
+		}
+		
+		public function set showLevel(showlevel:String):void
+		{
+			_showLevel=showlevel;
+		}
+		override public function get fullExtent() : Extent
+		{
+			return new Extent(-180, -90, 180, 90, new SpatialReference(4490));
+		}
+		
+		public function set initExtent(initextent:String):void
+		{
+			this._initExtent = initextent;
+		}
+		override public function get spatialReference() : SpatialReference
+		{
+			return new SpatialReference(4490);
+		}
+		override public function get initialExtent() :Extent
+		{
+			if (this._initExtent == null){
+				return new Extent(-180, -90, 180, 90, new SpatialReference(4490));    
+			}
+			var coors:Array = this._initExtent.split(",");
+			return new Extent(Number(coors[0]), Number(coors[1]), Number(coors[2]) ,Number(coors[3]), new SpatialReference(4490));
+		}
+		override public function get tileInfo() : TileInfo
+		{
+			return this._tileInfo;
+		}
+		private function buildTileInfo() : void
+		{
+			this._tileInfo.height = 256;
+			this._tileInfo.width = 256;
+			this._tileInfo.origin = new MapPoint(-180, 90);
+			this._tileInfo.spatialReference = new SpatialReference(4490);
+			this._tileInfo.lods = new Array();
+			this._tileInfo.lods = [
+				new LOD(0, 0.7031250000000002, 295497593.05875003),
+				new LOD(1, 0.3515625000000001, 147748796.52937502),
+				new LOD(2, 0.17578125000000006, 73874398.26468751),
+				new LOD(3, 0.08789062500000003, 36937199.132343754),
+				new LOD(4, 0.043945312500000014, 18468599.566171877),
+				new LOD(5, 0.021972656250000007, 9234299.783085939),
+				new LOD(6, 0.010986328125000003, 4617149.891542969),
+				new LOD(7, 0.005493164062500002, 2308574.9457714846),
+				new LOD(8, 0.002746582031250001, 1154287.4728857423),
+				new LOD(9, 0.0013732910156250004, 577143.7364428712),
+				new LOD(10, 0.0006866455078125002, 288571.8682214356),
+				new LOD(11, 0.0003433227539062501, 144285.9341107178),
+				new LOD(12, 0.00017166137695312505, 72142.9670553589),
+				new LOD(13, 8.583068847656253e-005, 36071.48352767945),
+				new LOD(14, 4.2915344238281264e-005, 18035.741763839724),
+				new LOD(15, 2.1457672119140632e-005, 9017.870881919862), 
+				new LOD(16, 1.0728836059570316e-005, 4508.935440959931),				
+				new LOD(17, 5.364418029785158e-006, 2254.4677204799655),
+				new LOD(18, 2.682209014892579e-006, 1127.2338602399827),
+				new LOD(19, 1.3411045074462895e-006, 563.6169301199914)
+			];
+		}
+		override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest
+		{
+			var tempLevel:Number=Number(_showLevel);
+			var urlRequest:String="";
+			if(level<tempLevel)
+			{
+				var rd:Number = Math.ceil(Math.random() * 7);
+				
+				urlRequest = "http://t" + rd + ".tianditu.com/"+_baseURLs+"_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER="+ _baseURLs+"&STYLE=default&TILEMATRIXSET=c&TILEMATRIX="+ String((level + 1)) + "&TILEROW=" + String(row) + "&TILECOL=" + String(col) + "&FORMAT=tiles" ;
+			}
+			return new URLRequest(urlRequest);
+			
+		}
+	}
+	
+}

+ 307 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/DateTime.mxml

@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
+		 xmlns:s="library://ns.adobe.com/flex/spark" 
+		 xmlns:mx="library://ns.adobe.com/flex/mx"
+		 creationComplete="creationCompleteHandler(event)"
+		 width="100%" height="23" xmlns:ui="com.xt.hb.views.ui.*" xmlns:ui1="com.xt.hb.ui.*" >
+	<fx:Declarations>
+		<mx:DateFormatter id="dateInputFormator" formatString="YYYY-MM-DD JJ:NN" />
+	</fx:Declarations>
+	<s:HGroup id="dt" gap="0" verticalAlign="middle" width="100%" height="100%">
+		<ui1:QTextInput id="returnTime" width="100%" editable="{initeditable}" text="{initvalue}" skinClass="com.skins.tdt.DateTimeInputSkin"/>
+		<s:Button width="22" height="22" click="open(event)" icon="@Embed(source='mx/controls/DateChooser.png')"/>
+		<s:Spacer width="5"/>
+		<s:Button width="22" height="22" click="button1_clickHandler(event)" icon="@Embed(source='flexResources/yjpt/list/iconpng.png')" toolTip="清空"/>
+	</s:HGroup>
+	<fx:Script>
+		<![CDATA[
+			import mx.binding.utils.BindingUtils;
+			import mx.containers.HBox;
+			import mx.controls.Button;
+			import mx.controls.Label;
+			import mx.controls.NumericStepper;
+			import mx.controls.Text;
+			import mx.controls.TileList;
+			import mx.core.IFlexDisplayObject;
+			import mx.events.CloseEvent;
+			import mx.events.FlexEvent;
+			import mx.events.ListEvent;
+			import mx.events.NumericStepperEvent;
+			import mx.managers.PopUpManager;
+			
+			[Bindable]
+			private var initvalue: String;
+			[Bindable]
+			private var initeditable:Boolean;
+//			[Bindable]
+//			public var dt_percentWidth:Number;
+			
+			public var resultTime:Text;
+			public var hasTime:Boolean=false;
+			
+			private var m_width:Number = 168;
+			
+			private var pop:Object;
+//			private var isOpen:Boolean = false;
+			private var nowTime:Date;
+			
+			protected function creationCompleteHandler(event:FlexEvent):void
+			{
+//				BindingUtils.bindProperty(this.dt,"percentWidth",this,"dt_percentWidth");
+			}
+			
+//			override public function set width(value:Number):void{
+//				dt.width = value;
+//			}
+		
+//			override public function set percentWidth(value:Number):void{
+//				dt_percentWidth = value;
+//			}
+		
+			private function open(event:MouseEvent):void{
+				resultTime = new Text();
+//				if(!isOpen){
+				if(pop==null||!systemManager.contains(pop as DisplayObject)){
+					if(nowTime==null){
+						nowTime=new Date;
+					}
+					pop = PopUpManager.createPopUp(this, mx.containers.TitleWindow, false);
+					pop.showCloseButton = true;
+					pop.addEventListener(CloseEvent.CLOSE,closeHandler);
+					pop.addEventListener(MouseEvent.ROLL_OUT,closeHandler);
+					pop.move(event.stageX+event.target.width-event.localX-175,event.stageY-event.localY+25);
+					//pop.title = nowTime.fullYear.toString() + " 年 " + (nowTime.month+1) + " 月";
+					pop.title = "时间选择";
+					pop.setStyle("fontSize",12);
+					
+					
+					var yearChangeHandler:Function = function(evt:NumericStepperEvent):void{
+						nowTime.setFullYear(evt.value,nowTime.month,nowTime.date);
+						if(systemManager.contains(pop as DisplayObject)){
+							PopUpManager.removePopUp(pop as IFlexDisplayObject);
+							open(event);
+						}
+//						isOpen = false;
+					}
+					
+					var monthChangeHandler:Function = function(evt:NumericStepperEvent):void{
+						nowTime.setFullYear(nowTime.fullYear,evt.value-1,nowTime.date);
+						if(systemManager.contains(pop as DisplayObject)){
+							PopUpManager.removePopUp(pop as IFlexDisplayObject);
+							open(event);
+						}
+//						isOpen = false;
+					}
+					
+					var minuteChangeHandler:Function = function(evt:NumericStepperEvent):void{
+						nowTime.setHours(nowTime.hours,evt.value,nowTime.seconds,nowTime.milliseconds);
+					}
+					
+					var hourChangeHandler:Function = function(evt:NumericStepperEvent):void{
+						nowTime.setHours(evt.value,nowTime.minutes,nowTime.seconds,nowTime.milliseconds);
+					}
+					
+					var testHandler:Function = function(event:ListEvent):void{
+						nowTime.date = new Number(event.target.selectedItems[0]);
+						resultTime.text = nowTime.fullYear + "-" + (nowTime.month+1) + "-" 
+							+ event.target.selectedItems;
+						if(hasTime)
+							resultTime.text = resultTime.text
+							+ " " +hour.value
+							+ ":" + minute.value + ":" +nowTime.seconds;
+//						returnTime.text =  resultTime.text;
+						returnTime.text = dateInputFormator.format(resultTime.text);
+					}
+					
+					
+					var hBoxTop:HBox = new HBox();
+					hBoxTop.width = m_width;
+					var year:NumericStepper = new NumericStepper();
+					year.setStyle("fontSize",10);
+					year.stepSize = 1;
+					year.minimum = 1900;
+					year.maximum = 2100;
+					year.width = 60;
+					year.height = 20;
+					year.value = nowTime.fullYear;
+					year.addEventListener(NumericStepperEvent.CHANGE,yearChangeHandler);
+					
+					var y_label:Label = new Label();
+					y_label.text = "年";
+					y_label.setStyle("textAlign","center");
+					y_label.width = 15;
+					
+					var month:NumericStepper = new NumericStepper();
+					month.setStyle("fontSize",10);
+					month.stepSize = 1;
+					month.minimum = 0;
+					month.maximum = 13;
+					month.width = 50;
+					month.height = 20;
+					month.value = nowTime.month+1;
+					month.addEventListener(NumericStepperEvent.CHANGE,monthChangeHandler);
+					
+					var m_label:Label = new Label();
+					m_label.text = "月";
+					m_label.setStyle("textAlign","center");
+					m_label.width = 15;
+					
+					hBoxTop.addChild(year);
+					hBoxTop.addChild(y_label);
+					hBoxTop.addChild(month);
+					hBoxTop.addChild(m_label);
+					
+					pop.addChild(hBoxTop);
+					
+					var hBox:HBox = new HBox();
+					hBox.width = m_width;
+					hBox.setStyle("horizontalGap",0);
+					var weekName:Array = new Array("日","一","二","三","四","五","六");
+					for(var index:Number=0; index<weekName.length; index++){
+						var lab:Label = new Label();
+						lab.text = weekName[index];
+						lab.width = 24;
+						lab.setStyle("textAlign","center");
+						lab.setStyle("fontSize",12);
+						if(weekName[index]=="日"){
+							lab.setStyle("color","red");
+						}
+						hBox.addChild(lab);
+					}
+					pop.addChild(hBox);
+					
+					var tmpDate:Date = new Date(nowTime.fullYear,nowTime.month+1,0);
+					var sumDay:Number = tmpDate.date ;
+					
+					var firstDay:Date = new Date(nowTime.fullYear,nowTime.month,1);
+					var wday:Number = firstDay.day ;
+					
+					var todayNum:Number = nowTime.date;
+					
+					var rowNum:uint = Math.ceil((sumDay+wday)/7);
+					//Alert.show(Math.round((sumDay+day)/7).toString());
+					
+					var tileList:TileList = new TileList();
+					tileList.setStyle("fontSize",10);
+					tileList.columnCount=7;
+					tileList.rowCount=rowNum;
+					tileList.width = 7*25;
+					tileList.height = rowNum * 25;
+					
+					var myDP:Array = new Array();
+					for(var i:Number=0; i<sumDay; i++){
+						myDP.push((i+1).toString());
+					}
+					for(i=0; i<wday; i++){
+						myDP.unshift(null);
+					}
+					tileList.dataProvider = myDP;
+					tileList.selectedIndex = wday+todayNum-1; 
+					tileList.addEventListener(ListEvent.ITEM_CLICK,testHandler);
+					pop.addChild(tileList);
+					
+					if(hasTime)
+					{
+						var hBoxBottom:HBox = new HBox();
+						hBoxBottom.width = m_width;
+						hBoxBottom.setStyle("horizontalAlign","right");
+						
+						var hour:NumericStepper = new NumericStepper();
+						hour.setStyle("fontSize",10);
+						hour.stepSize = 1;
+						hour.minimum = 0;
+						hour.maximum = 23;
+						hour.width = 50;
+						hour.height = 20;
+						hour.value = new Date().hours;
+						hour.setStyle("paddingRight",0);
+						hour.addEventListener(NumericStepperEvent.CHANGE,hourChangeHandler);
+						var h_label:Label = new Label();
+						h_label.text = "时";
+						h_label.setStyle("textAlign","center");
+						h_label.width = 15;
+						
+						var minute:NumericStepper = new NumericStepper();
+						minute.setStyle("fontSize",10);
+						minute.stepSize = 1;
+						minute.minimum = 0;
+						minute.maximum = 59;
+						minute.width = 50;
+						minute.height = 20;
+						minute.value = new Date().minutes;
+						minute.addEventListener(NumericStepperEvent.CHANGE,minuteChangeHandler);
+						var mi_label:Label = new Label();
+						mi_label.text = "分";
+						mi_label.setStyle("textAlign","center");
+						mi_label.width = 15;
+						
+						//					var subBtn:Button = new Button();
+						//					subBtn.width = 40;
+						//					subBtn.label = "确定";
+						hBoxBottom.addChild(hour);
+						hBoxBottom.addChild(h_label);
+						hBoxBottom.addChild(minute);
+						hBoxBottom.addChild(mi_label);
+						//					hBoxBottom.addChild(subBtn);
+						pop.addChild(hBoxBottom);
+					}
+					
+//					isOpen = true;
+				}else{
+					if(systemManager.contains(pop as DisplayObject)){
+						PopUpManager.removePopUp(pop as IFlexDisplayObject);
+					}
+//					isOpen = false;
+				}
+			}
+			private function closeHandler(event:Event):void{
+				if(systemManager.contains(pop as DisplayObject)){
+					PopUpManager.removePopUp(event.target as IFlexDisplayObject);
+				}
+//				isOpen = false;
+			}
+			
+			public function set text(str:String):void{
+				initvalue = str ;
+			}
+			public function get text():String{
+				return returnTime.text ;
+			}
+			
+			public function set dateTime(str:Date):void{
+				if(str==null)
+				{
+					nowTime = new Date();
+					returnTime.text = "";
+					return;
+				}
+				nowTime = str;
+				var strDate:String = nowTime.fullYear + "-" + (nowTime.month+1) + "-" + nowTime.date ;
+				if(hasTime)
+					strDate = strDate
+					+ " " + nowTime.hours + ":" + nowTime.minutes;
+//				returnTime.text = strDate;
+				returnTime.text = dateInputFormator.format(strDate);
+				
+			}
+			public function get dateTime():Date{
+				if(returnTime.text!=""&&returnTime.text!=null&&returnTime.text.length>0)
+					return nowTime ;
+				return null;
+			}
+			
+			public function set editable(str:Boolean):void{
+				initeditable = str;
+			}
+			public function get editable(): Boolean{
+				return returnTime.editable;
+			}
+			
+			protected function button1_clickHandler(event:MouseEvent):void
+			{
+				returnTime.text="";
+			}
+			
+		]]>
+	</fx:Script>
+</s:Group>

+ 541 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/PageDataGridCtrl.mxml

@@ -0,0 +1,541 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
+		 backgroundColor="white"
+		 backgroundAlpha="0"
+		 fontSize="12"
+		 paddingTop="2" horizontalAlign="center">
+	<mx:Script>
+		<![CDATA[
+			import com.xt.hb.utils.ConstUtil;
+			
+			import mx.collections.ArrayCollection;
+			import mx.controls.Alert;
+			import mx.controls.DataGrid;
+			import mx.controls.dataGridClasses.DataGridColumn;
+			import mx.events.ItemClickEvent;
+			import com.xt.hb.events.PageEvent;
+			
+			
+			
+			
+			//首页图片不可用标志
+			[Bindable]
+			[Embed(source='/flexResources/Perpage/firstPage.png')]
+			private var _icon_first_disabled:Class;
+			private var firstPage:uint;
+			//上一页图片不可用标志             
+			[Bindable]
+			[Embed(source='/flexResources/Perpage/prePage.png')]
+			private var _icon_previous_disabled:Class;
+			private var prePage:uint;
+			//下一页图片不可用标志       
+			[Bindable]
+			[Embed(source='/flexResources/Perpage/nextPage.png')]
+			private var _icon_next_disabled:Class;
+
+			//末页图片不可用标志 
+			[Bindable]
+			[Embed(source='/flexResources/Perpage/lastPage.png')]
+			private var _icon_last_disabled:Class;
+
+
+			[Embed(source='/flexResources/Perpage/firstEnable.png')]
+			private var _icon_first_enable:Class;
+
+			[Embed(source='/flexResources/Perpage/previousEnable.png')]
+			private var _icon_previous_enable:Class;
+
+			[Embed(source='/flexResources/Perpage/nextEnable.png')]
+			private var _icon_next_enable:Class;
+
+			[Embed(source='/flexResources/Perpage/lastEnable.png')]
+			private var _icon_last_enable:Class;
+
+			private var nextPage:uint;
+			private var lastPage:uint;
+
+			//页码条数据,绑定   
+			[Bindable]
+			private var nav:ArrayCollection=new ArrayCollection();
+
+			//默认起始页码,第1页   
+			private var currentPageIndex:uint=0;
+
+			//是否已初始化   
+			private var isInit:Boolean=true;
+
+			//总页数   
+			private var _totalPages:uint=0;
+
+			//是否重绘页码条,当使用服务端分页时使用   
+			private var isCreateNavBar:Boolean=true;
+
+			//显示到Grid的数据   
+			[Bindable]
+			public var viewData:ArrayCollection=new ArrayCollection();
+
+			//所有的数据   
+			public var orgData:ArrayCollection=new ArrayCollection();
+
+			//每页记录数下拉框   
+			public var pageSizeDropDownListData:ArrayCollection=new ArrayCollection();
+
+			// 每页记录数 
+			[Bindable]
+			private var _pageSize:uint = ConstUtil.DATAGRIDCTRL_DATA_NUMBER;
+
+			// 页码条上显示页码的个数   
+			public var navSize:uint=1;
+
+			//记录总数,调用服务端发页时使用   
+			public var totalRecord:int=0;
+
+			//分页函数   
+			public var pagingFunction:Function=null;
+			
+			//是否为真分页
+			public var isServerSidePage:Boolean = false;
+
+			//分页条对应的Grid  
+			[Bindable]
+			public var dataGrid:DataGrid=null;
+			//过滤的字段数组
+			[Bindable]
+			public var filterAttr:Array=[];
+			//跳转的页码  
+			private var sliderPager:Array=[];
+			[Bindable]
+			private var _currentPage:int=0;
+
+			public function set currentPage(value:int):void
+			{
+				this._currentPage=value;
+			}
+
+			public function set totalPages(value:int):void
+			{
+				this._totalPages=value;
+			}
+			
+			/**
+			 * add
+			 * */
+			private function sendEvent():void
+			{
+				if(isServerSidePage) {
+					this.dispatchEvent(new PageEvent(PageEvent.PAGECHANGE,_currentPage));
+				}
+			}
+			
+			public function dataBind(isServerSide:Boolean=false, bindType:int=0):void
+			{
+				isServerSidePage = isServerSide;
+				currentPageIndex=0;
+				if (isInit)
+				{
+					if (pageSizeDropDownListData == null)
+					{
+						pageSizeDropDownListData=new ArrayCollection();
+						pageSizeDropDownListData.addItem({label: 5, data: 5});
+						pageSizeDropDownListData.addItem({label: 10, data: 10});
+						pageSizeDropDownListData.addItem({label: 20, data: 20});
+						pageSizeDropDownListData.addItem({label: 30, data: 30});
+					}
+					isInit=false;
+				}
+
+				refreshDataProvider(currentPageIndex, isCreateNavBar, _pageSize, isServerSide, bindType);
+				sliderPager=new Array();
+				for (var j:int=0; j < _totalPages; j++)
+				{
+					sliderPager.push(j + 1);
+				}
+				cmb_popPageSize.dataProvider=sliderPager;
+				if (cmb_popPageSize.dropdown)
+				{
+					cmb_popPageSize.dropdown.dataProvider=sliderPager;
+				}
+				if(isInit)
+					initIcon();
+			}
+
+			public function clear():void
+			{
+				totalPagesLabel.text="0/0页 共0条";
+				cmb_popPageSize.dataProvider=null;
+			}
+
+			/**
+			 * 构建页码条
+			 * pages:总页数
+			 * pageIndex:当前页(注意,从0开始)
+			 *
+			 */
+			private function createNavBar(pageIndex:uint=0):void
+			{
+				nav.removeAll();
+				if (pageIndex >= 1)
+				{
+					firstPage=0;
+					this.btn_firstNav.enabled=true;
+					var intLFive:int=pageIndex - navSize; // calculate start of last 5;   
+					prePage=intLFive;
+					this.btn_preNav.enabled=true;
+				}
+				else
+				{
+					btn_firstNav.enabled=false;
+					btn_preNav.enabled=false;
+				}
+				//页码条           
+				for (var x:uint=0; x < navSize; x++)
+				{
+					var pg:uint=x + pageIndex;
+					nav.addItem({label: pg + 1, data: pg});
+					var pgg:uint=pg + 1;
+					if (pgg >= _totalPages)
+					{
+						//搜索到最后一个页码,停止添加到navbar   
+						x=navSize;
+					}
+				}
+				//计算最后一组页码条中第一个页码的页码编号   
+				var lastpage:Number=0;
+				for (var y:uint=navSize; y <= _totalPages - 1; y=y + navSize)
+				{
+					//lets calculate the lastpage button   
+					if (y + 5 > navSize)
+					{
+						lastpage=y;
+					}
+				}
+				//向后图标   
+				if (pg < _totalPages - 1)
+				{
+					nextPage=pg + 1;
+					this.btn_nextNav.enabled=true;
+					lastPage=lastpage;
+					this.btn_lastNav.enabled=true;
+				}
+				else
+				{
+					this.btn_nextNav.enabled=false;
+					this.btn_lastNav.enabled=false;
+				}
+			}
+
+			/**
+			 * 页码按钮按下(页码条点击)
+			 */
+			private function navigatePage(event:ItemClickEvent):void
+			{
+				refreshDataProvider(event.item.data, false);
+			}
+
+			/**
+			 * 页码按钮按下,first,pre,next,last
+			 */
+			private function navigateButtonClick(pageString:String):void
+			{
+				var pageIndex:uint=0;
+				switch (pageString)
+				{
+					case "firstPage":
+					{
+						pageIndex=firstPage;
+						this.btn_firstNav.setStyle("icon", _icon_first_disabled);
+						this.btn_preNav.setStyle("icon", _icon_previous_disabled);
+						if (_totalPages > 1)
+						{
+							this.btn_lastNav.setStyle("icon", _icon_last_enable);
+							this.btn_nextNav.setStyle("icon", _icon_next_enable);
+						}
+						//SiteContainer.dispatchEvent(new AppEvent("slider_reGetData"));
+						break;
+					}
+					case "prePage":
+					{
+						_currentPage=this._currentPage - 1;
+						if (_currentPage == 1)
+						{
+							this.btn_firstNav.setStyle("icon", _icon_first_disabled);
+							this.btn_preNav.setStyle("icon", _icon_previous_disabled);
+						}
+						if (_currentPage == this._totalPages - 1)
+						{
+							this.btn_lastNav.setStyle("icon", _icon_last_enable);
+							this.btn_nextNav.setStyle("icon", _icon_next_enable);
+						}
+						pageIndex=prePage;
+						//SiteContainer.dispatchEvent(new AppEvent("slider_reGetData"));
+						break;
+					}
+					case "nextPage":
+					{
+						_currentPage=_currentPage + 1;
+						if (_currentPage == _totalPages)
+						{
+							this.btn_lastNav.setStyle("icon", _icon_last_disabled);
+							this.btn_nextNav.setStyle("icon", _icon_next_disabled);
+							this.btn_firstNav.setStyle("icon", _icon_first_enable);
+							this.btn_preNav.setStyle("icon", _icon_previous_enable);
+						}
+						else
+						{
+							this.btn_lastNav.setStyle("icon", _icon_last_enable);
+							this.btn_nextNav.setStyle("icon", _icon_next_enable);
+							this.btn_firstNav.setStyle("icon", _icon_first_enable);
+							this.btn_preNav.setStyle("icon", _icon_previous_enable);
+						}
+						pageIndex=nextPage;
+						//	SiteContainer.dispatchEvent(new AppEvent("slider_reGetData"));
+						break;
+					}
+
+					default: //尾页
+					{
+						_currentPage=_totalPages;
+						this.btn_lastNav.setStyle("icon", _icon_last_disabled);
+						this.btn_nextNav.setStyle("icon", _icon_next_disabled);
+						if (_totalPages > 1)
+						{
+							this.btn_firstNav.setStyle("icon", _icon_first_enable);
+							this.btn_preNav.setStyle("icon", _icon_previous_enable);
+						}
+						pageIndex=lastPage;
+							//SiteContainer.dispatchEvent(new AppEvent("slider_reGetData"));
+					}
+				}
+				if(!isServerSidePage)
+				{
+					refreshDataProvider(pageIndex);
+				}else
+				{
+					refreshDataProvider(pageIndex,true,_pageSize,isServerSidePage);
+					sendEvent();
+				}
+
+			}
+
+			/**
+			 * 更新数据源,更新表格显示数据
+			 */
+			private function refreshDataProvider(pageIndex:uint, isCreateNavBar:Boolean=true, _pageSize:uint=0, resultReturn:Boolean=false, bindType:int=0):void
+			{
+				var totalCount:String="";
+				if (dataGrid == null)
+					return;
+				currentPageIndex=pageIndex;
+				if (_pageSize == 0)
+				{
+					_pageSize=this._pageSize;
+				}
+				else
+				{
+					this._pageSize=_pageSize;
+					if (!resultReturn && _pageSize > 0 && orgData != null)
+
+						_totalPages=Math.ceil(orgData.length / _pageSize);
+
+				}
+				if (!resultReturn)
+				{
+					if (this.pagingFunction != null)
+					{
+						pagingFunction(pageIndex, _pageSize);
+						this.isCreateNavBar=isCreateNavBar;
+					}
+					else if (orgData != null)
+					{
+						viewData=new ArrayCollection(orgData.source.slice((pageIndex * _pageSize), (pageIndex * _pageSize) + _pageSize));
+						dataGrid.dataProvider=viewData;
+						filterAttributes(dataGrid);
+						if (this._totalPages > 0)
+						{
+							_currentPage=pageIndex + 1;
+						}
+						else
+							_currentPage=0;
+						totalCount=orgData.length.toString() + '条';
+					}
+				}
+				else
+				{
+					dataGrid.dataProvider=orgData;
+					filterAttributes(dataGrid);
+					_currentPage=pageIndex + 1;
+					_totalPages=Math.ceil(totalRecord / _pageSize);
+					totalCount=totalRecord.toString() + '条';
+				}
+				if (this._totalPages > 0)
+					_currentPage=pageIndex + 1;
+				else
+					_currentPage=0;
+				totalPagesLabel.text=_currentPage + '/' + _totalPages + "页 共" + totalCount;
+				this.cmb_popPageSize.selectedItem=_currentPage;
+				if (isCreateNavBar)
+					createNavBar(pageIndex);
+
+			}
+
+			/**
+			*  增加字段过滤不显示
+			*/
+			private function filterAttributes(dataGrids:DataGrid):void
+			{
+				var columns:Array=dataGrids.columns;
+				for (var m:int=0; m < filterAttr.length; m++)
+				{
+					for (var j:int=0; j < columns.length; j++)
+					{
+						var dtColumn:String=columns[j].dataField;
+						var column:DataGridColumn=columns[j] as DataGridColumn;
+						if (dtColumn == filterAttr[m]) //隐藏不必要显示的字段
+						{
+							column.visible=false;
+							break;
+						}
+					}
+				}
+			}
+
+			/**
+			 * 每页记录数变更(下拉框选择)
+			 */
+			private function pageSizeSelectChange():void
+			{
+				var tmpPage:int=new int(cmb_popPageSize.selectedItem);
+				var pageIndex:int=tmpPage - 1;
+				if (tmpPage > this._totalPages)
+				{
+					Alert.yesLabel="确定";
+					Alert.show("页码超出范围", "提示", Alert.YES, this);
+					return;
+				}
+				this._currentPage=tmpPage;
+				if (_currentPage > 1)
+				{
+					this.btn_firstNav.setStyle("icon", _icon_first_enable);
+					this.btn_preNav.setStyle("icon", _icon_previous_enable);
+				}
+				if (_currentPage < _totalPages)
+				{
+					this.btn_lastNav.setStyle("icon", _icon_last_enable);
+					this.btn_nextNav.setStyle("icon", _icon_next_enable);
+				}
+				if (pageIndex >= 0 && pageIndex < _totalPages && pageIndex != currentPageIndex)
+				{
+					if(!isServerSidePage)
+					{
+						refreshDataProvider(pageIndex);
+					}
+					else
+					{
+						refreshDataProvider(pageIndex,true,_pageSize,isServerSidePage);
+					}
+				}
+				if (tmpPage == this._totalPages)
+				{
+					this.btn_lastNav.setStyle("icon", _icon_last_disabled);
+					this.btn_nextNav.setStyle("icon", _icon_next_disabled);
+					if (_totalPages > 1)
+					{
+						this.btn_firstNav.setStyle("icon", _icon_first_enable);
+						this.btn_preNav.setStyle("icon", _icon_previous_enable);
+					}
+
+				}
+				if (tmpPage == 1)
+				{
+					this.btn_firstNav.setStyle("icon", _icon_first_disabled);
+					this.btn_preNav.setStyle("icon", _icon_previous_disabled);
+					if (_totalPages > 1)
+					{
+						this.btn_lastNav.setStyle("icon", _icon_last_enable);
+						this.btn_nextNav.setStyle("icon", _icon_next_enable);
+					}
+					else
+					{
+						this.btn_lastNav.setStyle("icon", _icon_last_disabled);
+						this.btn_nextNav.setStyle("icon", _icon_next_disabled);
+					}
+				}
+				if(isServerSidePage)
+					sendEvent();
+				//SiteContainer.dispatchEvent(new AppEvent("slider_reGetData"));
+			}
+
+			private function initIcon():void
+			{
+				if (this._totalPages > 0)
+				{
+					if (this._totalPages == 1)
+					{
+						this.btn_lastNav.setStyle("icon", _icon_last_disabled);
+						this.btn_nextNav.setStyle("icon", _icon_next_disabled);
+					}
+					else
+					{
+						this.btn_lastNav.setStyle("icon", _icon_last_enable);
+						this.btn_nextNav.setStyle("icon", _icon_next_enable);
+					}
+				}
+				if (this.orgData.length == 0)
+				{
+					totalPagesLabel.text="0/0页 共0条";
+					cmb_popPageSize.dataProvider=null;
+				}
+			}
+		]]>
+	</mx:Script>
+
+	<mx:Label id="totalPagesLabel"
+			  text="0/0页 共0条"
+			  paddingTop="0"/>
+	<mx:Button id="btn_firstNav" buttonMode="true" useHandCursor="true"
+			   icon="{_icon_first_disabled}"
+			   width="18"
+			   height="18"
+			   click=" navigateButtonClick('firstPage');"
+			   enabled="{this._currentPage!=1}"
+			   cornerRadius="10"/>
+	<mx:Button id="btn_preNav" buttonMode="true" useHandCursor="true"
+			   icon="{_icon_previous_disabled}"
+			   width="18"
+			   height="18"
+			   click="navigateButtonClick('prePage');"
+			   enabled="{this._currentPage>1}"
+			   cornerRadius="10"/>
+	<mx:Label text="转至:"
+			  width="36"
+			  paddingTop="0"/>
+	<mx:ComboBox id="cmb_popPageSize"
+				 keyDown="pageSizeSelectChange()"
+				 width="55"
+				 editable="false"
+				 paddingLeft="0"
+				 fontWeight="normal"
+				 enter="pageSizeSelectChange()"
+				 change="pageSizeSelectChange()"
+				 close="pageSizeSelectChange()"
+				 height="21"
+				 />
+	<mx:Label text="页"
+			  width="20"
+			  paddingTop="0"/>
+	<mx:Button id="btn_nextNav" buttonMode="true" useHandCursor="true"
+			   icon="{_icon_next_disabled}"
+			   width="18"
+			   height="18"
+			   click="navigateButtonClick('nextPage');"
+			   enabled="{_totalPages &gt; _currentPage}"
+			   cornerRadius="10"/>
+	<mx:Button id="btn_lastNav" buttonMode="true" useHandCursor="true"
+			   icon="{_icon_last_disabled}"
+			   width="18"
+			   height="18"
+			   click="navigateButtonClick('lastPage');"
+			   enabled="{_currentPage!=this._totalPages}"
+			   cornerRadius="10"/>
+
+</mx:HBox>

+ 17 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/QTextInput.as

@@ -0,0 +1,17 @@
+package com.xt.hb.ui
+{
+	import mx.controls.Alert;
+	
+	public class QTextInput extends TextInput
+	{
+		public var isNumber:Boolean;
+		public function QTextInput()
+		{
+			super();
+			this.height=28;
+			this.width=250;
+			this.setStyle("textAlign","left");
+			this.setStyle("borderColor","#d2d2d2");
+		}
+	}
+}

+ 42 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/TextInput.as

@@ -0,0 +1,42 @@
+package com.xt.hb.ui
+{
+	import com.xt.hb.views.TypeBase;
+	
+	import mx.events.FlexEvent;
+	
+	import com.skins.tdt.TextInputSkin;
+	
+	import spark.components.TextInput;
+	
+	public class TextInput extends spark.components.TextInput
+	{
+		public function TextInput()
+		{
+			super();
+			addEventListener(FlexEvent.CREATION_COMPLETE,creationComplete);
+			setStyle("skinClass",TextInputSkin);
+		}
+		
+		/********
+		 * type
+		 */
+		[Inspectable(category="General", enumeration="en,cn,int,double,email", defaultValue="cn")]
+		public var type:String;
+		
+		public function creationComplete(e:FlexEvent):void{
+			if (TypeBase.isNumberType(type))
+			{
+				super.setStyle("textAlign", "right");
+				if (type == TypeBase.DOUBLE)
+					super.restrict=TypeBase.NUM_RESTRICT;
+				if (type == TypeBase.INT)
+					super.restrict=TypeBase.INT_RESTRICT;
+			}
+			else if (type == TypeBase.EN)
+				super.restrict=TypeBase.EN_RESTRICT;
+			else if (type == TypeBase.EMAIL)
+				super.restrict=TypeBase.EMAIL_RESTRICT;
+		}
+		
+	}
+}

+ 333 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeItemIconRenderer.as

@@ -0,0 +1,333 @@
+package com.xt.hb.ui
+{
+	import com.xt.hb.utils.GisUtils;
+	import com.xt.hb.utils.GlobalData;
+	
+	import flash.display.BitmapData;
+	import flash.display.Graphics;
+	import flash.events.Event;
+	import flash.events.MouseEvent;
+	import flash.net.URLRequest;
+	import flash.net.navigateToURL;
+	
+	import mx.collections.ICollectionView;
+	import mx.collections.IList;
+	import mx.controls.Tree;
+	import mx.controls.treeClasses.ITreeDataDescriptor;
+	import mx.controls.treeClasses.TreeItemRenderer;
+	import mx.controls.treeClasses.TreeListData;
+	import mx.events.FlexEvent;
+	
+	import spark.components.Image;
+	
+	
+	/** 
+	 * Alpha value for the Tree lines. 
+	 * @default 1 
+	 */ 
+	[Style(name="lineAlpha", type="Number", format="Length", inherit="no")] 
+	
+	/** 
+	 * Color of the Tree lines. 
+	 * @default 0x808080 
+	 */ 
+	[Style(name="lineColor", type="uint", format="Color", inherit="no")] 
+	
+	/** 
+	 * Thickness value for the Tree lines. 
+	 * @default 1 
+	 */ 
+	[Style(name="lineThickness", type="Number", format="Length", inherit="no")] 
+	
+	/** 
+	 * The Tree line style - none, dotted (default), or solid. 
+	 * @default "dotted" 
+	 */ 
+	[Style(name="lineStyle", type="String", enumeration="solid", inherit="no")] 
+	
+	/** 
+	 * Extends TreeItemRenderer to draw the dotted lines of the tree. 
+	 * It supports 3 line styles - dotted (default), solid, or none. 
+	 * And the tree line color, alpha, and thickness values are configurable styles too. 
+	 * 
+	 * <pre> 
+	 * <ui:TreeItemLinesRenderer 
+	 * <b>Styles</b> 
+	 * lineAlpha="1" 
+	 * lineColor="#808080" 
+	 * lineThickness="1" 
+	 * lineStyle="dotted" 
+	 * > 
+	 * ... 
+	 * <i>child tags</i> 
+	 * ... 
+	 * </ui:TreeItemLinesRenderer> 
+	 * </pre> 
+	 * 
+	 * @author Chris Callendar 
+	 * @date April 20th, 2009 
+	 */ 
+	public class TreeItemIconRenderer extends TreeItemRenderer 
+	{ 
+		
+		public static const DOTTED:String = "dotted"; // default 
+		public static const SOLID:String = "solid"; 
+		public static const NONE:String = "none"; 
+		
+		
+		public function TreeItemIconRenderer() { 
+			super(); 
+			this.addEventListener(FlexEvent.SHOW,refreshNode);
+		} 
+		
+		protected var img:spark.components.Image;
+		
+		/**
+		 * 构建CheckBox
+		 */  
+		override protected function createChildren():void
+		{
+			super.createChildren();
+			img = new spark.components.Image();
+//			img.source = "flexResources/map/sxt.png";
+//			img.width=18;
+//			img.height=22;
+			addChild( img );
+		}
+		
+		/**
+		 * 点击checkbox时,更新dataProvider
+		 * @param event
+		 */
+		protected function changeHandler(item:Object):void
+		{
+			var id:String = item.id;
+			var url:String = GlobalData.spjkUrl + id;
+			navigateToURL(new URLRequest(url),"_blank");
+		}
+		
+		/**
+		 * 重置itemRenderer的宽度
+		 */  
+		override protected function measure():void
+		{
+			super.measure();
+			measuredWidth += img.getExplicitOrMeasuredWidth();
+		} 
+		//显示刷新
+		private function refreshNode(e:Event):void{
+			var tree:Tree = (owner as Tree); 
+			if(tree){
+				tree.invalidateList();
+			}
+		}
+		override public function set data(value:Object):void { 
+			super.data = value; 
+		} 
+		
+		override protected function updateDisplayList(w:Number, h:Number):void { 
+			super.updateDisplayList(w, h); 
+			var startx:Number = data ? TreeListData( listData ).indent : 0;
+			if ((w > 0) && (h > 0)) { 
+				// go up the hierarchy, drawing the vertical dotted lines for each node 
+				var tree:Tree = (owner as Tree); 
+				var desc:ITreeDataDescriptor = tree.dataDescriptor; 
+				var currentNode:Object = data; 
+				var parentNode:Object = tree.getParentItem(currentNode); 
+				// the level is zero at this node, then increases as we go up the tree 
+				var levelsUp:int = 0; 
+				
+				var lineStyle:String = getStyle("solid"); 
+				var lineColor:uint = getColorStyle("lineColor", 0x808080); 
+				var lineAlpha:Number = getNumberStyle("lineAlpha", 1); 
+				var lineThickness:Number = getNumberStyle("lineThickness", 1); 
+				var indentation:Number = tree.getStyle("indentation"); 
+				
+				// move the icon and label over to make room for the lines (less for root nodes) 
+				var shift:int = (parentNode == null ? 2 : 6) + lineThickness; 
+				if (icon) { 
+					icon.move(icon.x + shift, icon.y); 
+				}
+				if(data.attr == "1") {
+					img.width=18;
+					img.height=22;
+					if(data.online == "1") {
+						img.buttonMode = true;
+						img.source = "flexResources/map/sxt.png";
+						if(!img.hasEventListener(MouseEvent.CLICK)) {
+							img.addEventListener(MouseEvent.CLICK, function():void{
+								changeHandler(data);
+							});
+						}
+					} else {
+						img.buttonMode = false;
+						img.source = "flexResources/map/sxt_gray.png";
+					}
+				} else {
+					img.width=0;
+					img.height=0;
+				}
+				img.move(startx + img.width, ( unscaledHeight - img.height ) / 2 );
+				if (label) { 
+					label.move(label.x + shift + img.width, label.y); 
+				} 
+				
+				var g:Graphics = graphics; 
+				g.clear(); 
+				
+				if ((lineStyle != NONE) && (lineAlpha > 0) && (lineThickness > 0)) { 
+					while (parentNode != null) { 
+						var children:ICollectionView = desc.getChildren(parentNode); 
+						if (children is IList) { 
+							var itemIndex:int = (children as IList).getItemIndex(currentNode); 
+							// if this node is the last child of the parent 
+							var isLast:Boolean = (itemIndex == (children.length - 1)); 
+							drawLines(g, w, h, lineStyle, lineColor, lineAlpha, lineThickness, isLast, levelsUp, indentation); 
+							
+							// go up to the parent, increasing the level 
+							levelsUp++; 
+							currentNode = parentNode; 
+							parentNode = tree.getParentItem(parentNode); 
+						} else { 
+							break; 
+						} 
+					} 
+				} 
+			} 
+		} 
+		
+		protected function drawLines(g:Graphics, w:Number, h:Number, lineStyle:String, lineColor:uint, 
+									 lineAlpha:Number, lineThickness:Number, isLastItem:Boolean, levelsUp:int, indentation:Number):void { 
+			var midY:Number = Math.round(h / 2); 
+			var lineX:Number = 0; 
+			if (disclosureIcon) { 
+				lineX = disclosureIcon.x + (disclosureIcon.width / 2); 
+			} else if (icon) { 
+				lineX = icon.x - 8; 
+			} else if (label) { 
+				lineX = label.x - 8; 
+			} 
+			lineX = Math.floor(lineX) - int(lineThickness / 2); 
+			// adjust the x position based on the indentation 
+			if (levelsUp > 0) { 
+				if (!isNaN(indentation) && (indentation > 0)) { 
+					lineX = lineX - (levelsUp * indentation); 
+				} else { 
+					// Invalid indentation style value 
+					return; 
+				} 
+			} 
+			var lineY:Number = h; 
+			// stop the dotted line halfway on the last item 
+			if (isLastItem) { 
+				lineY = midY; 
+				// no lines need to be drawn for parents of the last item 
+				if (levelsUp > 0) { 
+					return; 
+				} 
+			} 
+			
+			g.lineStyle(0, 0, 0); 
+			if (lineStyle == SOLID) { 
+				g.beginFill(lineColor, lineAlpha); 
+			} else { 
+				var verticalDottedLine:BitmapData = createDottedLine(lineColor, lineAlpha, lineThickness, true); 
+				g.beginBitmapFill(verticalDottedLine); 
+			} 
+			
+			// draw the vertical line 
+			g.drawRect(lineX, 0, lineThickness, lineY); 
+			// end the fill and start it again otherwise the lines overlap and it create white squares 
+			g.endFill(); 
+			
+			// draw the horizontal line - only needed on this node (not on any parents) 
+			if (levelsUp == 0) { 
+				var startX:int = lineX + 1 + int(lineThickness / 2); 
+				var endX:int = startX + 11; // 5 dots 
+				if (isLastItem) { 
+					startX = lineX; 
+				} 
+				var startY:Number = midY - int(lineThickness / 2); 
+				if (lineStyle == SOLID) { 
+					g.beginFill(lineColor, lineAlpha); 
+				} else { 
+					var horizontalDottedLine:BitmapData = createDottedLine(lineColor, lineAlpha, lineThickness, false); 
+					g.beginBitmapFill(horizontalDottedLine); 
+				} 
+				g.drawRect(startX, startY, endX - startX, lineThickness); 
+				g.endFill(); 
+			} 
+			
+		} 
+		
+		/** 
+		 * Creates a BitmapData that is used to renderer a dotted line. 
+		 * If the vertical parameter is true, then it creates a rectangle bitmap that is 
+		 * twice as long as it is wide (lineThickness). Otherwise it creates a rectangle 
+		 * that is twice as wide as it is long. 
+		 * The first half of the rectangle is filled with the line color (and alpha value), 
+		 * then second half is transparent. 
+		 */ 
+		private function createDottedLine(lineColor:uint, lineAlpha:Number, lineThickness:Number, 
+										  vertical:Boolean = true):BitmapData { 
+			var w:Number = (vertical ? lineThickness : 2 * lineThickness); 
+			var h:Number = (vertical ? 2 * lineThickness : lineThickness); 
+			var color32:uint = combineColorAndAlpha(lineColor, lineAlpha); 
+			var dottedLine:BitmapData = new BitmapData(w, h, true, 0x00ffffff); 
+			// create a dotted bitmap 
+			for (var i:int = 0; i < lineThickness; i++) { 
+				for (var j:int = 0; j < lineThickness; j++) { 
+					dottedLine.setPixel32(i, j, color32); 
+				} 
+			} 
+			return dottedLine; 
+		} 
+		
+		/** 
+		 * Combines the color value and the alpha value into a 32 bit uint like #AARRGGBB. 
+		 */ 
+		private function combineColorAndAlpha(color:uint, alpha:Number):uint { 
+			// make sure the alpha is a valid number [0-1] 
+			if (isNaN(alpha)) { 
+				alpha = 1; 
+			} else { 
+				alpha = Math.max(0, Math.min(1, alpha)); 
+			} 
+			
+			// convert the [0-1] alpha value into [0-255] 
+			var alphaColor:Number = alpha * 255; 
+			// bitshift it to come before the color 
+			alphaColor = alphaColor << 24; 
+			// combine the two values: #AARRGGBB 
+			var combined:uint = alphaColor | color; 
+			return combined; 
+		} 
+		
+		private function getColorStyle(propName:String, defaultValue:uint):uint { 
+			var color:uint = defaultValue; 
+			if (propName != null) { 
+				var n:Number = getStyle(propName); 
+				if (!isNaN(n)) { 
+					color = uint(n); 
+				} 
+			} 
+			return color; 
+		} 
+		
+		
+		private function getNumberStyle(propName:String, defaultValue:Number):Number { 
+			var number:Number = defaultValue; 
+			if (propName != null) { 
+				var n:Number = getStyle(propName); 
+				if (!isNaN(n)) { 
+					number = n; 
+				} 
+			} 
+			return number; 
+		} 
+		
+	} 
+	
+	
+	
+}

+ 268 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeItemLinesRenderer.as

@@ -0,0 +1,268 @@
+package com.xt.hb.ui
+{
+	import flash.display.BitmapData;
+	import flash.display.Graphics;
+	import flash.events.Event;
+	
+	import mx.collections.ICollectionView;
+	import mx.collections.IList;
+	import mx.controls.Tree;
+	import mx.controls.treeClasses.ITreeDataDescriptor;
+	import mx.controls.treeClasses.TreeItemRenderer;
+	import mx.events.FlexEvent;
+	
+	
+	/** 
+	 * Alpha value for the Tree lines. 
+	 * @default 1 
+	 */ 
+	[Style(name="lineAlpha", type="Number", format="Length", inherit="no")] 
+	
+	/** 
+	 * Color of the Tree lines. 
+	 * @default 0x808080 
+	 */ 
+	[Style(name="lineColor", type="uint", format="Color", inherit="no")] 
+	
+	/** 
+	 * Thickness value for the Tree lines. 
+	 * @default 1 
+	 */ 
+	[Style(name="lineThickness", type="Number", format="Length", inherit="no")] 
+	
+	/** 
+	 * The Tree line style - none, dotted (default), or solid. 
+	 * @default "dotted" 
+	 */ 
+	[Style(name="lineStyle", type="String", enumeration="solid", inherit="no")] 
+	
+	/** 
+	 * Extends TreeItemRenderer to draw the dotted lines of the tree. 
+	 * It supports 3 line styles - dotted (default), solid, or none. 
+	 * And the tree line color, alpha, and thickness values are configurable styles too. 
+	 * 
+	 * <pre> 
+	 * <ui:TreeItemLinesRenderer 
+	 * <b>Styles</b> 
+	 * lineAlpha="1" 
+	 * lineColor="#808080" 
+	 * lineThickness="1" 
+	 * lineStyle="dotted" 
+	 * > 
+	 * ... 
+	 * <i>child tags</i> 
+	 * ... 
+	 * </ui:TreeItemLinesRenderer> 
+	 * </pre> 
+	 * 
+	 * @author Chris Callendar 
+	 * @date April 20th, 2009 
+	 */ 
+	public class TreeItemLinesRenderer extends TreeItemRenderer 
+	{ 
+		
+		public static const DOTTED:String = "dotted"; // default 
+		public static const SOLID:String = "solid"; 
+		public static const NONE:String = "none"; 
+		
+		public function TreeItemLinesRenderer() { 
+			super(); 
+			this.addEventListener(FlexEvent.SHOW,refreshNode);
+		} 
+		//显示刷新
+		private function refreshNode(e:Event):void{
+			var tree:Tree = (owner as Tree); 
+			if(tree){
+				tree.invalidateList();
+			}
+		}
+		override public function set data(value:Object):void { 
+			super.data = value; 
+		} 
+		
+		override protected function updateDisplayList(w:Number, h:Number):void { 
+			super.updateDisplayList(w, h); 
+			
+			if ((w > 0) && (h > 0)) { 
+				// go up the hierarchy, drawing the vertical dotted lines for each node 
+				var tree:Tree = (owner as Tree); 
+				var desc:ITreeDataDescriptor = tree.dataDescriptor; 
+				var currentNode:Object = data; 
+				var parentNode:Object = tree.getParentItem(currentNode); 
+				// the level is zero at this node, then increases as we go up the tree 
+				var levelsUp:int = 0; 
+				
+				var lineStyle:String = getStyle("solid"); 
+				var lineColor:uint = getColorStyle("lineColor", 0x808080); 
+				var lineAlpha:Number = getNumberStyle("lineAlpha", 1); 
+				var lineThickness:Number = getNumberStyle("lineThickness", 1); 
+				var indentation:Number = tree.getStyle("indentation"); 
+				
+				// move the icon and label over to make room for the lines (less for root nodes) 
+				var shift:int = (parentNode == null ? 2 : 6) + lineThickness; 
+				if (icon) { 
+					icon.move(icon.x + shift, icon.y); 
+				} 
+				if (label) { 
+					label.move(label.x + shift, label.y); 
+				} 
+				
+				var g:Graphics = graphics; 
+				g.clear(); 
+				
+				if ((lineStyle != NONE) && (lineAlpha > 0) && (lineThickness > 0)) { 
+					while (parentNode != null) { 
+						var children:ICollectionView = desc.getChildren(parentNode); 
+						if (children is IList) { 
+							var itemIndex:int = (children as IList).getItemIndex(currentNode); 
+							// if this node is the last child of the parent 
+							var isLast:Boolean = (itemIndex == (children.length - 1)); 
+							drawLines(g, w, h, lineStyle, lineColor, lineAlpha, lineThickness, isLast, levelsUp, indentation); 
+							
+							// go up to the parent, increasing the level 
+							levelsUp++; 
+							currentNode = parentNode; 
+							parentNode = tree.getParentItem(parentNode); 
+						} else { 
+							break; 
+						} 
+					} 
+				} 
+			} 
+		} 
+		
+		protected function drawLines(g:Graphics, w:Number, h:Number, lineStyle:String, lineColor:uint, 
+									 lineAlpha:Number, lineThickness:Number, isLastItem:Boolean, levelsUp:int, indentation:Number):void { 
+			var midY:Number = Math.round(h / 2); 
+			var lineX:Number = 0; 
+			if (disclosureIcon) { 
+				lineX = disclosureIcon.x + (disclosureIcon.width / 2); 
+			} else if (icon) { 
+				lineX = icon.x - 8; 
+			} else if (label) { 
+				lineX = label.x - 8; 
+			} 
+			lineX = Math.floor(lineX) - int(lineThickness / 2); 
+			// adjust the x position based on the indentation 
+			if (levelsUp > 0) { 
+				if (!isNaN(indentation) && (indentation > 0)) { 
+					lineX = lineX - (levelsUp * indentation); 
+				} else { 
+					// Invalid indentation style value 
+					return; 
+				} 
+			} 
+			var lineY:Number = h; 
+			// stop the dotted line halfway on the last item 
+			if (isLastItem) { 
+				lineY = midY; 
+				// no lines need to be drawn for parents of the last item 
+				if (levelsUp > 0) { 
+					return; 
+				} 
+			} 
+			
+			g.lineStyle(0, 0, 0); 
+			if (lineStyle == SOLID) { 
+				g.beginFill(lineColor, lineAlpha); 
+			} else { 
+				var verticalDottedLine:BitmapData = createDottedLine(lineColor, lineAlpha, lineThickness, true); 
+				g.beginBitmapFill(verticalDottedLine); 
+			} 
+			
+			// draw the vertical line 
+			g.drawRect(lineX, 0, lineThickness, lineY); 
+			// end the fill and start it again otherwise the lines overlap and it create white squares 
+			g.endFill(); 
+			
+			// draw the horizontal line - only needed on this node (not on any parents) 
+			if (levelsUp == 0) { 
+				var startX:int = lineX + 1 + int(lineThickness / 2); 
+				var endX:int = startX + 11; // 5 dots 
+				if (isLastItem) { 
+					startX = lineX; 
+				} 
+				var startY:Number = midY - int(lineThickness / 2); 
+				if (lineStyle == SOLID) { 
+					g.beginFill(lineColor, lineAlpha); 
+				} else { 
+					var horizontalDottedLine:BitmapData = createDottedLine(lineColor, lineAlpha, lineThickness, false); 
+					g.beginBitmapFill(horizontalDottedLine); 
+				} 
+				g.drawRect(startX, startY, endX - startX, lineThickness); 
+				g.endFill(); 
+			} 
+			
+		} 
+		
+		/** 
+		 * Creates a BitmapData that is used to renderer a dotted line. 
+		 * If the vertical parameter is true, then it creates a rectangle bitmap that is 
+		 * twice as long as it is wide (lineThickness). Otherwise it creates a rectangle 
+		 * that is twice as wide as it is long. 
+		 * The first half of the rectangle is filled with the line color (and alpha value), 
+		 * then second half is transparent. 
+		 */ 
+		private function createDottedLine(lineColor:uint, lineAlpha:Number, lineThickness:Number, 
+										  vertical:Boolean = true):BitmapData { 
+			var w:Number = (vertical ? lineThickness : 2 * lineThickness); 
+			var h:Number = (vertical ? 2 * lineThickness : lineThickness); 
+			var color32:uint = combineColorAndAlpha(lineColor, lineAlpha); 
+			var dottedLine:BitmapData = new BitmapData(w, h, true, 0x00ffffff); 
+			// create a dotted bitmap 
+			for (var i:int = 0; i < lineThickness; i++) { 
+				for (var j:int = 0; j < lineThickness; j++) { 
+					dottedLine.setPixel32(i, j, color32); 
+				} 
+			} 
+			return dottedLine; 
+		} 
+		
+		/** 
+		 * Combines the color value and the alpha value into a 32 bit uint like #AARRGGBB. 
+		 */ 
+		private function combineColorAndAlpha(color:uint, alpha:Number):uint { 
+			// make sure the alpha is a valid number [0-1] 
+			if (isNaN(alpha)) { 
+				alpha = 1; 
+			} else { 
+				alpha = Math.max(0, Math.min(1, alpha)); 
+			} 
+			
+			// convert the [0-1] alpha value into [0-255] 
+			var alphaColor:Number = alpha * 255; 
+			// bitshift it to come before the color 
+			alphaColor = alphaColor << 24; 
+			// combine the two values: #AARRGGBB 
+			var combined:uint = alphaColor | color; 
+			return combined; 
+		} 
+		
+		private function getColorStyle(propName:String, defaultValue:uint):uint { 
+			var color:uint = defaultValue; 
+			if (propName != null) { 
+				var n:Number = getStyle(propName); 
+				if (!isNaN(n)) { 
+					color = uint(n); 
+				} 
+			} 
+			return color; 
+		} 
+		
+		
+		private function getNumberStyle(propName:String, defaultValue:Number):Number { 
+			var number:Number = defaultValue; 
+			if (propName != null) { 
+				var n:Number = getStyle(propName); 
+				if (!isNaN(n)) { 
+					number = n; 
+				} 
+			} 
+			return number; 
+		} 
+		
+	} 
+	
+	
+	
+}

+ 22 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeWithIcon.as

@@ -0,0 +1,22 @@
+package com.xt.hb.ui
+{
+	import mx.controls.Tree;
+	import mx.core.ClassFactory;
+	
+	public class TreeWithIcon extends Tree
+	{
+		public function TreeWithIcon()
+		{
+			super();
+		}
+		
+		override protected function createChildren():void
+		{
+			var myfactory:ClassFactory=new ClassFactory(TreeItemIconRenderer);
+			this.itemRenderer=myfactory;
+			super.createChildren();
+		}
+		
+		
+	}
+}

+ 22 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/ui/TreeWithLines.as

@@ -0,0 +1,22 @@
+package com.xt.hb.ui
+{
+	import mx.controls.Tree;
+	import mx.core.ClassFactory;
+	
+	public class TreeWithLines extends Tree
+	{
+		public function TreeWithLines()
+		{
+			super();
+		}
+		
+		override protected function createChildren():void
+		{
+			var myfactory:ClassFactory=new ClassFactory(TreeItemLinesRenderer);
+			this.itemRenderer=myfactory;
+			super.createChildren();
+		}
+		
+		
+	}
+}

+ 122 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/AisUtils.as

@@ -0,0 +1,122 @@
+package com.xt.hb.utils
+{
+	/**
+	 * Ais共通处理
+	 * 共用代码转换等功能
+	 */
+	public class AisUtils
+	{
+		public function AisUtils()
+		{
+		}
+		/**
+		 * 根据船舶和货物类型编码返回名称
+		 */
+		public static function getCbhwlxByCode(code:String):String{
+			switch(code)
+			{
+				case "3":
+				{
+					return "作业船";
+					break;
+				}
+				case "4":
+				{
+					return "高速轮";
+					break;
+				}
+				case "5":
+				{
+					return "拖轮";
+					break;
+				}
+				case "6":
+				{
+					return "客轮";
+					break;
+				}
+				case "7":
+				{
+					return "货轮";
+					break;
+				}
+				case "8":
+				{
+					return "油轮";
+					break;
+				}
+				default:
+				{
+					return "其他";
+					break;
+				}
+			}
+		}
+		/**
+		 * 根据船舶类型获取船舶颜色值
+		 */
+		public static function getColorByShipType(shiptype:String):Number{
+			switch(shiptype)
+			{
+				case "3":
+				{
+					return 0xc0c0c0;
+					break;
+				}
+				case "4":
+				{
+					return 0xf5e500;
+					break;
+				}
+				case "5":
+				{
+					return 0x00fffe;
+					break;
+				}
+				case "6":
+				{
+					return 0x0004ff;
+					break;
+				}
+				case "7":
+				{
+					return 0x00ff00;
+					break;
+				}
+				case "8":
+				{
+					return 0xfc010a;
+					break;
+				}
+				default:
+				{
+					return 0xff00f7;
+					break;
+				}
+			}
+		}
+		/**
+		 * 根据船舶类型获取船舶颜色值
+		 */
+		public static function getColorByDanger(danger:String):Number{
+			switch(danger)
+			{
+				case "0":
+				{
+					return 0x00ff00;
+					break;
+				}
+				case "1":
+				{
+					return 0xFC010A;
+					break;
+				}
+				default:
+				{
+					return 0x00ff00;
+					break;
+				}
+			}
+		}
+	}
+}

+ 58 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/CommonUtility.as

@@ -0,0 +1,58 @@
+package com.xt.hb.utils
+{
+	import avmplus.getQualifiedClassName;
+	
+	import flash.display.DisplayObject;
+	import flash.net.registerClassAlias;
+	import flash.utils.ByteArray;
+	import flash.utils.getDefinitionByName;
+	
+	import mx.charts.ColumnChart;
+	import mx.collections.ArrayCollection;
+	import mx.collections.ArrayList;
+	import mx.containers.Grid;
+	import mx.containers.GridItem;
+	import mx.containers.GridRow;
+	import mx.containers.utilityClasses.ConstraintColumn;
+	import mx.controls.Alert;
+	import mx.controls.Label;
+	import mx.core.FlexGlobals;
+	import mx.effects.Fade;
+	import mx.formatters.DateFormatter;
+	import mx.managers.PopUpManager;
+	
+	import spark.components.BorderContainer;
+	import spark.components.TitleWindow;
+	import spark.effects.Scale;
+	
+	public class CommonUtility
+	{
+		public function CommonUtility()
+		{
+		}
+		
+		
+		public static function showTitleWindow(win:TitleWindow,model:Boolean = true,x:Number = -1,y:Number = -1):void
+		{
+			PopUpManager.addPopUp(win,DisplayObject(FlexGlobals.topLevelApplication),model);
+			PopUpManager.centerPopUp(win);
+			if(x > 0 && y > 0)
+			{
+				win.x = x;
+				win.y = y;
+			}
+			//			window.x=FlexGlobals.topLevelApplication.stage.stageWidth/2-window.width/2;  
+			//			window.y=FlexGlobals.topLevelApplication.stage.stageHeight/2-window.height/2;
+			var scale:Scale = new Scale();
+			//scale.autoCenterTransform = true;    //设置以中心点缩放
+			scale.target = win;    //设置Scale的作用对象为windowView
+//			scale.duration = 500;      //设置效果的持续时间
+//			scale.scaleXFrom = 0;      //设置scaleX和scaleY的起始,终点大小
+//			scale.scaleXTo = 1;
+//			scale.scaleYFrom = 0;
+//			scale.scaleYTo = 1;
+			scale.play();
+			//scale.addEventListener(EffectEvent.EFFECT_END,函数名) 
+		}
+	}
+}

+ 85 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/CommonUtils.as

@@ -0,0 +1,85 @@
+package com.xt.hb.utils
+{
+	import flash.display.DisplayObject;
+	
+	import mx.core.FlexGlobals;
+	import mx.formatters.DateFormatter;
+	import mx.managers.PopUpManager;
+	
+	import spark.components.TitleWindow;
+	import spark.effects.Scale;
+
+	public class CommonUtils
+	{
+		public function CommonUtils()
+		{
+		}
+		
+		/** YYYY年MM月DD日 HH:NN:SS */
+		public static var DATE_SECOND_FMT:String = 'YYYY年MM月DD日 HH:NN:SS';
+		/** yyyy-MM-dd HH:mm */
+		public static var DATE_MIN_FMT:String = 'YYYY-MM-DD HH:NN';
+		
+		/**
+		 * 日期格式化:YYYY年MM月DD日 HH:NN:SS
+		 */
+		public static function formatDate(date:Date):String{
+			var df:DateFormatter = new DateFormatter(); 
+			df.formatString = DATE_SECOND_FMT; 
+			var st1:String = df.format(date); 
+			return st1 ;
+		}
+		/**
+		 * 日期格式化, 根据指定格式
+		 */
+		public static function formatPatternDate(date:Date, pattern:String):String{
+			var df:DateFormatter = new DateFormatter(); 
+			df.formatString = pattern; 
+			var st1:String = df.format(date); 
+			return st1 ;
+		}
+		/**
+		 * 显示弹出窗口
+		 */
+		public static function showTitleWindow(win:TitleWindow,model:Boolean = true,x:Number = -1,y:Number = -1):void
+		{
+			PopUpManager.addPopUp(win,DisplayObject(FlexGlobals.topLevelApplication),model);
+			PopUpManager.centerPopUp(win);
+			if(x > 0 && y > 0)
+			{
+				win.x = x;
+				win.y = y;
+			}
+			var scale:Scale = new Scale();
+			scale.autoCenterTransform = true;    //设置以中心点缩放
+			scale.target = win;    //设置Scale的作用对象为windowView
+			scale.duration = 500;      //设置效果的持续时间
+			scale.scaleXFrom = 0;      //设置scaleX和scaleY的起始,终点大小
+			scale.scaleXTo = 1;
+			scale.scaleYFrom = 0;
+			scale.scaleYTo = 1;
+			scale.play();
+		}
+		public static function formatETA(eta:String):String{
+			var numEte:int = Number(eta);
+			if(numEte==0)
+				return "" ;
+			var month:Number = int(numEte/65536.0);
+			var day:Number = int((numEte - month * 65536)/2048.0);
+			var hour:Number = int((numEte - month * 65536 - day * 2048)/64.0);
+			var min:Number = numEte - month * 65536 - day * 2048 - hour * 64;
+			return month+"月"+day+"日"+hour+"时"+min+"分" ;
+		}
+		/**
+		 * null or undefined 处理
+		 */
+		public static function nullToEmpty(str:String):String{
+			if(null == str || "undefined" == str || "null" == str) {
+				return "";
+			} else {
+				return str;
+			}
+			
+		}
+	}
+}

+ 175 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/ConfigUtil.as

@@ -0,0 +1,175 @@
+package com.xt.hb.utils
+{
+	
+	import com.xt.hb.events.QueryLayerEvent;
+	
+	import mx.core.FlexGlobals;
+
+	public class ConfigUtil
+	{
+		public function ConfigUtil()
+		{
+		}
+		
+		public static function getMenuXML(id:String,xml:XML):XML
+		{
+			if(xml == null)
+				return null;
+			for each(var x:XML in xml.children())
+			{
+				if(x.@cdid == id)
+					return x;
+			}
+			return null;
+		}
+		
+		public static function getMapLayerNameAndOwner(layerId:String):String
+		{
+			try
+			{
+				//var serviceList:XMLList = mapConfig.MapServices.Service;
+				var serviceList:XMLList = FlexGlobals.topLevelApplication.mapConfig.MapServices.Service;
+				var id:String = layerId;
+				if(layerId.indexOf("#")>0)
+				{
+					id = layerId.substring(0,layerId.indexOf("#"));
+				}
+				for each(var xml:XML in serviceList)
+				{
+					if("SERVICE_ID_GKZY" == xml.@ID)
+					{
+						for each(var xmlLayer:XML in xml.Layer)
+						{
+							if(id == xmlLayer.@ID)
+								return xmlLayer.@Name + "@" + xmlLayer.@Owner;
+						}
+					}
+				}
+			}
+			catch(err:Error)
+			{
+				return null;
+			}
+			return null;
+		}
+		
+		public static function getMapUrl(layerId:String):String
+		{
+			try
+			{
+				var serviceList:XMLList = FlexGlobals.topLevelApplication.mapConfig.MapServices.Service;
+				var id:String = layerId;
+				if(layerId.indexOf("#")>0)
+				{
+					id = layerId.substring(0,layerId.indexOf("#"));
+				}
+				for each(var xml:XML in serviceList)
+				{
+					for each(var xmlLayer:XML in xml.Layer)
+					{
+						if(id == xmlLayer.@ID){
+							return getRealUrl(xml.@URL);
+						}
+					}
+				}
+			}
+			catch(err:Error)
+			{
+				return null;
+			}
+			return null;
+		}
+		/**
+		 * 根据xml配置的url获取真正的url
+		 */
+		public static function getRealUrl(xmlUrl:String):String
+		{
+			xmlUrl =xmlUrl.replace("${serverName}",FlexGlobals.topLevelApplication.serverName);
+			xmlUrl =xmlUrl.replace("${port}",FlexGlobals.topLevelApplication.port);
+			return xmlUrl
+		}
+		public static function getMapServiceUrl(serviceId:String):String
+		{
+			try
+			{
+				var serviceList:XMLList = FlexGlobals.topLevelApplication.mapConfig.MapServices.Service;
+				for each(var xml:XML in serviceList)
+				{
+					if(serviceId == xml.@ID)
+					{
+						return getRealUrl(xml.@URL);
+					}
+				}
+			}
+			catch(err:Error)
+			{
+				return null;
+			}
+			return null;
+		}
+		
+		public static function getFeatureStyle(xml:XML):Object
+		{
+			var obj:Object = new Object();
+			for each(var x:XML in xml.children())
+			{
+				for each(var x0:XML in x.children())
+				{
+					obj[x0.@CDID] = x0.@CDTB;
+				}
+			}
+			return obj;
+		}
+		
+		public static function getMapLayerLabel(layerId:String):String
+		{
+			try
+			{
+				//var serviceList:XMLList = mapConfig.MapServices.Service;
+				var serviceList:XMLList = FlexGlobals.topLevelApplication.mapConfig.MapServices.Service;
+				var id:String = layerId;
+				if(layerId.indexOf("#")>0)
+				{
+					id = layerId.substring(0,layerId.indexOf("#"));
+				}
+				for each(var xml:XML in serviceList)
+				{
+					if("SERVICE_ID_GKZY" == xml.@ID)
+					{
+						for each(var xmlLayer:XML in xml.Layer)
+						{
+							if(id == xmlLayer.@ID)
+								return xmlLayer.@Label;
+						}
+					}
+				}
+			}
+			catch(err:Error)
+			{
+				return null;
+			}
+			return null;
+		}
+		
+		public static function getMapLayerState(layerId:String):String
+		{
+			try
+			{
+				// 遍历所有菜单配置
+				var list:XMLList = FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML.children();
+				for each( var xmlChildren:XML in list)  
+				{
+					if(xmlChildren.@cdid==layerId)
+					{
+						return xmlChildren.@checkState
+					}
+				}
+			}
+			catch(err:Error)
+			{
+				return null;
+			}
+			return null;
+		}
+	}
+}

+ 84 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/ConstUtil.as

@@ -0,0 +1,84 @@
+package com.xt.hb.utils
+{
+	public class ConstUtil
+	{
+		public function ConstUtil()
+		{
+		}
+		
+		/**
+		 * 设置分页控件记录数
+		 * */
+		public static var DATAGRIDCTRL_DATA_NUMBER:Number = 10;
+		
+		/**
+		 * 状态字段 0 未选中
+		 * */
+		public static var CHECK_STATE_0:String = "0";
+		
+		/**
+		 * 状态字段 1 选中
+		 * */
+		public static var CHECK_STATE_1:String = "1";
+		
+		/**
+		 * 图层ID——海事船舶
+		 * */
+		public static var L_ID_AIS:String = "L_ID_AIS";
+		/**
+		 * 图层ID——港口
+		 * */
+		public static var L_ID_GK:String = "L_ID_GK";
+		/**
+		 * 图层ID——港区
+		 * */
+		public static var L_ID_GQ:String = "L_ID_GQ";
+		/**
+		 * 图层ID——码头
+		 * */
+		public static var L_ID_MT:String = "L_ID_MT";
+		/**
+		 * 图层ID——泊位
+		 * */
+		public static var L_ID_BW:String = "L_ID_BW";
+		/**
+		 * 图层ID——港口企业
+		 * */
+		public static var L_ID_JYR:String = "L_ID_JYR";
+		/**
+		 * 图层ID——港口企业区域图层
+		 * */
+		public static var L_ID_JYRAREA:String = "L_ID_JYRAREA";
+		/**
+		 * 图层ID——船舶预警
+		 * */
+		public static var L_ID_CBYJ:String = "L_ID_CBYJ";
+		/**
+		 * 图层ID——应急网络
+		 * */
+		public static var L_ID_YJWL:String = "L_ID_YJWL";
+		/**
+		 * 图层ID——视频
+		 * */
+		public static var L_ID_SP:String = "L_ID_SP";
+		/**
+		 * 图层ID——港口危险货物企业
+		 * */
+		public static var L_ID_AQ_WXHWQY:String = "L_ID_AQ_WXHWQY";
+		/**
+		 * 图层ID——重大危险源企业
+		 * */
+		public static var L_ID_AQ_ZDWXYQY:String = "L_ID_AQ_ZDWXYQY";
+		
+		/**
+		 * 图层ID——取水口
+		 * */
+		public static var L_ID_AQ_QSK:String = "L_ID_AQ_QSK";
+		
+		/**
+		 * 图层ID——海事GPS
+		 * */
+		public static var L_ID_GPS:String = "L_ID_GPS";
+		
+	}
+}

+ 158 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/FieldsUtility.as

@@ -0,0 +1,158 @@
+package com.xt.hb.utils
+{
+	import com.xt.hb.object.FieldObject;
+	import com.xt.hb.utils.ConstUtil;
+	
+
+	public class FieldsUtility
+	{
+		public function FieldsUtility()
+		{
+		}
+		
+		public static function getShowFields(layerId:String):Array
+		{
+			var arr:Array = new Array();
+			if(layerId.indexOf("#") > 0)
+				layerId = layerId.substring(0,layerId.indexOf("#"));
+			switch(layerId)
+			{
+				case ConstUtil.L_ID_MT:
+				{
+					arr.push(new FieldObject("码头名称","NAME"));
+					arr.push(new FieldObject("经营人","JYRMC"));
+					arr.push(new FieldObject("港区名称","GQMC"));
+					arr.push(new FieldObject("港口名称","GKMC"));
+					arr.push(new FieldObject("码头用途","MTYT"));
+					arr.push(new FieldObject("主要货类","ZYHL"));
+					arr.push(new FieldObject("年货物通过能力(万吨)","NHWTGNL"));
+					arr.push(new FieldObject("设计物通过能力(万吨)","SJHWTTL"));
+					arr.push(new FieldObject("码头设计前沿水深(米)","MTSJQYSS"));
+					break;
+				}
+				case ConstUtil.L_ID_BW: 
+				{
+					arr.push(new FieldObject("泊位名称","NAME"));
+					arr.push(new FieldObject("经营人","JYRMC"));
+					arr.push(new FieldObject("港区名称","GQMC"));
+					arr.push(new FieldObject("港口名称","GKMC"));
+					arr.push(new FieldObject("泊位用途","BWYT"));
+					arr.push(new FieldObject("设计靠泊能力(吨)","SJKBNL"));
+					arr.push(new FieldObject("年货物通过能力(万吨)","NHWTGML"));
+					arr.push(new FieldObject("服务类型","FWLX"));
+					arr.push(new FieldObject("是否危险品泊位","WXPBW"));
+					break;
+				}
+				case ConstUtil.L_ID_JYR: 
+				{
+					arr.push(new FieldObject("经营人","NAME"));
+					arr.push(new FieldObject("港区名称","GQMC"));
+					arr.push(new FieldObject("港口名称","GKMC"));
+					arr.push(new FieldObject("安全负责人联系电话","AQFZRLXDH"));
+					arr.push(new FieldObject("经营许可证号","GKJYXKZH"));
+					arr.push(new FieldObject("是否持有危险货物作业附证","SFWHQY"));
+					arr.push(new FieldObject("主要作业货种","ZYHZ"));
+					break;
+				}
+				case ConstUtil.L_ID_GQ: 
+				{
+					arr.push(new FieldObject("港区名称","NAME"));
+					arr.push(new FieldObject("港口名称","GKMC"));
+					arr.push(new FieldObject("港区面积(万平方米)","GQMJ"));
+					arr.push(new FieldObject("陆域面积(万平方米)","LYMJ"));
+					arr.push(new FieldObject("水域面积(万平方米)","SYMJ"));
+					arr.push(new FieldObject("港区描述","REMARK"));
+					break;
+				}
+				case ConstUtil.L_ID_AQ_QSK: 
+				{
+					arr.push(new FieldObject("取水口名称","qskmc"));
+					arr.push(new FieldObject("管理单位","gldw"));
+					arr.push(new FieldObject("联系电话","lxdh"));
+					arr.push(new FieldObject("平均取水量(吨/天)","pjqsl"));
+					arr.push(new FieldObject("用途","yt"));
+					break;
+				}
+				case ConstUtil.L_ID_CBYJ: 
+				{
+					arr.push(new FieldObject("区域名称","areaname"));
+					arr.push(new FieldObject("备注","bz"));
+					break;
+				}
+				case ConstUtil.L_ID_GPS:
+				{
+					arr.push(new FieldObject("经度","jd"));
+					arr.push(new FieldObject("纬度","wd"));
+					arr.push(new FieldObject("速度","sd"));
+					arr.push(new FieldObject("接受时间","recvdate"));
+					break;
+				}
+				//end
+				default:
+				{
+					arr.push(new FieldObject("名称","NAME"));
+					break;
+				}
+			}
+			return arr;
+		}
+		
+		public static function getTitleByLayerID(layerID:String):String
+		{
+			switch(layerID)
+			{
+				case ConstUtil.L_ID_BW:
+				{
+					return "泊位详情:";
+				}
+				case ConstUtil.L_ID_MT:
+				{
+					return "码头详情:";
+				}
+				case ConstUtil.L_ID_JYR:
+				{
+					return "经营人详情:";
+				}
+				case ConstUtil.L_ID_GQ:
+				{
+					return "港区详情:";
+				}
+				case ConstUtil.L_ID_AQ_QSK:
+				{
+					return "取水口详情:";
+				}
+				case ConstUtil.L_ID_CBYJ:
+				{
+					return "区域详情:";
+				}
+				case ConstUtil.L_ID_GPS:
+				{
+					return "GPS:";
+				}
+				default:
+				{
+					break;
+				}
+			}
+			return "";
+		}
+		
+		public function queryTable(type:String,where:String):Array
+		{
+			//此处根据在系统界面中选择的书香表以及输入的查询条件,实现对指定表的查询,并返回相应的数据集
+			return null;
+		}
+		
+		public function updateRecord(type:String,entity:Object):int
+		{
+			//此处实现对已经查询出来的某条记录的编辑操作,并将编辑后的信息保存到数据库中
+			return 0;
+		}
+		
+		public function delelteRecord(type:String,id:String):int
+		{
+			//此处实现对已经查询出来的某条记录的删除操作,并删除数据表中对应的记录
+			return 0;
+		}
+	}
+}

+ 57 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/GisUtils.as

@@ -0,0 +1,57 @@
+package com.xt.hb.utils
+{
+	import com.esri.ags.tasks.QueryTask;
+	import com.esri.ags.tasks.supportClasses.Query;
+	
+	import mx.controls.Alert;
+	import mx.rpc.AsyncResponder;
+
+	/**
+	 * 地图工具类,主要是地图操作相关接口
+	 */
+	public class GisUtils
+	{
+		public static var queryTask:QueryTask = new QueryTask();
+		public static var query:Query = new Query();
+		
+		/**
+		 * 
+		 */
+		public static function callGisServer(url:String, func:Function, 
+				condition:String, otherFields:Array = null) : void {
+			queryTask.url=url;
+			queryTask.useAMF = true;
+			//queryTask.query.text=qText.text;
+			//queryTask.query.where="STATE_NAME like '%"+qText.text+"%'";
+			//设置查询语句
+			if(null != condition && "" != condition) {
+				query.where=condition;
+			} else {
+				query.where="1=1";
+			}
+			//查询结果是否返回Geometry
+			query.returnGeometry=true;
+			query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
+			//设置要查询的字段
+			var fields:Array=new Array();
+			fields.push("fid");
+			fields.push("shape");
+			fields.push("id");
+			if(null != otherFields && otherFields.length > 0) {
+				for each(var str:String in otherFields) {
+					fields.push(str);
+				}
+			}
+			query.outFields=fields;
+			//进行查询成功调用onResult方法,错误失败调用onFault
+			queryTask.execute(query,new AsyncResponder(func,onLayerFault));
+		}
+		
+		//查询失败提示
+		public static function onLayerFault(info:Object, token:Object = null ):void
+		{
+			//Alert.show("获取GisServer信息出错 ! " + info.toString());
+		}
+	}
+}
+class SingletonEnforcer {}

+ 35 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/GlobalData.as

@@ -0,0 +1,35 @@
+package com.xt.hb.utils
+{
+	
+
+	/**
+	 * 系统全局属性
+	 */
+	public class GlobalData
+	{
+		public function GlobalData()
+		{
+		}
+		
+		/** 图层gis url yjwl */
+		public static var yjwlLayerUrl:String;
+		/** 图层gis url camera */
+		public static var spLayerUrl:String;
+		/** 图层gis url bw */
+		public static var bwLayerUrl:String;
+		/** 图层gis url mt */
+		public static var mtLayerUrl:String;
+		/** 图层gis url cbyj  */
+		public static var cbyjLayerUrl:String;
+		/** 图层gis url jyr */
+		public static var jyrLayerUrl:String;
+		/** 图层gis url gq */
+		public static var gqLayerUrl:String;
+		/** 图层gis url gk */
+		public static var gkLayerUrl:String;
+		/** 图层gis url qsk */
+		public static var qskLayerUrl:String;
+		/** 视频监控 url */
+		public static var spjkUrl:String;
+	}
+}

+ 220 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/MapUtils.as

@@ -0,0 +1,220 @@
+package com.xt.hb.utils
+{
+	import com.esri.ags.Graphic;
+	import com.esri.ags.Map;
+	import com.esri.ags.layers.GraphicsLayer;
+	import com.esri.ags.symbols.CompositeSymbol;
+	import com.esri.ags.symbols.SimpleFillSymbol;
+	import com.esri.ags.symbols.SimpleLineSymbol;
+	import com.esri.ags.symbols.TextSymbol;
+	
+	import flash.events.MouseEvent;
+	import flash.text.TextFormat;
+	
+	import mx.collections.ArrayCollection;
+	import mx.containers.Canvas;
+	import mx.core.FlexGlobals;
+
+	/**
+	 * 地图工具类,主要是地图操作相关接口
+	 */
+	public class MapUtils
+	{
+		/** 地图AIS刷新间隔 */
+		public static const aisRefreshTime:Number=10000;
+		/** 地图GPS刷新间隔 */
+		public static const gpsRefreshTime:Number=10000;
+		/** 船舶单位长度,按照长、宽系数同比例缩放,100米长度 */
+		public static var c_x:Number;
+		/** 船舶单位长度,按照长、宽系数同比例缩放,100米长度 */
+		public static var c_y:Number;
+		/** 速度 */
+		public static var c_j:Number;
+		/** 速度 */
+		public static var c_j_1:Number;
+		/** layerIndex */
+		public static var layerIndex:Number=100;
+		/**
+		 * 不需要创建对象
+		 */
+		public function MapUtils(singletonEnforcer:SingletonEnforcer)
+		{
+		}
+		/** 首页地图 */
+		private static var _map:Map= null;
+		/**
+		 * 首页地图控件,首页初始化时需要设置,其他地方仅使用
+		 */
+		public static function get map():Map
+		{
+			if(_map == null){
+				_map = FlexGlobals.topLevelApplication.map;
+			}
+			return _map;
+		}
+		/**
+		 * 获取临时图标缓存图层
+		 */
+		public static function getTempGraphicLayer():GraphicsLayer{
+			var tempGLayer:GraphicsLayer = map.getLayer("L_ID_TEMPG") as GraphicsLayer;
+			if(null == tempGLayer){
+				tempGLayer = new GraphicsLayer();
+				tempGLayer.id="L_ID_TEMPG";
+				tempGLayer.name="L_NAME_TEMPG";
+				map.addLayer(tempGLayer, layerIndex++);
+			}
+			return tempGLayer;
+		}
+		/**
+		 * 获取海事船舶图层
+		 */
+		public static function getHscbLayer():GraphicsLayer{
+			var hscbLayer:GraphicsLayer = map.getLayer("L_ID_HSCB") as GraphicsLayer;
+			if(null == hscbLayer){
+				hscbLayer = new GraphicsLayer();
+				hscbLayer.id="L_ID_HSCB";
+				hscbLayer.name="L_NAME_HSCB";
+				map.addLayer(hscbLayer, 999);
+			}
+			return hscbLayer;
+		}
+		/**
+		 * 清除ais选中图标
+		 */
+		public static function clearAISGraphic():void{
+			var tempG:GraphicsLayer = 	getTempGraphicLayer();
+			var graphic:Graphic;
+			for(var i:Number=0;i<tempG.graphicProvider.length;i++)
+			{
+				graphic = tempG.graphicProvider[i] as Graphic;
+				if(graphic.name=="AISG")
+					tempG.remove(graphic);
+			}
+		}
+		/**
+		 * 获取船舶弹出窗口
+		 */
+		public static function getShipPopWin():Canvas{
+			return FlexGlobals.topLevelApplication.shipPopWin;
+		}
+		/**
+		 * 根据图层名称获取图层
+		 */
+		public static function getGraphicLayerByName(name:String):GraphicsLayer{
+			var tempGLayer:GraphicsLayer = map.getLayer(name) as GraphicsLayer;
+			if(null == tempGLayer){
+				tempGLayer = new GraphicsLayer();
+				tempGLayer.id=name;
+				tempGLayer.name=name;
+				map.addLayer(tempGLayer, layerIndex++);
+				map.reorderLayer("L_ID_HSCB", 999);
+				
+			}
+			return tempGLayer;
+		}
+		/**
+		 * 设置船舶单位长度
+		 */
+		public static function setCbSize(scale:Number):void{
+			var default_x:Number=0.000150;
+			var default_y:Number=0.000300;
+			var default_j:Number=0.000900;
+			var default_j_1:Number=0.000600;
+			if(scale > 9000) {
+				c_x=default_x;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+				c_y=default_y;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+				c_j=default_j;//速度
+				c_j_1=default_j_1;//速度
+			} else {
+				var multi:Number = 2;
+				while (scale*multi < 9000) {
+					multi = multi * 2;
+				}
+				c_x=default_x/multi;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+				c_y=default_y/multi;//船舶单位长度,按照长、宽系数同比例缩放,100米长度
+				c_j=default_j/multi;//速度
+				c_j_1=default_j_1/multi;//速度
+			}
+		}
+		
+		/**
+		 * 海事图形移入事件
+		 */ 
+		public static function graphicMouseOver(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			g.symbol = getOverSymbolStyle();
+		}
+		
+		/**
+		 * 海事图形移出事件
+		 */ 
+		public static function graphicMouseOut(e:MouseEvent):void
+		{
+			var g:Graphic=e.currentTarget as Graphic;
+			g.symbol = getDefaultSymbolStyle();
+		}
+		
+		/**
+		 * 设置默认symbol样式
+		 */
+		public static function getDefaultSymbolStyle() : SimpleFillSymbol {
+			var symbol:SimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_NULL, 0xFF0000, 0.1);
+			symbol.outline = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, 0xFF0000, 1.0, 2);
+			return symbol;
+		}
+		
+		/**
+		 * 设置默认symbol样式
+		 */
+		public static function getOverSymbolStyle() : SimpleFillSymbol {
+			var symbol:SimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x0000FF, 0.3);
+			symbol.outline = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0xF5E500, 1.0, 2);
+			return symbol;
+		}
+		
+		/**
+		 * 设置自定义symbol样式
+		 */
+		public static function getOwnerSymbolStyle(color:Number,alpha:Number,
+				outColor:Number, outWidth:Number, lineStyle:String = SimpleLineSymbol.STYLE_SOLID
+				, fillStyle:String = SimpleFillSymbol.STYLE_SOLID
+			) : SimpleFillSymbol {
+			var symbol:SimpleFillSymbol = new SimpleFillSymbol(fillStyle, color, alpha);
+			symbol.outline = new SimpleLineSymbol(lineStyle, outColor, 1.0, outWidth);
+			return symbol;
+		}
+		
+		/**
+		 * 设置组合样式
+		 */
+		public static function getCompositeSymbol(fillSymbol:SimpleFillSymbol
+				, textSymbol:TextSymbol):CompositeSymbol {
+			var symbolArr:ArrayCollection = new ArrayCollection();
+			symbolArr.addItem(textSymbol);
+			symbolArr.addItem(fillSymbol);
+			var symbol:CompositeSymbol = new CompositeSymbol(symbolArr);
+			return symbol;
+		}
+		
+		/**
+		 * 设置文本Symbol
+		 */
+		public static function getTextSymbol(text:String):TextSymbol {
+			var symbol:TextSymbol = new TextSymbol(text,text);
+			trace(text);
+			symbol.alpha = 1;
+			symbol.placement="middle";
+			symbol.border = false;
+			//symbol.backgroundColor = 0xF5CEAD;
+			//symbol.color = 0x000000;
+			var format:TextFormat = new TextFormat();
+			format.bold = true;
+			format.color = 0x00FF00;
+			symbol.textFormat = format;
+			return symbol;
+		}
+		
+	}
+}
+class SingletonEnforcer {}

+ 26 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/RemoteUtils.as

@@ -0,0 +1,26 @@
+// ActionScript file
+package com.xt.hb.utils
+{
+	import mx.rpc.AbstractOperation;
+	import mx.rpc.events.FaultEvent;
+	import mx.rpc.events.ResultEvent;
+	import mx.rpc.remoting.RemoteObject;
+
+	public class RemoteUtils
+	{
+		public function RemoteUtils()
+		{
+		} 
+		public static function callRemote(destination:String,method:String,listener:Function,... args):void
+		{
+			var ro:RemoteObject=new RemoteObject();
+			ro.destination=destination;
+			ro.concurrency="multiple";
+			var oper:AbstractOperation= ro.getOperation(method);
+			ro.addEventListener(ResultEvent.RESULT,listener);
+			ro.addEventListener(FaultEvent.FAULT, listener);
+			oper.arguments = args;
+			oper.send();
+		}
+	}
+}

+ 226 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/utils/ServicesUtility.as

@@ -0,0 +1,226 @@
+package com.xt.hb.utils
+{
+//	import com.object.FieldObject;
+//	import com.server.GeometryType;
+//	import com.supermap.web.core.Feature;
+//	import com.supermap.web.core.Point2D;
+//	import com.supermap.web.core.geometry.GeoLine;
+//	import com.supermap.web.core.geometry.GeoPoint;
+//	import com.supermap.web.core.geometry.GeoRegion;
+//	import com.supermap.web.core.geometry.Geometry;
+//	import com.supermap.web.core.styles.PictureMarkerStyle;
+//	import com.supermap.web.core.styles.PredefinedFillStyle;
+//	import com.supermap.web.core.styles.PredefinedLineStyle;
+//	import com.supermap.web.core.styles.PredefinedMarkerStyle;
+//	import com.supermap.web.mapping.Map;
+//	import com.supermap.web.mapping.TiledDynamicRESTLayer;
+	import com.esri.ags.Graphic;
+	import com.esri.ags.geometry.MapPoint;
+	import com.xt.hb.ais.BwxqModel;
+	import com.xt.hb.object.FieldObject;
+	
+	import flash.events.MouseEvent;
+	
+	import mx.containers.Grid;
+	import mx.containers.GridItem;
+	import mx.containers.GridRow;
+	import mx.controls.Alert;
+	import mx.controls.HRule;
+	import mx.controls.Image;
+	import mx.controls.LinkButton;
+	import mx.core.FlexGlobals;
+	
+	import spark.components.Label;
+	
+	
+	
+	public class ServicesUtility
+	{
+		public function ServicesUtility()
+		{
+		}
+		
+		
+		/**
+		 * 地图上的弹出框
+		 * layerId:点的是什么东西
+		 * obj:数据
+		 * 
+		 * */
+		public static function showFeatrueToMap(layerId:String,graphic:Graphic,
+				obj:Object,e:MouseEvent=null, isUseMousePoint:Boolean=false):void
+		{
+			try
+			{
+				var grid:Grid = new Grid();
+				grid.setStyle("verticalGap",0);
+				grid.setStyle("backgroundColor","#FFFFFF");
+				
+				var row:GridRow;
+				var rowItem:GridItem;
+				var label:Label;
+				var img:Image;
+				
+				row = new GridRow();
+				row.height = 10;
+				rowItem = new GridItem();
+				rowItem.colSpan = 4;
+				rowItem.setStyle("horizontalAlign","center");
+				
+				row.addChild(rowItem);
+				grid.addChild(row);
+				
+				var fieldArr:Array = FieldsUtility.getShowFields(layerId);
+				var hRule:HRule;
+				var i:int=0;
+				
+				for each(var f:FieldObject in fieldArr)
+				{
+					row = new GridRow();
+					//row.height = 24;
+					//前面留白
+					rowItem = new GridItem();
+					rowItem.width = 8;
+					row.addChild(rowItem);
+					
+					rowItem = new GridItem();
+					rowItem.setStyle("verticalAlign","middle");
+					rowItem.setStyle("horizontalAlign","left");
+					rowItem.setStyle("fontFamily","宋体");
+					rowItem.setStyle("fontSize","12");
+					
+					label = new Label();
+					label.text = f.getLabel() + ":";
+					label.setStyle("color","#4c4c4c");
+					
+					rowItem.addChild(label);
+					row.addChild(rowItem);
+					//留白
+					rowItem = new GridItem();
+					rowItem.width = 15;
+					row.addChild(rowItem);
+					
+					rowItem = new GridItem();
+					rowItem.setStyle("verticalAlign","middle");
+					rowItem.setStyle("horizontalAlign","left");
+					rowItem.setStyle("fontFamily","宋体");
+					rowItem.setStyle("fontSize","12");
+					label = new Label();
+					if(null != obj && typeof(obj[f.getField()]) != "object") {
+						label.text = obj[f.getField()];
+					}
+					label.maxWidth = 160;
+					label.minHeight = 24;
+					label.setStyle("verticalAlign","middle");
+					label.maxDisplayedLines=0; // 默认多行显示,不截取
+					rowItem.addChild(label);
+					row.addChild(rowItem);
+					//后面留白
+					rowItem = new GridItem();
+					rowItem.width = 10;
+					row.addChild(rowItem);
+					
+					grid.addChild(row);
+					
+					row = new GridRow();
+					row.height = 4;
+					
+					if( i < fieldArr.length)
+					{
+						i++;
+					}
+					// 如果泊位则加详情
+					if(layerId==ConstUtil.L_ID_BW ) {
+						var fieldObj:FieldObject = fieldArr[fieldArr.length-1] as FieldObject;
+						if(f.getField() == fieldObj.getField()) {
+							addBwxq(grid, obj);
+						}
+					}
+				}
+				row = new GridRow();
+				row.height = 5;
+				
+				grid.addChild(row);
+				FlexGlobals.topLevelApplication.map
+				MapUtils.map.infoWindow.content = grid;
+				MapUtils.map.infoWindow.label = FieldsUtility.getTitleByLayerID(layerId);
+				setInfoWindowStyle();
+				if(isUseMousePoint) {
+					MapUtils.map.infoWindow.show(MapUtils.map.toMapFromStage(
+						e.stageX + 5, e.stageY - 5));
+				} else {
+					if(graphic.geometry.type == "esriGeometryPoint") {
+						MapUtils.map.infoWindow.show(new MapPoint(graphic.geometry["x"],graphic.geometry["y"],null));
+					} else {
+						MapUtils.map.infoWindow.show(graphic.geometry.extent.center);
+					}
+				}
+			}
+			catch(error:Error) 
+			{
+				Alert.show("显示资源信息出错:"+error.message);
+			}
+		}
+		public static function setInfoWindowStyle(type:String = null):void
+		{
+			MapUtils.map.infoWindow.closeButtonVisible = true;
+			MapUtils.map.infoWindow.labelVisible = true;
+			MapUtils.map.infoWindow.setStyle("backgroundColor","#e2ecf1");
+			MapUtils.map.infoWindow.setStyle("borderColor","#999999");
+			MapUtils.map.infoWindow.setStyle("border-style","solid");
+//			map.infoWindow.infoPlacement = "";
+//			"upperRight", "lowerRight", "upperLeft", "lowerLeft", "left", "right", "top", "bottom", and "center".
+//			map.infoWindow.infoWindowLabel.setStyle('color', "#333");
+//			map.infoWindow.infoWindowLabel.setStyle('fontFamily', "宋体");
+//			map.infoWindow.infoWindowLabel.setStyle('fontSize', "14");
+//			map.infoWindow.infoWindowLabel.setStyle('fontWeight', "bold");
+//			map.infoWindow.infoWindowLabel.setStyle('verticalAlign', "middle");
+//			map.infoWindow.infoWindowLabel.height = 25;
+//			map.infoWindow.infoWindowLabel.maxWidth=250;
+//			map.infoWindow.infoWindowLabel.top = 18;
+//			map.infoWindow.infoWindowLabel.left = 8;
+			/*map.infoWindow.maintainProjectionCenter=false;*/
+			/*var img:Image=new Image();
+			map.infoWindow.addElement();*/
+		}
+		
+		/**
+		 * 增加泊位详情
+		 */
+		private static function addBwxq(grid:Grid, obj:Object):void {
+			var id:String = obj.ID;
+			// 定义link
+			var link:LinkButton=new LinkButton();
+			link.addEventListener(MouseEvent.CLICK,function (e:MouseEvent):void {ServicesUtility.bwInfo(e,id);});
+			link.label="详 情>> ";
+//			link.useHandCursor = true;
+//			link..buttonMode = true;
+			link.setStyle("color","#2F6EA1");
+			// 将link插入表行
+			var row:GridRow = new GridRow();
+			var rowItem:GridItem = new GridItem();
+			rowItem.colSpan = 5;
+			rowItem.addChild(link);
+			rowItem.setStyle("horizontalAlign","center");
+			row.addChild(rowItem);
+			grid.addChild(row);
+		}
+		
+		/**
+		 * 增加泊位详情
+		 */
+		private static function bwInfo(e:MouseEvent, id:String):void {
+			if(null == id || typeof(id) == "undefined") {
+			} else {
+				var bwxqModel:BwxqModel = new BwxqModel;
+				bwxqModel.bwid = id;
+				var width:int = FlexGlobals.topLevelApplication.stage.stageWidth;
+				var height:int = FlexGlobals.topLevelApplication.stage.stageHeight;
+				var x:Number = width/2-230;
+				var y:Number = height/2 - 165;
+				CommonUtility.showTitleWindow(bwxqModel, false, x, y);
+			}
+			
+		}
+	}
+}

+ 87 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/AqtcWindow.mxml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			   xmlns:s="library://ns.adobe.com/flex/spark" 
+			   xmlns:mx="library://ns.adobe.com/flex/mx" width="240" height="480" creationComplete="init(event)" xmlns:view="com.view.*"
+			   close="windowCloseHandler(event)" title="安全系统图层" skinClass="com.skins.common.CxTitleWindow" windowMove="windowMoveFunction(event)" xmlns:tree="com.tree.*">
+	<s:layout>
+		<s:VerticalLayout/>
+	</s:layout>
+	<fx:Script>
+		<![CDATA[
+			import com.tcb.ConvertListToXML;
+			import com.xt.hb.utils.RemoteUtils;
+			
+			import mx.binding.utils.BindingUtils;
+			import mx.collections.ArrayCollection;
+			import mx.events.CloseEvent;
+			import mx.events.FlexEvent;
+			import mx.managers.PopUpManager;
+			import mx.rpc.events.AbstractEvent;
+			import mx.rpc.events.FaultEvent;
+			import mx.rpc.events.ResultEvent;
+			[Bindable]
+			public var menuXML:XML = null;
+			public var  checkBoxClickHandler:Function = null;
+			protected function windowCloseHandler(event:CloseEvent):void
+			{
+				PopUpManager.removePopUp(this);
+			}
+			protected function init(event:FlexEvent):void
+			{
+//				RemoteUtils.callRemote("mapConfigCtl","queryMapList",function(e:AbstractEvent):void{
+//					if(e is FaultEvent){
+//						trace("error");
+//					}else {
+//						var tcArr:ArrayCollection = ResultEvent(e).result as ArrayCollection;
+//						menuXML= new ConvertListToXML().getXMLByList(tcArr,"id","fid","ALL");
+//					}
+//				});
+//				var arr:ArrayCollection = new ArrayCollection([
+//					{CDMC:"图层控制",id:"i1" ,fid:"f1" ,CDTB:"flexResources/homePage/tab/tabicon_42.png" ,STATE:"1" ,CDID:"M_ZYZS_TCKZ"},
+//					{CDMC:"港区",id:"i2" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_GQ"},
+//					{CDMC:"作业区",id:"i3" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_ZYQ"},
+//					{CDMC:"现状锚地",id:"i4" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_MD_XZ01"},
+//					{CDMC:"规划锚地",id:"i5" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"0" ,CDID:"L_ID_MD_GH01"},
+//					{CDMC:"码头",id:"i6" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_MT01"},
+//					{CDMC:"泊位",id:"i7" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_BW01"},
+//					{CDMC:"港口经营人",id:"i8" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"1" ,CDID:"L_ID_GKJYR"},
+//					{CDMC:"岸线",id:"i9" ,fid:"i1" ,CDTB:"flexResources/tuli/GQ.png" ,STATE:"0" ,CDID:"L_ID_AX_XZ"} 
+//				]);
+//				menuXML= new ConvertListToXML().getXMLByList(arr,"id","fid","f1");
+			}
+			protected function fieldTypeLabel(item:Object):String
+			{
+				if(null != item){
+					return resourceManager.getString('select',item.@localeName);
+				}
+				return "";
+			}
+			private function windowMoveFunction(event:Event):void
+			{
+				event.target.x = event.target.x < 0 ? 0 : event.target.x;
+				event.target.x = event.target.x + event.target.width > event.target.parent.width ? event.target.parent.width - event.target.width : event.target.x;
+				event.target.y = event.target.y < 0 ? 0 : event.target.y;
+				event.target.y = event.target.y + event.target.height > event.target.parent.height ? event.target.parent.height - event.target.height : event.target.y;
+			}
+			private function checkBox_click(event:Event):void
+			{
+				if(null != checkBoxClickHandler)
+				{
+					checkBoxClickHandler(event);
+				}
+				//menuTree.selectedItem;
+				//BaseEventDispatcher.getInstance().dispatchEvent(new TCKZCheckBoxClickEvent(TCKZCheckBoxClickEvent.TCKZ_TreeNodeCheckBox_Click,event.currentTarget));
+			}
+		]]>
+	</fx:Script>
+	<fx:Declarations>
+		<!-- Place non-visual elements (e.g., services, value objects) here -->
+	</fx:Declarations>
+	<s:BorderContainer  width="100%" height="100%" borderColor="#6b9ca5" borderWeight="3" cornerRadius="5">
+		<tree:CheckLegendTree id="menuTree" width="100%" height="100%" borderVisible="false"
+							  defaultLeafIcon="{null}" disclosureClosedIcon="{null}" disclosureOpenIcon="{null}"
+							  dataProvider="{this.menuXML}" legendHeight="28" legendWidth="28" 
+							  labelField="@cdmc" legendField="@cdtb" checkBoxStateField="@checkState" legendType="ICON"
+							  itemClick="checkBox_click(event)" showRoot="false"/>
+	</s:BorderContainer>
+</s:TitleWindow>

+ 135 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/Main_MenuNavigation.as

@@ -0,0 +1,135 @@
+import com.supermap.framework.events.BaseEventDispatcher;
+import com.xt.hb.events.NavigationEvent;
+import com.xt.hb.utils.CommonUtility;
+import com.xt.hb.views.ResShowModel;
+
+import flash.events.MouseEvent;
+import flash.geom.Point;
+import flash.utils.getDefinitionByName;
+
+import mx.controls.Alert;
+import mx.core.FlexGlobals;
+import mx.core.IVisualElement;
+import mx.managers.PopUpManager;
+
+import spark.components.Image;
+
+import com.xt.hb.views.TCKZModel;
+import com.xt.hb.utils.RemoteUtils;
+import mx.rpc.events.AbstractEvent;
+import mx.rpc.events.FaultEvent;
+import mx.collections.ArrayCollection;
+import mx.rpc.events.ResultEvent;
+import com.tcb.ConvertListToXML;
+
+public var resShowModel:ResShowModel;
+
+
+
+[Bindable]
+public var tckzVisible:Boolean=false;
+
+[Bindable]
+public var MC:String="";
+[Bindable]
+public var Type:String="";
+
+[Bindable]
+public var M_ZYZS_TCKZ_XML:XML=new XML();
+
+
+/**
+ * 导航栏点击事件
+ * 
+ * 
+ * */
+private function navigationMenu(e:NavigationEvent):void
+{
+	if(!e.data)
+		return;
+	var param:String = e.data.toString();
+	switch(param)
+	{
+		case "leftMenu":
+		{
+			showResModel();
+			break;
+		}
+		case "leftHide":
+		{
+			this.moveLeftPanal();
+			break;
+		}
+		case "rightMenu":
+		{
+			this.initRightMenu();
+			break;
+		}
+		default:
+		{
+			break;
+		}
+	}
+}
+
+/**
+ * 资源展示左侧导航栏显示
+ */ 
+private function showResModel():void
+{
+	this.titleWin.removeAllChildren();
+	
+	if(!this.resShowModel)
+	{
+		this.resShowModel = new ResShowModel();
+	}
+	else
+	{
+		this.resShowModel.loadLayersAndFeatures();
+	}
+	this.titleWin.x = 0 - this.resShowModel.width;
+	//this.resShowModel.initPage();
+	
+	this.titleWin.addElement(this.resShowModel);
+	
+	
+	var img:Image = new Image();
+	img.source = "flexResources/arrowLeft1.png";
+	img.visible = false;
+	img.useHandCursor=true;  
+	img.buttonMode=true;
+	img.addEventListener(MouseEvent.CLICK,hideLeftModel);
+	this.titleWin.addElement(img);
+	
+	this.moveFlag1 = false;
+	this.moveLeftPanal();
+}
+
+/**
+ * 图层控制
+ */
+public function showTCKZModel():void
+{
+	var x:Number = FlexGlobals.topLevelApplication.stage.stageWidth - 300;
+	var y:Number = 120;
+	CommonUtility.showTitleWindow(this.tckzModel,false,x,y);
+}
+
+/**
+ * 资源展示左侧导航栏显示
+ */ 
+private function initRightMenu():void
+{
+	RemoteUtils.callRemote("mapConfigCtl","queryMapList",function(e:AbstractEvent):void{
+		if(e is FaultEvent){
+			trace("error");
+		}else {
+			var tcArr:ArrayCollection = ResultEvent(e).result as ArrayCollection;
+			FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML = 
+				new ConvertListToXML().getXMLByList(tcArr,"id","fid","ALL");
+			initMap();
+		}
+	});
+}
+
+

+ 387 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/MapTools.mxml

@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
+				   xmlns:s="library://ns.adobe.com/flex/spark" 
+				   xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:tree="com.tree.*"
+				   width="400" height="300" cornerRadius="5"   borderColor="black" borderAlpha=".5" backgroundColor="#4fafe4" 
+				   borderWeight="1" creationComplete="creationCompleteHandler(event)" xmlns:ui="com.xt.hb.views.ui.*" xmlns:ui1="com.xt.hb.ui.*" >
+	<s:layout>
+		<s:VerticalLayout gap="0"/>
+	</s:layout>
+	<fx:Declarations>
+		<!-- Place non-visual elements (e.g., services, value objects) here -->
+	</fx:Declarations>
+	<fx:Script>
+		<![CDATA[
+			import com.xt.hb.events.QueryLayerEvent;
+			import com.xt.hb.events.MenusEvent;
+			import com.xt.hb.utils.ConstUtil;
+			import com.supermap.framework.events.BaseEventDispatcher;
+			//import com.supermap.web.core.Feature;
+			//import com.view.YjwzWindow;
+			//import com.view.yjcz.YjczWindow;
+			
+			import mx.collections.ArrayCollection;
+			import mx.collections.XMLListCollection;
+			import mx.controls.Alert;
+			import mx.core.FlexGlobals;
+			import mx.events.FlexEvent;
+			import mx.managers.PopUpManager;
+			import mx.rpc.events.ResultEvent;
+			[Bindable]
+			public var menuXML:XML = null;
+			[Bindable]
+			public var treeClickFun:Function; 
+			[Bindable]
+			private var queryData:ArrayCollection = new ArrayCollection();
+			public var currId:String;
+			private var currSZD:String = null;
+			private var showWz:Boolean=false;
+			//private var yjczWindow:YjczWindow = new YjczWindow;
+			protected static var dataXML:XML=
+				<SjlxSelect>
+					<item id="0" localeName=""/>
+					<item id="1" localeName="sjlx.yryb" />    
+					<item id="2" localeName="sjlx.ydyh" />    
+					<item id="3" localeName="sjlx.ztdhz"  />   
+					<item id="4" localeName="sjlx.ztdbz" />   
+					<item id="5" localeName="sjlx.ztdypxl" /> 
+					<item id="6" localeName="sjlx.ztdzrzh" /> 
+				</SjlxSelect>
+				;
+			[Bindable]
+			protected var sglxArr:ArrayCollection=new ArrayCollection([{id:"0",localeName:"sjlx.yz"}]);
+			//private var yjwzWin:YjwzWindow  = new YjwzWindow;
+			protected function hiddenLable_clickHandler(event:MouseEvent):void
+			{
+				BaseEventDispatcher.getInstance().dispatchEvent(new MenusEvent(MenusEvent.MENUHIDE,"hide"));
+			}
+			
+			protected function radiusKeyDown(event:KeyboardEvent):void  
+			{  
+				if(event.keyCode == 13)//Enter键  
+				{  
+					searchFun();
+				}  
+			}  
+			protected function radiusYjwlKeyDown(event:KeyboardEvent):void  
+			{  
+				if(event.keyCode == 13)//Enter键  
+				{  
+					searchYjwlFun();
+				}  
+			}  
+			//监听键盘点击事件,Enter键,ESC键  
+			protected function txtKeyDown(event:KeyboardEvent):void  
+			{  
+				if(event.keyCode == 13)//Enter键  
+				{  
+					queryClickHandler(null);
+				}  
+			}  
+			protected function queryClickHandler(event:MouseEvent):void
+			{
+				this.queryData.removeAll();
+				this.queryData.refresh();
+				var name:String = this.mccx.text;
+				//CommonUtility.callRemote("gisController","queryCompByName",resultHandler,name);
+			}
+			protected function resultHandler(event:ResultEvent):void
+			{
+				currId ="";
+				currSZD="0";
+				var qy:Object= null;
+				if("queryCompByName"==event.token.message["operation"]){
+					var list:ArrayCollection=event.result as ArrayCollection;
+					this.queryData=list;
+					// 仅有一条记录时直接定位
+					if(list.length==1)
+					{
+						var id:String = list[0].ID as String;
+						currId = id;
+						currSZD = list[0].SZD as String;
+						var nm:String = list[0].NAME as String;
+						 FlexGlobals.topLevelApplication.locateJyr(id,nm);
+					}
+				}
+			}
+			/**
+			 * 经营人查询结果一览双击定位处理
+			 */
+			protected function resultGrid_doubleClickHandler(event:MouseEvent):void
+			{
+				if(resultGrid.selectedItems == null || resultGrid.selectedItems.length == 0)
+				{
+					return;
+				}
+				else if(resultGrid.selectedItems.length > 1)
+				{
+					return;
+				}
+				var id:String = resultGrid.selectedItems[0].ID as String;
+				currId = id;
+				currSZD = resultGrid.selectedItems[0].SZD as String;
+				var nm:String = resultGrid.selectedItems[0].NAME as String;
+				FlexGlobals.topLevelApplication.locateJyr(id,nm);
+			}
+			protected function fieldTypeLabel(item:Object):String
+			{
+				if(null != item){
+					return resourceManager.getString('select',item.@localeName);
+				}
+				return "";
+			}
+			
+			protected function creationCompleteHandler(event:FlexEvent):void
+			{
+				//BaseEventDispatcher.getInstance().addEventListener(QueryLayerEvent.QUERY_SUCCESS, queryLayerSuccess);
+			}
+			
+			protected function sglx_creationCompleteHandler(event:FlexEvent):void
+			{
+				sglx.dataProvider= new XMLListCollection(dataXML..item);
+				sglx.textInput.editable = false;
+				sglx.textInput.setStyle("borderColor","#d2d2d2");
+			}
+			public function searchFun():void
+			{
+				if(!currId)
+				{
+					return;
+				}
+				var layerArr:ArrayCollection = new ArrayCollection;
+				//layerArr.addItem(ConstUtil.L_ID_AQ_YJWZK);
+				//FlexGlobals.topLevelApplication.bufferQuery(ConstUtil.L_ID_AQ_WXHWQY,currId,layerArr,new Number(radius.text));
+				showWz = true;
+			}
+			public function searchYjwlFun():void
+			{
+				if(!currId)
+				{
+					return;
+				}
+				var layerArr:ArrayCollection = new ArrayCollection;
+//				layerArr.addItem(ConstUtil.L_ID_AQ_YJWZK);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_XF);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_JJ);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_GA);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_YY);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_HB);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_BF);
+//				layerArr.addItem(ConstUtil.L_ID_AQ_SJZX);
+//				FlexGlobals.topLevelApplication.bufferQuery(ConstUtil.L_ID_AQ_WXHWQY,currId,layerArr,new Number(radiusYjwl.text));
+			}
+			private function queryLayerSuccess(event:QueryLayerEvent):void
+			{
+				if(!showWz)
+				{
+					return;
+				}
+				showWz=false;
+				var obj:Object = event.data;
+				var features:Array = obj.features;
+				var layerId:String = obj.layerId;
+				if("L_ID_AQ_YJWZK" !=layerId)
+				{
+					return;
+				}
+				var ids:String = "";
+//				for each(var fea:Feature in features)
+//				{
+//					ids +=","+fea.attributes.ID;
+//				}
+//				if(ids.length>0)
+//				{
+//					ids = ids.substr(1);
+//				}
+//				CommonUtility.callRemote("gisController","queryWz",Yjpt_resultHandler,ids,null);
+			}
+			protected function Yjpt_resultHandler(event:ResultEvent):void
+			{
+				var yjwz:ArrayCollection=event.result as ArrayCollection;
+//				yjwzWin.list=yjwz;
+//				PopUpManager.addPopUp(yjwzWin,FlexGlobals.topLevelApplication as DisplayObject,true);
+//				PopUpManager.centerPopUp(yjwzWin);
+			}
+			/**  应急专家 */
+			public function expert_clickHandler(event:MouseEvent = null,type:String = null):void
+			{
+				FlexGlobals.topLevelApplication.showExpert(null,currSZD);
+			}
+			/**  应急处置 */
+			public function yjcz_clickHandler(event:MouseEvent = null,type:String = null):void
+			{
+//				if(null != sglx)
+//				{
+//					yjczWindow.selectedSjlx = sglx.selectedIndex;
+//				}
+//				if(null != this.currSZD)
+//				{
+//					yjczWindow.selectSzd =new Number(this.currSZD);
+//				}
+//				yjczWindow.yappFun(null);
+//				PopUpManager.addPopUp(yjczWindow,FlexGlobals.topLevelApplication as DisplayObject,true);
+//				PopUpManager.centerPopUp(yjczWindow);
+			}
+			
+			protected function saveHandler(event:MouseEvent):void
+			{
+				var param:Object={
+					sgsj:sgsj.dateTime,
+					sgdd:sgdd.text,
+					sgwz:sgwz.text,
+					sgxz:sgxz.text,
+					sgqy:sgqy.text,
+					sggm:sggm.text,
+					rysw:rysw.text,
+					xcjy:xcjy.text,
+					bjr:bjr.text,
+					bjrlxfs:bjrlxfs.text
+				};
+//				CommonUtility.callRemote("gisController","saveJjxx",Yjpt_resultHandler,param);
+			}
+			protected function saveJjxx_resultHandler(event:ResultEvent):void
+			{
+				sgsj.dateTime = new Date;
+				sgdd.text ="";
+				sgwz.text ="";
+				sgxz.text ="";
+				sgqy.text ="";
+				sggm.text ="";
+				rysw.text ="";
+				xcjy.text ="";
+				bjr.text ="";
+				bjrlxfs.text ="";
+				Alert.show("保存成功!","提示");
+			}
+		]]>
+	</fx:Script>
+	<mx:HBox width="100%" height="30" horizontalGap="0" backgroundColor="#136287" verticalAlign="middle">
+		<s:Label text=" 应急处置" fontSize="18" fontWeight="bold" fontFamily="宋体" color="white" height="100%" width="55%" textAlign="left" verticalAlign="middle"/>
+		<s:Spacer width="100%"/>
+		<s:Label text="&gt;&gt;"  click="hiddenLable_clickHandler(event)"  toolTip="隐藏" useHandCursor="true" buttonMode="true" color="white" fontWeight="normal"/>
+		<s:Spacer width="10"/>
+	</mx:HBox>
+	<mx:Accordion id="accordion"  height="100%" width="100%" accentColor="0" selectedIndex="1" borderVisible="false" headerHeight="32"  historyManagementEnabled="false" headerStyleName="AccordionHeader">
+		<mx:headerRenderer>
+			<fx:Component>
+				<mx:Button
+					upSkin="@Embed('flexResources/menu.jpg')" 
+					overSkin="@Embed('flexResources/menu.jpg')"
+					downSkin="@Embed('flexResources/menu.jpg')" 
+					disabledSkin="@Embed('flexResources/menu.jpg')"
+					fontSize="14" textRollOverColor="#ff0000" textSelectedColor="#ffffff" textAlign="left" fontWeight="bold" />
+			</fx:Component>
+		</mx:headerRenderer>
+		<mx:VBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="0" label="接警信息" verticalScrollPolicy="auto" >
+			<s:Scroller width="100%" height="100%">
+				<s:VGroup width="100%" height="100%">
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="事故时间" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:DateTime id="sgsj" width="160" dateTime="{new Date}" enabled="true" hasTime="true"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label  width="35%" height="100%" text="事故地点" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="sgdd" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="事故位置" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput  id="sgwz" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="事故类型和性质" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="sgxz" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="事故起因&#13;及简要经过" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="sgqy" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="事故规模&#13;及扩展趋势" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="sggm" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="人员伤亡及设施损坏初步情况" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="rysw" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="现场救援情况" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="xcjy" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="报警人" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="bjr" width="160"/>
+				</mx:HBox>
+				<mx:HRule width="100%" height="1"/>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+					<s:Label width="35%" height="100%" text="报警人联系方式" fontSize="13" textAlign="center" verticalAlign="middle"/>
+					<ui1:QTextInput id="bjrlxfs" width="160"/>
+				</mx:HBox>
+				<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0" horizontalAlign="center">
+					<s:Button label="保存" click="saveHandler(event)" skinClass="com.skins.tdt.ButtonSkin" width="60" fontSize="14"  />
+				</mx:HBox>
+				</s:VGroup>
+			</s:Scroller>
+		</mx:VBox>
+		<mx:VBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="1" label="事故定位">
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+				<s:Label width="30%" height="100%" text="事件类型" fontSize="13" textAlign="center" verticalAlign="middle"/>
+				<s:ComboBox width="70%" height="28" id="sglx" creationComplete="sglx_creationCompleteHandler(event)"   labelFunction="fieldTypeLabel" styleName="combo"  requireSelection="true" />
+			</mx:HBox>
+			<mx:HRule width="100%" height="1"/>
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0">
+				<s:Label width="30%" height="100%" text="企业名称" fontSize="13" textAlign="center" verticalAlign="middle"/>
+				<mx:HBox width="70%" height="100%">
+					<s:TextInput id="mccx" width="85%" height="24" keyDown="txtKeyDown(event)"/>
+					<s:Spacer width="5" height="0" />
+					<s:Image source="flexResources/png/aq_searchMini.png" buttonMode="true" click="queryClickHandler(event)" />
+				</mx:HBox>
+			</mx:HBox>
+			<s:SkinnableContainer width="100%" height="100%" skinClass="com.skins.tdt.SkinnableContainerSkin">
+				<s:layout>
+					<s:HorizontalLayout/>
+				</s:layout>
+				<mx:DataGrid id="resultGrid" width="100%" height="100%" dataProvider="{queryData}" doubleClickEnabled="true" doubleClick="resultGrid_doubleClickHandler(event)">
+					<mx:columns>
+						<mx:DataGridColumn dataField="ID" headerText="ID" visible="false" width="100" headerWordWrap="true"/>
+						<mx:DataGridColumn dataField="SZD" headerText="SZD" visible="false" width="100" headerWordWrap="true"/>
+						<mx:DataGridColumn dataField="NAME" headerText="名称" width="100" showDataTips="true" headerWordWrap="true"/>
+					</mx:columns>
+				</mx:DataGrid>
+			</s:SkinnableContainer>
+		</mx:VBox>
+		<mx:HBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="1" label="应急物资">
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0" horizontalAlign="center">
+				<s:Label  text="搜索半径" fontSize="14" textAlign="center" verticalAlign="middle"/>
+				<s:TextInput id="radius" text="5" maxChars="3" width="40" keyDown="radiusKeyDown(event)"/>
+				<s:Label text="公里"  fontSize="14"/>
+				<s:Button label="确定" click="{searchFun()}" skinClass="com.skins.tdt.ButtonSkin" width="60" fontSize="14" />
+			</mx:HBox>
+		</mx:HBox>
+		<mx:VBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="1" label="其他应急机构">
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0" horizontalAlign="center">
+				<s:Label  text="搜索半径" fontSize="14" textAlign="center" verticalAlign="middle"/>
+				<s:TextInput id="radiusYjwl" text="5" maxChars="3" width="40" keyDown="radiusYjwlKeyDown(event)"/>
+				<s:Label text="公里"  fontSize="14"/>
+				<s:Button label="确定" click="{searchYjwlFun()}" skinClass="com.skins.tdt.ButtonSkin" width="60" fontSize="14" />
+			</mx:HBox>
+		</mx:VBox>
+		<mx:VBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="1" label="应急专家">
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0" horizontalAlign="center">
+				<s:Button label="全省应急专家库" click="expert_clickHandler(event)" skinClass="com.skins.tdt.ButtonSkin" width="130" />
+			</mx:HBox>
+		</mx:VBox>
+		<mx:VBox width="100%" height="100%" borderAlpha="1" borderVisible="true"  cornerRadius="5" verticalGap="1" label="应急流程">
+			<mx:HBox width="100%" height="30" verticalAlign="middle" horizontalGap="0" horizontalAlign="center">
+				<s:Button label="查看应急处置" click="yjcz_clickHandler(event)" skinClass="com.skins.tdt.ButtonSkin" width="130" />
+			</mx:HBox>
+		</mx:VBox>
+	</mx:Accordion>
+</s:BorderContainer>

+ 351 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/ResShowModel.mxml

@@ -0,0 +1,351 @@
+<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
+				   xmlns:s="library://ns.adobe.com/flex/spark"
+				   xmlns:mx="library://ns.adobe.com/flex/mx"
+				   x="0" y="0" width="230" height="100%" backgroundColor="#4fafe4" borderAlpha=".5"
+				   borderColor="#afd3f1" borderWeight="1" creationComplete="init();"
+				   xmlns:tree="com.tree.*"
+				   xmlns:ui="com.xt.hb.views.ui.*" xmlns:ui1="com.xt.hb.ui.*" >
+	
+	<fx:Style>
+		@namespace s "library://ns.adobe.com/flex/spark";
+		@namespace mx "library://ns.adobe.com/flex/mx";
+		@namespace ic "http://www.supermap.com/iclient/2010";
+		@namespace is "http://www.supermap.com/iserverjava/2010";
+		.infoStyleName
+		{
+			backgroundColor:#f8facb;
+		}
+		
+		
+		
+	</fx:Style>
+	<fx:Script source="resLocation.as"/>
+	<fx:Script>
+		<![CDATA[
+			import com.esri.ags.events.DetailsEvent;
+			import com.esri.ags.events.ExtentEvent;
+			import com.esri.ags.events.ZoomEvent;
+			import com.esri.ags.geometry.MapPoint;
+			import com.esri.ags.layers.ArcGISDynamicMapServiceLayer;
+			import com.esri.ags.layers.FeatureLayer;
+			import com.esri.ags.layers.Layer;
+			import com.esri.ags.layers.supportClasses.LayerDetails;
+			import com.esri.ags.layers.supportClasses.LayerInfo;
+			import com.esri.ags.renderers.SimpleRenderer;
+			import com.esri.ags.symbols.PictureMarkerSymbol;
+			import com.supermap.framework.events.BaseEventDispatcher;
+			import com.xt.hb.events.MenusEvent;
+			import com.xt.hb.events.NavigationEvent;
+			import com.xt.hb.entity.T_R_MENU;
+			
+			import mx.core.FlexGlobals;
+			import mx.events.FlexEvent;
+			
+			import spark.events.IndexChangeEvent;
+			import mx.collections.ArrayCollection;
+			
+			
+			
+			private var isXZ:Boolean=false;
+			
+			//港区规划xml
+			private var M_GKGH_GQGH_XML:XML=null;
+			//岸线规划xml
+			private var M_GKGH_AX_XML:XML=null;
+			
+			
+			
+			/**在指定港口范围内的所有港区**/
+			private var gqArrInGK:Array=null;
+			
+			/**市界**/
+			private var sjArr:Array=null;
+			
+			/**港口标注**/
+			private var gkptArr:Array=null;
+			
+			[Bindable]
+			private var menuArr:ArrayCollection = new ArrayCollection();
+			[Bindable]
+			[Embed(source="flexResources/views/folderClosed.png")]
+			private var myFolderClosedIcon:Class;
+			
+			[Bindable]
+			[Embed(source="flexResources/views/FolderOpened.png")]
+			private var myFolderOpenedIcon:Class;
+			
+			[Bindable] 
+			
+			private var gkzyUrl:String;
+			
+			private function init():void
+			{
+				var objGkxz:T_R_MENU = new T_R_MENU();
+				objGkxz.ID="1";
+				objGkxz.CDID = "M_ZYZS_GKDW";
+				objGkxz.CDTB = "flexResources/yjpt/list/iconpng.png";
+				objGkxz.CDMC = "港口现状";
+				menuArr.addItem(objGkxz);
+				var objSpjk:T_R_MENU = new T_R_MENU();
+				objSpjk.ID="1";
+				objSpjk.CDID = "M_ZYZS_SPJK";
+				objSpjk.CDTB = "flexResources/map/sxt.png";
+				objSpjk.CDMC = "视频监控";
+				menuArr.addItem(objSpjk);
+				this.initSpjkTree();
+				//港口现状定位树:港口、港区、经营人
+				this.initLocationTree(true);
+			}
+			
+			public function loadLayersAndFeatures():void
+			{
+			}
+			
+			private function locationHandle(event:Event):void
+			{
+				this.locationAction(event.currentTarget.selectedItem);
+			}
+			/**
+			 * 视频监控节点双击
+			 */
+			private function spjkHandle(event:Event):void
+			{
+				this.spjkAction(event.currentTarget.selectedItem);
+			}
+			/**
+			 * 视频监控节点图标双击
+			 */
+			private function spjkIconHandle(event:Event):void
+			{
+				//this.spjkIconAction(item);
+				this.spjkIconAction(event.currentTarget.selectedItem);
+			}		
+			[Embed(source="flexResources/map/sxt.png")]  
+			public var sxtIcon:Class;  
+			
+			public var nullIcon:Class;  
+			
+			// 根据结点的属性设置节点图标  
+			private function setIcon(item:Object):*
+			{
+				if(item.attr=="1")
+				{
+					return sxtIcon;
+				} else {
+					return nullIcon;
+				}
+			}
+			
+			private function expandJSYTreeNodes():void
+			{
+				
+				
+			}
+			
+			private function menuInit():void
+			{
+				//弹出框隐藏
+				//FlexGlobals.topLevelApplication.axbw.visible=false;
+				
+				//左侧菜单内容不可见
+//				this.locationModel.visible = false;
+//				this.locationModel.includeInLayout = false;
+				
+				this.spjkModel.visible=false;
+				this.spjkModel.includeInLayout=false;
+			}
+			
+			
+			protected function menuChangeHandler(event:IndexChangeEvent):void
+			{
+				menuInit();
+				//this.map.infoWindow.hide();
+				var uid:String = (this.menuBar.selectedItem).CDID;
+				// 如果隐藏海事船舶将关闭更新定时器, 暂不做刷新处理
+			/* 	if(uid!="M_ZYZS_HSCB"
+					&&this.updateHscbTimer.running){
+					this.updateHscbTimer.stop() ;
+				} */
+				if(uid == "M_ZYZS_GKDW")
+				{
+					this.locationModel.visible = true;
+					this.locationModel.includeInLayout = true;
+					this.spjkModel.visible=false;
+					this.spjkModel.includeInLayout=false;	
+					//FlexGlobals.topLevelApplication.axbw.visible=true;
+				}
+				else if (uid=="M_ZYZS_SPJK")
+				{
+					this.spjkModel.visible=true;
+					this.spjkModel.includeInLayout=true;	
+					this.locationModel.visible = false;
+					this.locationModel.includeInLayout = false;				
+				}
+				
+			}
+			/**
+			 *左侧菜单隐藏
+			 */  
+			protected function hideWin():void
+			{
+				BaseEventDispatcher.getInstance().dispatchEvent(
+					new NavigationEvent(NavigationEvent.MENUCHAGE,"leftHide"));
+			}
+						
+			//扩展集疏运model的那棵树
+			protected function jsyModel_contentCreationCompleteHandler(event:FlexEvent):void
+			{
+//				
+			}
+			/**
+			 * 港口视频树点击事件
+			 */ 
+			protected function videoTreeClickHandler(event:MouseEvent):void{
+			}
+			
+			private function sourceIsCheckBox(event:Event):Boolean{
+				if(event.target.hasOwnProperty("className")&&
+					event.target.className=="CheckBox"){
+					return true ;
+				}
+				return false ;
+			}
+			public function isPortPlanShow():Boolean{
+				return true ;
+			}
+			protected function videoDoubleClickHandler(event:MouseEvent):void{
+			}
+			
+			/**
+			 * 危货选中事件
+			 */ 
+			protected function changeTree():void{
+				if(chkWH.selected) {
+					this.initLocationTree(true);
+				} else {
+					this.initLocationTree(false);
+				}
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:HGroup width="100%" height="100%" gap="0">
+		
+		
+		<s:BorderContainer width="27" height="100%" backgroundColor="#cce8ff" borderVisible="false">
+			
+			<s:Scroller width="100%" height="100%">
+				<s:Group id="myScroller">
+					<s:VGroup width="27" height="40" gap="0">
+						<s:BorderContainer width="21" height="18" backgroundColor="#c6e1ec"
+										   borderAlpha="0" buttonMode="true" click="hideWin();"
+										   useHandCursor="true">
+							<s:Image buttonMode="true" source="flexResources/ys_46.png"
+									 useHandCursor="true"/>
+						</s:BorderContainer>
+						<s:ButtonBar id="menuBar" buttonMode="true"
+									 change="menuChangeHandler(event);"
+									 dataProvider="{this.menuArr}" iconField="CDTB"
+									 labelField="CDMC" requireSelection="true"
+									 skinClass="com.skins.tdt.LeftMenuSkin" useHandCursor="true"> 
+							<s:layout>
+								<s:VerticalLayout gap="-1" rowHeight="120" variableRowHeight="false"/>
+							</s:layout>
+						</s:ButtonBar>
+					</s:VGroup>
+				</s:Group>
+			</s:Scroller>
+			
+		</s:BorderContainer>
+		
+		
+		
+		
+		<!--港口现状-->
+		<s:BorderContainer id="locationModel" visible="true" width="100%" height="100%"
+						   backgroundColor="#F5FAFE" borderVisible="false" includeInLayout="true">
+			<s:VGroup width="100%" height="100%">
+				<s:BorderContainer visible="true" width="100%" height="26"
+								   backgroundColor="#CEDBEF" borderVisible="false" includeInLayout="true">
+					<s:Label paddingLeft="5" paddingTop="7" height="26" 
+							 fontSize="12">危货企业</s:Label><mx:CheckBox 
+							 paddingLeft="55" id="chkWH" selected="true"
+							 width="100%" height="26" label="" click="changeTree()"/>
+				</s:BorderContainer>
+				<ui1:TreeWithLines id="locationTree" width="100%" height="100%" borderVisible="false"
+							   click="changeTreeNodeState(event)" contentBackgroundColor="#F5FAFE"
+							   dataProvider="{this.areaArr}" defaultLeafIcon="{null}"
+							   disclosureClosedIcon="{myFolderClosedIcon}"
+							   disclosureOpenIcon="{myFolderOpenedIcon}"
+							   doubleClick="locationHandle(event);" doubleClickEnabled="true"
+							   folderClosedIcon="{null}" folderOpenIcon="{null}" 
+							   showDataTips="true" dataTipField="name" labelField="name"
+							   rowHeight="30"/>
+			</s:VGroup>
+		</s:BorderContainer>
+		
+		<!-- 集疏运
+		<s:BorderContainer id="jsyModel" visible="false" width="100%" height="100%"
+						   backgroundColor="#F5FAFE" borderVisible="false"
+						   contentCreationComplete="jsyModel_contentCreationCompleteHandler(event)"
+						   includeInLayout="false">
+			<s:Label  width="35%" height="100%" text="地点2" fontSize="13" textAlign="center" verticalAlign="middle"/>
+		</s:BorderContainer>-->
+		
+		<!-- 海事船舶
+		<s:BorderContainer id="hsdtModel" visible="false" width="100%" height="100%"
+						   backgroundColor="#F5FAFE" borderVisible="false" includeInLayout="false">
+			<s:VGroup width="100%" height="100%">
+				<ct:CheckBoxTree id="tree_HSCB" width="100%" height="100%" borderVisible="false"
+								 checkBoxStateField="STATE" contentBackgroundColor="#F5FAFE"
+								 dataProvider="{this.hsdtData}" defaultLeafIcon="{null}"
+								 disclosureClosedIcon="{myFolderClosedIcon}"
+								 disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}"
+								 folderOpenIcon="{null}" imagePathField="CDTB"
+								 itemClick="checkBoxHSCB_click(event)" labelField="CDMC"
+								 rowHeight="30" showCheckboxField="showCheckbox" showRoot="false"/>
+				
+			</s:VGroup>
+		</s:BorderContainer>-->
+		<!--海事船舶-->
+		
+		<!--港口规划
+		<s:BorderContainer id="gqghModel" visible="false" width="100%" height="100%"
+						   backgroundColor="#F5FAFE" borderVisible="false" includeInLayout="false">
+		
+		</s:BorderContainer>-->	
+		<!-- 港口视频
+		<s:BorderContainer id="spjkModel" visible="false" width="100%" height="100%"
+						   backgroundColor="#F5FAFE" borderVisible="false" includeInLayout="false">
+			<ui1:TreeWithLines id="spjkTree" width="100%" height="100%" borderVisible="false"
+				   click="changeTreeNodeState(event)" contentBackgroundColor="#F5FAFE"
+				   dataProvider="{this.areaVideoArr}" defaultLeafIcon="{null}"
+				   iconFunction="setIcon" buttonMode="true"
+				   disclosureClosedIcon="{myFolderClosedIcon}"
+				   disclosureOpenIcon="{myFolderOpenedIcon}"
+				   doubleClick="spjkHandle(event);" doubleClickEnabled="true"
+				   folderClosedIcon="{null}" folderOpenIcon="{null}"  
+				   showDataTips="true" dataTipField="name" labelField="name"
+				   rowHeight="30"/>
+		</s:BorderContainer>-->	
+		<!-- 港口视频-->	
+		<s:BorderContainer id="spjkModel" visible="false" width="100%" height="100%"
+		backgroundColor="#F5FAFE" borderVisible="false" includeInLayout="false">
+		<ui1:TreeWithIcon id="spjkTree" width="100%" height="100%" borderVisible="false"
+		click="changeTreeNodeState(event)" contentBackgroundColor="#F5FAFE"
+		dataProvider="{this.areaVideoArr}" defaultLeafIcon="{null}"
+		
+		disclosureClosedIcon="{myFolderClosedIcon}"
+		disclosureOpenIcon="{myFolderOpenedIcon}"
+		doubleClick="spjkHandle(event);" doubleClickEnabled="true"
+		folderClosedIcon="{null}" folderOpenIcon="{null}"  
+		showDataTips="true" dataTipField="name" labelField="name"
+		rowHeight="30"/>
+		</s:BorderContainer>
+		
+		
+		
+		
+	</s:HGroup>
+</s:BorderContainer>

+ 171 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/TCKZModel.mxml

@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
+			   xmlns:s="library://ns.adobe.com/flex/spark" 
+			   xmlns:mx="library://ns.adobe.com/flex/mx" 
+			   xmlns:tree="com.tree.*"
+			   skinClass="com.skins.tdt.TitleWinSkin"
+			   title="图层控制"   close="{PopUpManager.removePopUp(this);}"
+			   width="260" height="410" xmlns:common="port.common.*">
+
+	<fx:Style>
+		.infoStyleName
+		{
+			backgroundColor:#f8facb;
+		}
+		
+	</fx:Style>
+	
+	<fx:Declarations>
+		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
+	</fx:Declarations>
+	
+	<fx:Script>
+		<![CDATA[
+			
+			import mx.events.FlexEvent;
+			
+			[Bindable]
+			[Embed(source="flexResources/views/folderClosed.png")]
+			private var myFolderClosedIcon:Class;
+			
+			[Bindable]
+			[Embed(source="flexResources/views/FolderOpened.png")]
+			private var myFolderOpenedIcon:Class;
+			
+			import com.supermap.framework.events.BaseEventDispatcher;
+			import com.xt.hb.events.TCKZCheckBoxClickEvent;
+			import mx.managers.PopUpManager;
+			import spark.events.IndexChangeEvent;
+			import mx.events.FlexEvent;
+			import mx.core.FlexGlobals;
+			
+			public var  checkBoxClickHandler:Function = null;
+			
+			
+			/* private function resetGridHeight(event:Event):void
+			{
+				changeHeight(event.target);
+			} */
+			
+			/* public function changeHeight(data:Object):void
+			{
+				if(data is Canvas)
+				{
+					var can:Canvas = data as Canvas;
+					if(can.getChildren().length > 0)
+					{
+					
+						 if(can.id == "grid_ZYMTBW")
+						 {
+							 this.tree_ZYMTBW.callLater(expandBWTreeNodes);
+						 }
+					
+					}
+				}
+			}  */
+			
+			private function expandAXTreeNodes():void
+			{
+				//this.tree_AXZY.expandChildrenOf(FlexGlobals.topLevelApplication.M_ZYZS_AX_XML,true);
+			}
+			
+			/* private function expandBWTreeNodes():void
+			{
+				this.tree_ZYMTBW.expandChildrenOf(FlexGlobals.topLevelApplication.M_ZYZS_BW_XML,true);
+			} */
+	
+			private function checkBox_click(event:Event):void
+			{
+//				BaseEventDispatcher.getInstance().dispatchEvent(new TCKZCheckBoxClickEvent(TCKZCheckBoxClickEvent.TCKZ_TreeNodeCheckBox_Click,event.currentTarget));
+				if(null != checkBoxClickHandler)
+				{
+					checkBoxClickHandler(event);
+				}
+			}
+		
+			
+			
+		
+			
+		]]>
+	</fx:Script>
+	<s:VGroup width="100%" height="100%" >
+		<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@checkState"
+							  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML}" defaultLeafIcon="{null}"
+							  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+							  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@cdmc" legendField="@cdtb"
+							  legendHeight="32" legendType="ICON" legendWidth="50" rowHeight="32" showRoot="false"/>
+	</s:VGroup>
+	
+	<!--<mx:Accordion id="accordion" visible="true" width="100%" height="100%" accentColor="0" borderVisible="false" backgroundColor="#F5FAFE"
+				  headerHeight="32" historyManagementEnabled="false" includeInLayout="true">
+		
+		<mx:Canvas id="grid_GQFB" width="100%" height="100%" label="港区、作业区" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off" backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_GQFB_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+	<mx:Canvas id="grid_AXZY" width="100%" height="100%" label="岸线资源" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off" backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree id="tree_AXZY" width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_AX_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}"  contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendRight="18" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+		<mx:Canvas id="grid_MDZY" width="100%" height="100%" label="锚地资源" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off"  backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_MD_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+		<mx:Canvas id="grid_ZYMTBW" width="100%" height="100%" label="码头泊位" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off" backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree id="tree_ZYMTBW" width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_BW_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendRight="18" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+			
+		</mx:Canvas>
+		
+		<mx:Canvas id="grid_MTHF" width="100%" height="100%" label="港口经营人" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off" backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_MTHF_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+		<mx:Canvas id="grid_AQXTTC" width="100%" height="100%" label="安全系统" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off"  backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_AQXTTC_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendType="ICON" showRoot="false"/>
+		</mx:Canvas>
+		<mx:Canvas id="grid_JYXTTC" width="100%" height="100%" label="经营系统" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off"  backgroundColor="#F5FAFE"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_JYXTTC_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}" contentBackgroundColor="#F5FAFE"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+		
+		<mx:Canvas id="grid_SP" width="100%" height="100%" label="视频" creationComplete="resetGridHeight(event);" horizontalScrollPolicy="off"
+				   verticalScrollPolicy="auto">
+			<tree:CheckLegendTree id="tree_SP" width="100%" height="100%" borderVisible="false" checkBoxStateField="@STATE"
+								  dataProvider="{FlexGlobals.topLevelApplication.M_ZYZS_SP_XML}" defaultLeafIcon="{null}"
+								  disclosureClosedIcon="{myFolderClosedIcon}" disclosureOpenIcon="{myFolderOpenedIcon}" folderClosedIcon="{null}"
+								  folderOpenIcon="{null}" itemClick="checkBox_click(event)" labelField="@CDMC" legendField="@CDTB"
+								  legendHeight="32" legendRight="18" legendType="ICON" legendWidth="32" rowHeight="32" showRoot="false"/>
+		</mx:Canvas>
+	</mx:Accordion>-->
+</s:TitleWindow>

+ 34 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/TypeBase.as

@@ -0,0 +1,34 @@
+package com.xt.hb.views
+{
+	[Bindable]
+	public class TypeBase
+	{
+		public function TypeBase()
+		{
+		}
+		
+		public static function isNumberType(t:String):Boolean
+		{
+			return t!=null&&(t==DOUBLE||t==INT);
+		}
+		
+		public static var DT_FMT_1:String="YYYY-MM-DD";
+		public static var DT_RESTRICT_1:String="0-9\\-";
+		
+		//type
+		public static var DOUBLE:String = "double";
+		public static var INT:String = "int";
+		public static var EMAIL:String="email";
+		public static var EN:String="en";
+		public static var CN:String="cn";
+		
+		public static var EN_RESTRICT:String="a-zA-Z0-9~!@#$%\\^&*()_+=\\-:;'<>,./?\\\&quot;`[]{}|' '";
+		public static var INT_RESTRICT:String="0-9";
+		public static var NUM_RESTRICT:String="0-9.";
+		public static var EMAIL_RESTRICT:String="a-zA-Z0-9.@_\\-";
+		
+		public static var CHECKBOX:String = "checkbox";
+		public static var LINKBUTTON:String = "linkbutton";
+		public static var MULTIBUTTON:String = "multibutton";
+	}
+}

+ 420 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/resLocation.as

@@ -0,0 +1,420 @@
+import com.esri.ags.FeatureSet;
+import com.esri.ags.Graphic;
+import com.esri.ags.Map;
+import com.esri.ags.geometry.MapPoint;
+import com.esri.ags.layers.GraphicsLayer;
+import com.esri.ags.symbols.PictureMarkerSymbol;
+import com.xt.hb.utils.ConstUtil;
+import com.xt.hb.utils.GisUtils;
+import com.xt.hb.utils.MapUtils;
+import com.xt.hb.utils.RemoteUtils;
+import com.xt.hb.utils.ServicesUtility;
+import com.xt.hb.utils.GlobalData;
+
+import flash.events.Event;
+import flash.events.MouseEvent;
+import flash.net.navigateToURL;
+
+import mx.collections.ArrayCollection;
+import mx.controls.Alert;
+import mx.controls.Tree;
+import mx.rpc.events.AbstractEvent;
+import mx.rpc.events.FaultEvent;
+import mx.rpc.events.ResultEvent;
+
+// 港口现状树
+[Bindable]
+private var areaArr:ArrayCollection = new ArrayCollection();
+//视频区域树
+[Bindable]
+private var areaVideoArr:ArrayCollection;
+[Bindable]
+private var gkarray:ArrayCollection=new ArrayCollection();
+
+private function changeTreeNodeState(event:Event):void
+{
+	var tree:Tree = event.currentTarget as Tree;
+	var item:Object = tree.selectedItem;
+	
+	if(tree.dataDescriptor.isBranch(item)){
+		tree.expandItem(item,!tree.isItemOpen(item),true);
+	}
+	
+}
+//快速定位  
+private function initLocationTree(isWh:Boolean):void
+{
+	getGkgqqyTree(isWh);
+}
+private function getGkgqqyTree(isWh:Boolean):ArrayCollection
+{
+	var flg:String = "false";
+	if(isWh) {
+		flg = "true";
+	}
+	RemoteUtils.callRemote("aisCtl","queryGkgqqyTree",function(e:AbstractEvent):void{
+		if(e is FaultEvent){
+			Alert.show("ERROR Call aisCtl queryGkgqqyTree");
+		}else {
+			var resultObj:Object = ResultEvent(e).result as Object;
+			areaArr = dealGkgqjyrResult(resultObj);
+			locationTree.validateNow(); //验证并更新此对象的属性和布局,并重绘该对象(如果需要)。 
+			//locationTree.selectedIndex = 0;
+			// 展开单项
+			locationTree.expandItem(locationTree.dataProvider[0],true);
+			//全部展开 
+			//locationTree.expandChildrenOf(locationTree.selectedItem,true);
+			//locationTree.callLater(function ():void{locationTree.expandChildrenOf(locationTree.selectedItem,true);});
+			//locationTree.selectedIndex = 0;
+			//locationTree.expandChildrenOf(locationTree.selectedItem,true);
+		}
+	}, flg);
+	var ret:ArrayCollection = new ArrayCollection();
+	return ret ;
+}
+
+private function dealGkgqjyrResult(resultObj:Object):ArrayCollection {
+	var ret:ArrayCollection = new ArrayCollection();
+	for each(var obj:Object in resultObj) {
+		if(null != obj.children && obj.children.length > 0) {
+			dealGkgqjyrResult(obj.children);
+		} else {
+			obj.children = null;
+		}
+	}
+//	for each(var obj:Object in resultObj) {
+//		if(null != obj.children && obj.children.length > 0) {
+//			for each(var obj1:Object in obj.children) {
+//				if(null != obj1.children && obj1.children.length > 0) {
+//					for each(var obj2:Object in obj1.children) {
+//						obj2.children = null;
+//						obj2.type = "JYR";
+//					}
+//				} else {
+//					obj1.children = null;
+//				}
+//				obj1.type = "GQ";
+//			}
+//		}
+//		obj.type = "GK";
+//		//ret.addItem(obj);
+//	}
+	ret = resultObj as ArrayCollection;
+	return ret ;
+}
+
+public function locationAction(item:Object):void
+{
+	var map:Map = FlexGlobals.topLevelApplication.getMap();
+	var gisid:String = item.attr;
+	var type:String = item.type;
+	if(typeof(item.attr) == "object") {
+		//Alert.show("定位失败, 未关联GIS信息!");
+		return;
+	}
+	trace(type + gisid);
+	switch(type)
+	{
+		case "1":
+			GisUtils.callGisServer(GlobalData.gkLayerUrl,onGkAreaResult,"ID="+gisid);
+			break;
+		case "2":
+			GisUtils.callGisServer(GlobalData.gqLayerUrl,onGqAreaResult,"ID="+gisid);
+			break;
+		case "3":
+			GisUtils.callGisServer(GlobalData.jyrLayerUrl,onJyrCentResult,"ID="+gisid);
+			break;
+	}
+	
+}
+
+/**
+ * 港口查询结果
+ */
+private function onGkAreaResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GK);
+	layer.clear();
+	var map:Map = FlexGlobals.topLevelApplication.getMap();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		// 定位
+		var centerPoint:MapPoint = graphic.geometry.extent.center;
+		map.level = 10;
+		map.centerAt(centerPoint);
+		// 加图层
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.3,0xFFFF00,5);
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 港口查询结果
+ */
+private function onGqAreaResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GQ);
+	var map:Map = FlexGlobals.topLevelApplication.getMap();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		// 定位
+		var centerPoint:MapPoint = graphic.geometry.extent.center;
+		map.level = 12;
+		map.centerAt(centerPoint);
+		// 加图层
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0x7030A0,2);
+		graphic.addEventListener(MouseEvent.CLICK,gqMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER, MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT, gqMouseOut);
+		//layer.add(graphic);
+		// 触发弹出事件,显示港区信息
+		showGqInfo(graphic);
+	}
+}
+
+/**
+ * 海事图形移出事件
+ */ 
+private function gqMouseOut(e:MouseEvent):void
+{
+	var g:Graphic=e.currentTarget as Graphic;
+	g.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF, 0.3, 0x7030A0, 3);
+}
+
+/**
+ * 港区图形点击事件
+ */ 
+public function gqMouseClick(e:MouseEvent):void
+{
+	var g:Graphic=e.currentTarget as Graphic;
+	// 显示港区信息
+	showGqInfo(g);
+}
+
+/**
+ * 显示港区信息
+ */ 
+public function showGqInfo(g:Graphic):void
+{
+	var obj:Object = g.attributes;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleGq",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleGq");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_GQ,g,resultObj);
+		}
+	},obj.ID);
+}
+
+/**
+ * 经营人数据双击事件
+ */
+private function onJyrCentResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var map:Map = FlexGlobals.topLevelApplication.getMap();
+	// 获取图层
+	var jyrLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYR);
+	var wxhwLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_WXHWQY);
+	var zdwxyLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_ZDWXYQY);
+	var graphic:Graphic;
+	if(featureSet.features.length > 0) {
+		graphic = featureSet.features[0];
+		var type:int = graphic.attributes.TYPE;
+		var tempLayer:GraphicsLayer = null;
+		tempLayer = jyrLayer;
+		//   >=8 重大危险源    >=5 危货企业     >=0 普通企业
+		var imgName:String = "";
+		if(type >= 8) {
+			tempLayer = zdwxyLayer;
+			imgName = "aq_zdwxy.gif";
+		} else if(type >= 5) {
+			tempLayer = wxhwLayer;
+			imgName = "aq_wxhwqy.png";
+		} else {
+			tempLayer = jyrLayer;
+			imgName = "aq_jyr.png";
+		}
+		// 定位
+		var centerPoint:MapPoint = graphic.geometry.extent.center;
+		map.level = 15;
+		map.centerAt(centerPoint);
+		// 加图层
+		var cent:Graphic = new Graphic();
+		cent.geometry = centerPoint;
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/png/"+imgName, 25, 25);
+		cent.useHandCursor=true;
+		cent.buttonMode = true;
+		cent.symbol = symbol;
+		cent.attributes = graphic.attributes;
+		cent.addEventListener(MouseEvent.CLICK,jyrCentMouseClick);
+		cent.addEventListener(MouseEvent.DOUBLE_CLICK, function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			// 定位
+			var mp:MapPoint = new MapPoint(graphic.geometry["x"],graphic.geometry["y"],null);
+			map.level = 16;
+			map.centerAt(mp);
+		});
+		tempLayer.add(cent);
+		// 显示经营人
+		showJyrInfo(graphic);
+	}
+}
+
+/**
+ * 经营人图形点击事件
+ */ 
+public function jyrCentMouseClick(e:MouseEvent):void
+{
+	var g:Graphic=e.currentTarget as Graphic;
+	// 显示经营人
+	showJyrInfo(g);
+}
+
+/**
+ * 显示经营人
+ */ 
+public function showJyrInfo(g:Graphic):void
+{
+	var obj:Object = g.attributes;
+	trace(obj.ID);
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleJyr",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleJyr");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_JYR,g,resultObj)
+		}
+	},obj.ID);
+}
+
+/**
+ * 初始化视频树列表
+ */
+private function initSpjkTree():void
+{
+//	areaVideoArr = new ArrayCollection([
+//		{name:"主控制中心",id:"all" ,fid:"f1" ,CDTB:"" ,STATE:"1" ,CDID:"",
+//			children:[
+//				{name:"武汉市港航海事局",id:"1547" ,fid:"all" ,CDTB:"" ,STATE:"1" ,CDID:"WH"},
+//				{name:"宜昌市港航海事局",id:"1400" ,fid:"all" ,CDTB:"" ,STATE:"1" ,CDID:"YC"}]
+//		}
+//	]);
+	RemoteUtils.callRemote("aisCtl","querySpTree",function(e:AbstractEvent):void{
+		if(e is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySpTree");
+		}else {
+			var resultObj:Object = ResultEvent(e).result as Object;
+			areaVideoArr = dealSpResult(resultObj);
+			//验证并更新此对象的属性和布局,并重绘该对象(如果需要)。 
+			spjkTree.validateNow();
+			//spjkTree.selectedIndex = 0;
+			// 展开单项
+			spjkTree.expandItem(spjkTree.dataProvider[0],true);
+		}
+	});
+}
+
+private function dealSpResult(resultObj:Object):ArrayCollection {
+	var iconUrl:String = "flexResources/map/sxt.png";
+	var ret:ArrayCollection = new ArrayCollection();
+	for(var i:int=resultObj.length-1;i>=0;i--) {
+		var obj:Object = resultObj[i];
+		if("13" == obj.id || "36" == obj.id) {
+			resultObj.removeItemAt(i);
+			continue;
+		}
+		setChildren(obj);
+	}
+	ret = resultObj as ArrayCollection;
+	return ret ;
+}
+/**
+ * 递归实现树的url设置
+ */
+private function setChildren(obj:Object):void {
+	var iconUrl:String = "flexResources/map/sxt.png";
+	if(null != obj.children && obj.children.length > 0) {
+		obj.iconUrl = null;
+		for each(var obj1:Object in obj.children) {
+			setChildren(obj1);
+		}
+	} else {
+		obj.children = null;
+		if(obj.attr == "0") {
+			obj.iconUrl = null;
+		} else if(obj.attr == "1"){
+			obj.iconUrl = iconUrl;
+		} else {
+			obj.iconUrl = null;
+		}
+	}
+}
+
+/**
+ * 视频监控双击动作时间
+ */
+public function spjkAction(item:Object):void
+{
+	var id:String = item.id;
+	if("1" == item.attr) {
+		GisUtils.callGisServer(GlobalData.spLayerUrl,onSpResult,"id="+id);
+	}
+	
+}
+
+//查询成功活进行高亮显示已经数据Grid显示
+private function onSpResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var map:Map = FlexGlobals.topLevelApplication.getMap();
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_SP);
+	var resultlist:Array=new Array();
+	var graphic:Graphic;
+	if(featureSet.features.length > 0) {
+		// 定位
+		graphic = featureSet.features[0];
+		var mp:MapPoint = new MapPoint(graphic.geometry["x"],graphic.geometry["y"],null);
+		map.level = 15;
+		map.centerAt(mp);
+		// 显示坐标点,并添加点击事件
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/png/aq_sxt.png", 14, 22);
+		graphic.symbol = symbol;
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		graphic.addEventListener(MouseEvent.CLICK,spMouseClick);
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 海事视频点击事件
+ */ 
+private function spMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var url:String = GlobalData.spjkUrl + obj.ID;
+	navigateToURL(new URLRequest(url),"_blank");
+}
+
+
+/**
+ * 视频监控双击动作时间
+ */
+public function spjkIconAction(item:Object):void
+{
+	trace("ok");
+	var id:String = item.id;
+	trace(id);
+	
+}
+
+
+

+ 823 - 0
gkaq/gis-flex/trunk/src/com/xt/hb/views/show.as

@@ -0,0 +1,823 @@
+import com.esri.ags.FeatureSet;
+import com.esri.ags.Graphic;
+import com.esri.ags.geometry.MapPoint;
+import com.esri.ags.layers.GraphicsLayer;
+import com.esri.ags.symbols.CompositeSymbol;
+import com.esri.ags.symbols.LineSymbol;
+import com.esri.ags.symbols.PictureMarkerSymbol;
+import com.esri.ags.symbols.SimpleFillSymbol;
+import com.esri.ags.symbols.SimpleLineSymbol;
+import com.esri.ags.symbols.TextSymbol;
+import com.xt.hb.ais.AisMgr;
+import com.xt.hb.ais.GpsMgr;
+import com.xt.hb.events.QueryLayerEvent;
+import com.xt.hb.server.QueryAction;
+import com.xt.hb.utils.ConfigUtil;
+import com.xt.hb.utils.ConstUtil;
+import com.xt.hb.utils.GisUtils;
+import com.xt.hb.utils.GlobalData;
+import com.xt.hb.utils.MapUtils;
+import com.xt.hb.utils.RemoteUtils;
+import com.xt.hb.utils.ServicesUtility;
+
+import flash.events.Event;
+import flash.events.MouseEvent;
+import flash.net.URLRequest;
+import flash.net.navigateToURL;
+
+import mx.controls.Alert;
+import mx.controls.Tree;
+import mx.core.FlexGlobals;
+import mx.rpc.events.AbstractEvent;
+import mx.rpc.events.FaultEvent;
+import mx.rpc.events.ResultEvent;
+
+import spark.components.Label;
+
+
+private var featureStyle:Object;
+
+/**
+ * 初始化全局参数
+ */
+private function initFlexData(resultObj:Object):void {
+	GlobalData.bwLayerUrl = resultObj.BW_LAYER_URL;
+	GlobalData.cbyjLayerUrl = resultObj.CBYJ_LAYER_URL;
+	GlobalData.gkLayerUrl = resultObj.GK_LAYER_URL;
+	GlobalData.gqLayerUrl = resultObj.GQ_LAYER_URL;
+	GlobalData.jyrLayerUrl = resultObj.JYR_LAYER_URL;
+	GlobalData.mtLayerUrl = resultObj.MT_LAYER_URL;
+	GlobalData.qskLayerUrl = resultObj.QSK_LAYER_URL;
+	GlobalData.spjkUrl = resultObj.SPJK_URL;
+	GlobalData.spLayerUrl = resultObj.SP_LAYER_URL;
+	GlobalData.yjwlLayerUrl = resultObj.YJWL_LAYER_URL;
+}
+/**
+ * 图层控制checkbox勾选事件
+ */
+private function checkBox_click(event:Event):void
+{
+	if(!featureStyle)
+		featureStyle = new Object();
+	var state:String = Tree(event.currentTarget).selectedItem.@checkState;
+	var layerId:String =  Tree(event.currentTarget).selectedItem.@cdid;
+	trace(layerId);
+	trace(Tree(event.currentTarget).selectedItem.@cdmc);
+	if(layerId=="ALL")
+	{
+		checkAllLayer(state);
+		return;
+	}
+	featureStyle[layerId] = Tree(event.currentTarget).selectedItem.@CDTB;
+	if(state == "1")
+	{
+		var query:QueryAction = new QueryAction();
+		//		query.queryLayer(layerId,QueryLayerEvent.QUERY_SUCCESS,"");
+		queryLayer(layerId,QueryLayerEvent.QUERY_SUCCESS,"");
+	}
+	else
+	{
+		clearOneCheckedMenu(layerId);
+	}
+}
+
+/**
+ * 图层权限按钮处理
+ */
+private function checkAllLayer(state:String):void
+{
+	if(state == "1")
+	{
+		// 遍历所有菜单配置
+		var list:XMLList = FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML.children();
+		for each( var xmlChildren:XML in list)  
+		{
+			if(xmlChildren.@cdid=="ALL")
+			{
+				continue;
+			}
+			if("0" == xmlChildren.@checkState) {
+				xmlChildren.@checkState="1";
+				queryLayer(xmlChildren.@cdid,QueryLayerEvent.QUERY_SUCCESS,"");
+			}
+		}
+	}
+	else
+	{
+		map.infoWindow.closeButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
+		clearAllCheckedMenu();
+	}
+	return;
+}
+public function clearAllCheckedMenu():void
+{
+	var list:XMLList = FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML.children();
+	for each( var xmlChildren:XML in list)  
+	{
+		xmlChildren.@checkState = "0";
+		clearOneCheckedMenu(xmlChildren.@cdid);
+	}
+}
+
+//查询成功在地图上显示
+private function clearOneCheckedMenu(layerId:String):void
+{
+	if(ConstUtil.L_ID_AIS == layerId) {
+		// 清空船舶ais
+		AisMgr.getInstance().stopAis();
+		//解除聚焦闪烁
+		MapUtils.clearAISGraphic();
+	} if(ConstUtil.L_ID_GPS == layerId) {
+		// 清空船舶ais
+		GpsMgr.getInstance().stopGps();
+		//解除聚焦闪烁
+		MapUtils.clearAISGraphic();
+	} else if(ConstUtil.L_ID_GQ == layerId) {
+		clearGqArea();
+	}  else if(ConstUtil.L_ID_MT == layerId) {
+		clearMtArea();
+	}   else if(ConstUtil.L_ID_BW == layerId) {
+		clearBwArea();
+	} else if(ConstUtil.L_ID_JYR == layerId
+		|| ConstUtil.L_ID_AQ_WXHWQY == layerId || 
+		ConstUtil.L_ID_AQ_ZDWXYQY == layerId) {
+		/** L_ID_JYR、L_ID_AQ_WXHWQY、L_ID_AQ_ZDWXYQY */
+		var jyrChkState:String = "0";
+		var wxhwChkState:String = "0";
+		var zdwxyChkState:String = "0";
+		var list:XMLList = FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML.children();
+		// 获取check状态
+		for each( var xmlChildren:XML in list)  
+		{
+			if (ConstUtil.L_ID_JYR == xmlChildren.@cdid) {
+				jyrChkState = xmlChildren.@checkState;
+			} else if (ConstUtil.L_ID_AQ_WXHWQY == xmlChildren.@cdid) {
+				wxhwChkState = xmlChildren.@checkState;
+			} else if (ConstUtil.L_ID_AQ_ZDWXYQY == xmlChildren.@cdid) {
+				zdwxyChkState = xmlChildren.@checkState;
+			}
+		}
+		// 获取图层
+		var jyrLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYR);
+		var wxhwLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_WXHWQY);
+		var zdwxyLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_ZDWXYQY);
+		// 清空
+		if(jyrChkState == "0") {
+			jyrLayer.clear();
+			if(wxhwChkState == "0") {
+				wxhwLayer.clear();
+			}
+			if(zdwxyChkState == "0") {
+				zdwxyLayer.clear();
+			}
+		}
+	} else {
+		var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(layerId);
+		layer.clear();
+	}
+}
+
+public function queryLayer(layerId:String,eventFlag:String,
+						   where:String = null,isExpectCount:Boolean = false):void
+{
+	//	TC17	AIS		L_ID_AIS
+	//	TC18	应急网络	L_ID_YJWL
+	//	TC19	码头	L_ID_MT
+	//	TC20	经营人	L_ID_JYR
+	//	TC21	泊位	L_ID_BW
+	//	TC22	船舶预警	L_ID_CBYJ
+	//	TC22	视频	L_ID_SP
+	if(ConstUtil.L_ID_AIS == layerId) {
+		//		var mp:MapPoint = new MapPoint(114.27748,30.593765,null);
+		//		map.level = 15;
+		//		map.centerAt(mp);
+		// 当前比例尺
+		var currScale:Number =  map.scale;
+		// 显示船舶ais
+		if(currScale<250000){
+			AisMgr.getInstance().refreshAis();
+		}
+	} else if(ConstUtil.L_ID_GPS == layerId) {
+		//		var mp:MapPoint = new MapPoint(114.27748,30.593765,null);
+		//		map.level = 15;
+		//		map.centerAt(mp);
+		// 当前比例尺
+		var currScale1:Number =  map.scale;
+		// 显示船舶ais
+		GpsMgr.getInstance().refreshGps();
+	} else if(ConstUtil.L_ID_GQ == layerId) {
+		initGqArea();
+	} else if(ConstUtil.L_ID_MT == layerId) {
+		initMtArea();
+		// 港口经营人、港口危险货物企业、重大危险源企业
+	} else if(ConstUtil.L_ID_JYR == layerId
+		|| ConstUtil.L_ID_AQ_WXHWQY == layerId || 
+		ConstUtil.L_ID_AQ_ZDWXYQY == layerId) {
+		queryJyrLayer();
+	} else if(ConstUtil.L_ID_BW == layerId) {
+		initBwArea();
+	} else if(ConstUtil.L_ID_CBYJ == layerId) {
+		queryCbyjLayer();
+	} else if(ConstUtil.L_ID_SP == layerId) {
+		querySpLayer();
+	} else if(ConstUtil.L_ID_AQ_QSK == layerId) {
+		queryQskLayer();
+	}
+}
+
+/**
+ * Yjwl
+ */
+public function queryYjwlLayer():void
+{
+	GisUtils.callGisServer(GlobalData.yjwlLayerUrl,onYjwlResult,"");
+}
+
+//查询成功在地图上显示
+private function onYjwlResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_YJWL);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		//graphic.attributes.ID
+		//graphic.geometry.x
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/map/cxtj.png", 20, 20);
+		graphic.symbol = symbol;
+		layer.add(graphic);
+		//resultlist.push({"ID":graphic.attributes.OBJECTID,"STATE_NAME":graphic.attributes.STATE_NAME})
+	}
+}
+
+/**
+ * 码头
+ */
+public function queryMtLayer():void
+{
+	GisUtils.callGisServer(GlobalData.mtLayerUrl,onMtResult,"");
+}
+
+//查询成功在地图上显示
+private function onMtResult(featureSet:FeatureSet,token:Object = null):void
+{
+	mtAreaFeatureSet = featureSet;
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_MT);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0xD7CCBB,1,0xF5FAFE,1,
+			SimpleLineSymbol.STYLE_SOLID,SimpleFillSymbol.STYLE_SOLID);
+		graphic.addEventListener(MouseEvent.CLICK,mtMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0xD7CCBB,1,0xF5FAFE,1,
+				SimpleLineSymbol.STYLE_SOLID,SimpleFillSymbol.STYLE_SOLID);
+		});
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 经营人
+ */
+public function queryJyrLayer():void
+{
+	if(null == jyrAllFeatureSet) {
+		var array:Array = new Array();
+		array.push("type");
+		GisUtils.callGisServer(GlobalData.jyrLayerUrl,onJyrResult,"",array);
+	} else {
+		onJyrResult(jyrAllFeatureSet, null);
+	}
+}
+
+//查询成功在地图上显示
+private function onJyrResult(featureSet:FeatureSet,token:Object = null):void
+{
+	jyrAllFeatureSet = featureSet;
+	/** L_ID_JYR、L_ID_AQ_WXHWQY、L_ID_AQ_ZDWXYQY */
+	var jyrChkState:String = "0";
+	var wxhwChkState:String = "0";
+	var zdwxyChkState:String = "0";
+	var list:XMLList = FlexGlobals.topLevelApplication.M_ZYZS_TCKZ_XML.children();
+	// 获取check状态
+	for each( var xmlChildren:XML in list)  
+	{
+		if (ConstUtil.L_ID_JYR == xmlChildren.@cdid) {
+			jyrChkState = xmlChildren.@checkState;
+		} else if (ConstUtil.L_ID_AQ_WXHWQY == xmlChildren.@cdid) {
+			wxhwChkState = xmlChildren.@checkState;
+		} else if (ConstUtil.L_ID_AQ_ZDWXYQY == xmlChildren.@cdid) {
+			zdwxyChkState = xmlChildren.@checkState;
+		}
+	}
+	// 获取图层
+	var jyrLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYR);
+	var wxhwLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_WXHWQY);
+	var zdwxyLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_ZDWXYQY);
+	// 清空
+	jyrLayer.clear();
+	wxhwLayer.clear();
+	zdwxyLayer.clear();
+	// var jyrArr:ArrayCollection = jyrLayer.graphics as ArrayCollection;
+	// 添加坐标点
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		var type:int = graphic.attributes.TYPE;
+		var tempLayer:GraphicsLayer = null;
+		tempLayer = jyrLayer;
+		//   >=8 重大危险源    >=5 危货企业     >=0 普通企业
+		var imgName:String = "";
+		if(jyrChkState == "1") {
+			if(type >= 8) {
+				tempLayer = zdwxyLayer;
+				imgName = "aq_zdwxy.gif";
+			} else if(type >= 5) {
+				tempLayer = wxhwLayer;
+				imgName = "aq_wxhwqy.png";
+			} else {
+				tempLayer = jyrLayer;
+				imgName = "aq_jyr.png";
+			}
+		} else {
+			var flg:Boolean = false;
+			if(wxhwChkState == "1") {
+				if(type >= 5 && type < 8) {
+					tempLayer = wxhwLayer;
+					imgName = "aq_wxhwqy.png";
+					flg = true;
+				}
+			}
+			if(zdwxyChkState == "1") {
+				if(type >= 8) {
+					tempLayer = zdwxyLayer;
+					imgName = "aq_zdwxy.gif";
+					flg = true;
+				}
+			}
+			if(!flg) {
+				continue;
+			}
+		}
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		var fillSymbol:SimpleFillSymbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0xE36C09,3,
+			SimpleLineSymbol.STYLE_DASHDOT,SimpleFillSymbol.STYLE_NULL);
+		graphic.addEventListener(MouseEvent.CLICK,jyrMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0xE36C09,3,
+				SimpleLineSymbol.STYLE_DASHDOT,SimpleFillSymbol.STYLE_NULL);
+		});
+		graphic.symbol = fillSymbol;
+		//layer.add(new Graphic(graphic.geometry.extent.center, MapUtils.getTextSymbol("我要显示啦!!")));
+		tempLayer.add(graphic);
+		var centerPoint:MapPoint = graphic.geometry.extent.center;
+		var cent:Graphic = new Graphic();
+		cent.geometry = centerPoint;
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/png/"+imgName, 20, 20);
+		cent.symbol = symbol;
+		cent.attributes = graphic.attributes;
+		cent.useHandCursor=true;
+		cent.buttonMode = true;
+		cent.addEventListener(MouseEvent.CLICK,jyrMouseClick);
+		cent.addEventListener(MouseEvent.DOUBLE_CLICK, function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			// 定位
+			var mp:MapPoint = new MapPoint(graphic.geometry["x"],graphic.geometry["y"],null);
+			map.level = 16;
+			map.centerAt(mp);
+		});
+		tempLayer.add(cent);
+	}
+}
+
+/**
+ * 泊位
+ */
+public function queryBwLayer():void
+{
+	GisUtils.callGisServer(GlobalData.bwLayerUrl,onBwResult,"");
+}
+
+//查询成功在地图上显示
+private function onBwResult(featureSet:FeatureSet,token:Object = null):void
+{
+	bwAreaFeatureSet = featureSet;
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_BW);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0x76A2DF,1,0xD3E1EA,1,
+			SimpleLineSymbol.STYLE_SOLID,SimpleFillSymbol.STYLE_SOLID);
+		graphic.addEventListener(MouseEvent.CLICK,bwMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0x76A2DF,1,0xD3E1EA,1,
+				SimpleLineSymbol.STYLE_SOLID,SimpleFillSymbol.STYLE_SOLID);
+		});
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 船舶预警
+ */
+public function queryCbyjLayer():void
+{
+	GisUtils.callGisServer(GlobalData.cbyjLayerUrl,onCbyjResult,"");
+}
+
+//查询成功在地图上显示
+private function onCbyjResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_CBYJ);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF, 0.2, 0xFF0000, 2);
+		graphic.addEventListener(MouseEvent.CLICK,cbyjMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF, 0.2, 0xFF0000, 2);
+		});
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 视频
+ */
+public function querySpLayer():void
+{
+	GisUtils.callGisServer(GlobalData.spLayerUrl,onSpResult,"");
+}
+
+//查询成功在地图上显示
+private function onSpResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_SP);
+	layer.clear();
+	var resultlist:Array=new Array();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/png/aq_sxt.png", 20, 20);
+		graphic.symbol = symbol;
+		graphic.addEventListener(MouseEvent.CLICK,spMouseClick);
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 视频
+ */
+public function queryQskLayer():void
+{
+	GisUtils.callGisServer(GlobalData.qskLayerUrl,onQskResult,"");
+}
+
+//查询成功在地图上显示
+private function onQskResult(featureSet:FeatureSet,token:Object = null):void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_AQ_QSK);
+	layer.clear();
+	var resultlist:Array=new Array();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		var symbol:PictureMarkerSymbol = new PictureMarkerSymbol("flexResources/png/aq_qsk.png", 20, 20);
+		graphic.symbol = symbol;
+		graphic.addEventListener(MouseEvent.CLICK,qskMouseClick);
+		layer.add(graphic);
+	}
+}
+
+//////////////////////  图形点击事件  ////////////////////////////////////////
+
+/**
+ * 经营人图形点击事件
+ */ 
+public function qskMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleQsk",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleQsk");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_AQ_QSK,g,resultObj,e);
+		}
+	},obj.ID);
+}
+
+/**
+ * 港区图形点击事件
+ */ 
+public function gqMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleGq",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleGq");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_GQ,g,resultObj,e,true);
+		}
+	},obj.ID);
+}
+
+/**
+ * 海事码头点击事件
+ */ 
+private function mtMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleMt",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleMt");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_MT,g,resultObj,e);
+		}
+	},obj.ID);
+}
+
+/**
+ * 海事泊位点击事件
+ */ 
+private function bwMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleBw",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleBw");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_BW,g,resultObj,e);
+		}
+	},obj.ID);
+}
+
+/**
+ * 经营人图形点击事件
+ */ 
+public function jyrMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleJyr",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleJyr");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_JYR,g,resultObj,e);
+		}
+	},obj.ID);
+}
+
+/**
+ * 船舶预警点击事件
+ */ 
+private function cbyjMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var g:Graphic=e.currentTarget as Graphic;
+	// 远程调用
+	RemoteUtils.callRemote("aisCtl","querySingleCbyj",function(ae:AbstractEvent):void{
+		if(ae is FaultEvent){
+			Alert.show("ERROR Call aisCtl querySingleCbyj");
+		}else {
+			var resultObj:Object = ResultEvent(ae).result as Object;
+			// 弹出信息
+			ServicesUtility.showFeatrueToMap(
+				ConstUtil.L_ID_CBYJ,g,resultObj,e);
+		}
+	},obj.ID);
+}
+
+/**
+ * 海事视频点击事件
+ */ 
+private function spMouseClick(e:MouseEvent):void
+{
+	var obj:Object = e.currentTarget.attributes;
+	var url:String = GlobalData.spjkUrl + obj.ID;
+	navigateToURL(new URLRequest(url),"_blank");
+}
+
+
+/**
+ * 初始化港口经营人块状显示
+ */ 
+private function initGkjyrArea():void
+{
+	if(null == jyrAreaFeatureSet) {
+		var array:Array = new Array();
+		array.push("mc");
+		GisUtils.callGisServer(GlobalData.jyrLayerUrl,onJyrAreaResult,"",array);
+	} else {
+		//onJyrAreaResult(jyrAreaFeatureSet, null);
+		var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYRAREA);
+		layer.visible = true;
+	}
+}
+/**
+ * 初始化港口经营人块状显示
+ */ 
+private function clearGkjyrArea():void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYRAREA);
+	if(null != layer) {
+		layer.visible = false;
+	}
+}
+
+//查询成功活显示
+private function onJyrAreaResult(featureSet:FeatureSet,token:Object = null):void
+{
+	jyrAreaFeatureSet = featureSet;
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_JYRAREA);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		var fillSymbol:SimpleFillSymbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0xE36C09,3,
+			SimpleLineSymbol.STYLE_DASHDOT,SimpleFillSymbol.STYLE_NULL);
+		graphic.addEventListener(MouseEvent.CLICK,jyrMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0xE36C09,3,
+				SimpleLineSymbol.STYLE_DASHDOT,SimpleFillSymbol.STYLE_NULL);
+		});
+		graphic.symbol = fillSymbol;
+		//layer.add(new Graphic(graphic.geometry.extent.center, MapUtils.getTextSymbol("我要显示啦!!")));
+		layer.add(graphic);
+	}
+}
+
+
+/**
+ * 初始化港口经营人块状显示
+ */ 
+private function initGqArea():void
+{
+	var currScale:Number =  map.scale;
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GQ);
+	var state:String = ConfigUtil.getMapLayerState(ConstUtil.L_ID_GQ);
+	if(ConstUtil.CHECK_STATE_1 == state && currScale<300000 && currScale>10000) {
+		// 显示船舶ais
+		layer.visible = true;
+		if(null == gqAreaFeatureSet) {
+			GisUtils.callGisServer(GlobalData.gqLayerUrl,onGqAreaResult,"");
+		}
+	} else {
+		layer.visible = false;
+	}
+}
+/**
+ * 清空港口
+ */ 
+private function clearGqArea():void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GQ);
+	if(null != layer) {
+		//layer.clear();
+		layer.visible = false;
+	}
+}
+
+//查询成功活显示
+private function onGqAreaResult(featureSet:FeatureSet,token:Object = null):void
+{
+	gqAreaFeatureSet = featureSet;
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_GQ);
+	layer.clear();
+	for each(var graphic:Graphic in featureSet.features)
+	{
+		graphic.useHandCursor=true;
+		graphic.buttonMode = true;
+		//		var label:Label = new Label();
+		//		label.width = 60;
+		//		label.height = 30;
+		//		label.setStyle("verticalAlign","middle");
+		//		label.setStyle("horizontalAlign","middle");
+		//		label.setStyle("fontFamily","宋体");
+		//		label.setStyle("fontSize","10");
+		//		label.text = "武汉鑫源石化有限公司";
+		//		graphic.addChild(label);
+		//		graphic.automationName = "啦啦啦啦啦"; 
+		graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0x7030A0,2);
+		graphic.addEventListener(MouseEvent.CLICK,gqMouseClick);
+		graphic.addEventListener(MouseEvent.MOUSE_OVER,MapUtils.graphicMouseOver);
+		graphic.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{
+			var graphic:Graphic=e.currentTarget as Graphic;
+			graphic.symbol = MapUtils.getOwnerSymbolStyle(0x0000FF,0.2,0x7030A0,3);
+		});
+		layer.add(graphic);
+	}
+}
+
+/**
+ * 显示码头和泊位
+ */
+private function initMtBwArea():void
+{
+	initMtArea();
+	initBwArea();
+}
+
+/**
+ * 显示码头和泊位
+ */
+private function initMtArea():void
+{
+	var currScale:Number =  map.scale;
+	var mtLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_MT);
+	var mtState:String = ConfigUtil.getMapLayerState(ConstUtil.L_ID_MT);
+	// 码头
+	if(ConstUtil.CHECK_STATE_1 == mtState && currScale<20000) {
+		// 显示船舶ais
+		mtLayer.visible = true;
+		if(null == mtAreaFeatureSet) {
+			GisUtils.callGisServer(GlobalData.mtLayerUrl,onMtResult,"");
+		}
+	} else {
+		mtLayer.visible = false;
+	}
+}
+
+/**
+ * 显示码头和泊位
+ */
+private function initBwArea():void
+{
+	var currScale:Number =  map.scale;
+	var bwLayer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_BW);
+	var bwState:String = ConfigUtil.getMapLayerState(ConstUtil.L_ID_BW);
+	//泊位
+	if(ConstUtil.CHECK_STATE_1 == bwState && currScale<20000) {
+		// 显示船舶ais
+		bwLayer.visible = true;
+		if(null == bwAreaFeatureSet) {
+			GisUtils.callGisServer(GlobalData.bwLayerUrl,onBwResult,"");
+		}
+	} else {
+		bwLayer.visible = false;
+	}
+}
+
+/**
+ * 清空码头和泊位
+ */ 
+private function clearMtArea():void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_MT);
+	if(null != layer) {
+		layer.visible = false;
+	}
+}
+
+/**
+ * 清空码头和泊位
+ */ 
+private function clearBwArea():void
+{
+	var layer:GraphicsLayer = MapUtils.getGraphicLayerByName(ConstUtil.L_ID_BW);
+	if(null != layer) {
+		layer.visible = false;
+	}
+}

BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/firstEnable.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/firstPage.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/lastEnable.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/lastPage.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/nextEnable.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/nextPage.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/prePage.png


BIN
gkaq/gis-flex/trunk/src/flexResources/Perpage/previousEnable.png


BIN
gkaq/gis-flex/trunk/src/flexResources/arrowLeft1.png


BIN
gkaq/gis-flex/trunk/src/flexResources/arrowRight.png


BIN
gkaq/gis-flex/trunk/src/flexResources/map/aqtc.png


BIN
gkaq/gis-flex/trunk/src/flexResources/map/clear1.png


BIN
gkaq/gis-flex/trunk/src/flexResources/map/cxtj.png


BIN
gkaq/gis-flex/trunk/src/flexResources/map/expert.png


Неке датотеке нису приказане због велике количине промена