免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1108|回复: 0
收起左侧

[技术交流] 南沙政府应急系统之GIS一张图(arcgis api for flex)讲解(十一)路径导航模块

[复制链接]

45

主题

8272

铜板

17

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1122
QQ
发表于 2016-10-22 12:33 | 显示全部楼层 |阅读模式
config.xml文件的配置如下:
  1.     <widget label="路径导航" icon="assets/images/lujingdaohang.png"
  2.             config="widgets/eDriections/eDirectionsWidget.xml" url="widgets/eDriections/eTabDirectionsWidget.swf" />
复制代码
源代码目录如下:
界面效果:
大概的思路如下:1.文本框输入开始点以及结束点,获取两个点坐标;2.直接在地图上点击两个点,获取两个点坐标;其实两个的最终目的是一样的,都是为了获取两个点坐标。其中用到了地理编码服务,用于根据地名来获取坐标以及根据坐标来获取地名信息。
用到了arcgis api的最短路径分析接口,routeParams以及routeTask,routeParams用来设置一些关于路径分析的参数,routeTask是用来执行路径分析方法的,具体的要看看api的介绍才行。备注:该功能模块的核心前提是要发布网络分析服务,这个在我的博客其他文章有写的
总的来说,获取两个点坐标,保存在一个stops数组里面,然后设置routeParams的属性,routeParams对象有个属性是stops,除了stops之外,还有attributeParameterValues、directionsLengthUnits、returnDirectionsreturnDirections、returnRoutes、returnStops等等;最好是执行routeTask.solve(routeParams);
eDirectionsWidget.xml:配置一些路径分析的信息
  1. <?xml version="1.0" ?>
  2. <configuration>
  3.     <url>http://localhost:6080/ArcGIS/rest/services/gzRoad/NAServer/路径</url>
  4.     <useproxy>false</useproxy>
  5. <!--     <locatorurl>http://172.16.6.67/ArcGIS/rest/services/guangzhou_loc/GeocodeServer</locatorurl> -->
  6.     <locatorurl>http://localhost:6080/ArcGIS/rest/services/ns_loc_Composite/GeocodeServer</locatorurl>
  7.     <routeoptions />
  8.     <fromTx>广州市南沙区信访局</fromTx>
  9.     <toTx>小虎一桥</toTx>
  10. </configuration>

  11. <!-- See Directions widget tag reference at http://links.esri.com/directionswidget -->
复制代码
eTabDirectionsWidget.mxml:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. ///////////////////////////////////////////////////////////////////////////
  4. // Copyright (c) 2013 Esri. All Rights Reserved.
  5. //
  6. // Licensed under the Apache License, Version 2.0 (the "License");
  7. // you may not use this file except in compliance with the License.
  8. // You may obtain a copy of the License at
  9. //
  10. //    http://www.apache.org/licenses/LICENSE-2.0
  11. //
  12. // Unless required by applicable law or agreed to in writing, software
  13. // distributed under the License is distributed on an "AS IS" BASIS,
  14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. // See the License for the specific language governing permissions and
  16. // limitations under the License.
  17. ///////////////////////////////////////////////////////////////////////////
  18. -->
  19. <viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
  20.                    xmlns:s="library://ns.adobe.com/flex/spark"
  21.                    xmlns:mx="library://ns.adobe.com/flex/mx"
  22.                    xmlns:viewer="com.esri.viewer.*"
  23.                    xmlns:esri="http://www.esri.com/2008/ags"
  24.                    xmlns:RichTabNavigator="com.RichTabNavigator.*"
  25.                    initialize="basewidget_initializeHandler(event)"
  26.                    widgetConfigLoaded="basewidget_widgetConfigLoaded()">
  27.     <viewer:states>         
  28.         <s:State name="textInput"/>
  29.         <s:State name="resultsList"/>
  30.     </viewer:states>
  31.    
  32.     <viewer:transitions>
  33.         <s:Transition autoReverse="true" toState="*">
  34.             <s:Fade id="fade"/>
  35.         </s:Transition>
  36.     </viewer:transitions>
  37.     <fx:Script>
  38.         <![CDATA[
  39.             import com.esri.ags.FeatureSet;
  40.             import com.esri.ags.Graphic;
  41.             import com.esri.ags.SpatialReference;
  42.             import com.esri.ags.events.DrawEvent;
  43.             import com.esri.ags.events.LocatorEvent;
  44.             import com.esri.ags.events.RouteEvent;
  45.             import com.esri.ags.geometry.Extent;
  46.             import com.esri.ags.geometry.Geometry;
  47.             import com.esri.ags.geometry.MapPoint;
  48.             import com.esri.ags.geometry.Polyline;
  49.             import com.esri.ags.portal.PopUpRenderer;
  50.             import com.esri.ags.portal.supportClasses.PopUpInfo;
  51.             import com.esri.ags.symbols.TextSymbol;
  52.             import com.esri.ags.tasks.supportClasses.AddressCandidate;
  53.             import com.esri.ags.tasks.supportClasses.AddressToLocationsParameters;
  54.             import com.esri.ags.tasks.supportClasses.DirectionsFeatureSet;
  55.             import com.esri.ags.tasks.supportClasses.NAOutputLine;
  56.             import com.esri.ags.tasks.supportClasses.RouteResult;
  57.             
  58.             import mx.collections.ArrayCollection;
  59.             import mx.containers.Panel;
  60.             import mx.containers.TitleWindow;
  61.             import mx.controls.Alert;
  62.             import mx.controls.Text;
  63.             import mx.controls.TextArea;
  64.             import mx.core.IVisualElement;
  65.             import mx.core.UIComponent;
  66.             import mx.events.CloseEvent;
  67.             import mx.events.EffectEvent;
  68.             import mx.events.FlexEvent;
  69.             import mx.events.ListEvent;
  70.             import mx.events.ModuleEvent;
  71.             import mx.events.ResizeEvent;
  72.             import mx.formatters.*;
  73.             import mx.managers.PopUpManager;
  74.             import mx.rpc.AsyncResponder;
  75.             import mx.rpc.Fault;
  76.             import mx.rpc.events.FaultEvent;
  77.             
  78.             import spark.components.NavigatorContent;
  79.             import spark.events.IndexChangeEvent;
  80.             import spark.primitives.Path;
  81.             
  82.             private const ICON_URL:String = "assets/images/";
  83.             private var textsearchLabel:String="路径分析";
  84.             private var resultsLabel:String="分析结果";
  85.             [Bindable]
  86.             private var fromText:String;
  87.             [Bindable]
  88.             private var toText:String;
  89.             protected function basewidget_initializeHandler(event:FlexEvent):void
  90.             {
  91.                 if (isPartOfPanel) // if widget is part of "left", "right" or "bottom" panel
  92.                 {
  93.                     this.percentWidth = this.percentHeight = 100;
  94.                     wTemplate.percentWidth = wTemplate.percentHeight = 100;
  95.                 }
  96.                 else
  97.                 {
  98.                     wTemplate.height = map.height - map.height / 100 - Number(this.top) - Number(this.bottom);
  99.                     wTemplate.width = 440;
  100.                 }
  101.             }
  102.             
  103.             private function basewidget_widgetConfigLoaded():void
  104.             {
  105.                 // hide map infowindow if any               
  106.                 map.infoWindow.hide();
  107.                 if (configXML)
  108.                 {
  109.                     sUrl = configXML.url[0];
  110.                     var useProxyForDirections:Boolean = configXML.useproxy[0] && configXML.useproxy == "true";
  111.                     locatorURL = configXML.locatorurl[0];
  112.                     fromText=configXML.fromTx[0];
  113.                     toText=configXML.toTx[0];
  114.                 }
  115.                 wTemplate.addTitlebarButton(ICON_URL + "i_searchtext.png", textsearchLabel, showStateTextSearch);
  116.                 wTemplate.addTitlebarButton(ICON_URL + "i_table.png", resultsLabel, showStateResults);
  117.                 fade.targets = [  textInput, resultsList ];
  118.                 wTemplate.visible = true;
  119.             }
  120.             
  121.             private function showStateTextSearch():void
  122.             {
  123.                 this.currentState = "textInput";
  124.                 wTemplate.selectedTitlebarButtonIndex = 0;
  125.             }
  126.             
  127.             private function showStateResults():void
  128.             {
  129.                 this.currentState = "resultsList";
  130.                 wTemplate.selectedTitlebarButtonIndex = 1;
  131.             }
  132.             
  133.             
  134.             //////////////////////////////////////////////////////
  135.             //路径分析功能部分代码
  136.             [Bindable]
  137.             private var sUrl:String;//="http://172.16.6.67/ArcGIS/rest/services/gzRoad/NAServer/路径";   
  138.             [Bindable]
  139.             private var locatorURL:String;
  140.             private var stopType:String;
  141.             private var fromGraphic:Graphic;
  142.             private var toGraphic:Graphic;
  143.             [Bindable]
  144.             private var startTime:Date=new Date();
  145.             [Bindable]
  146.             private var endTime:Date;
  147.             
  148.             [Bindable]
  149.             private var travelTypeList:ArrayCollection = new ArrayCollection( [   
  150.                 { label: "步行", data: 0 },     
  151.                 { label: "驾车", data: 1  },
  152.                 {label: "自行车", data: 2  }]);
  153.             
  154.             [Bindable]
  155.             private var attributeParameters:Array = new Array({
  156.                 "attributeName" : "Time",
  157.                 "parameterName" : "TravelType",
  158.                 "value" :1});
  159.             
  160.             [Bindable]
  161.             private var impedanceAttributes:ArrayCollection = new ArrayCollection( [   
  162.                 { label: "最短距离", data: "Distance" },     
  163.                 { label: "最少时间", data: "Time"  }]);
  164.             
  165.             [Bindable]
  166.             private var restrictionAttributes:Array=new Array("walking");
  167.             
  168.             private const NL:String = "\n";
  169.             
  170.             [Bindable]private var stopsFS:FeatureSet = new FeatureSet();
  171.             
  172.             private var directionResult:directionResultGroup;
  173.             private var segmentGraphic:Graphic;
  174.             
  175.             private var tabImpactIndex:int = 0;
  176.             private function getDirections():void
  177.             {
  178.                 //hanhh
  179.                 /* directionResult =new directionResultGroup();
  180.                 tabImpact.addChild(directionResult);
  181.                 tabImpactIndex = tabImpact.numChildren-1;
  182.                 tabImpact.selectedIndex = tabImpactIndex; */
  183.                 //add by lizeping ,2014/02/13
  184.                 startTime=startDateField.selectedDate;
  185.                 startTime.hours=hoursStepper.value;
  186.                 startTime.minutes=minutesStepper.value;
  187.                
  188.                 stopsFS.features = [];
  189.                 segmentGraphic = null;
  190.                 //hanhh
  191. //                directionResult.map = map;
  192.                 //                map.defaultGraphicsLayer.clear();
  193.                 var fromParameters:AddressToLocationsParameters = new AddressToLocationsParameters();
  194.                 fromParameters.distance=0.005;
  195.                 fromParameters.address = { SingleLine: fromTx.text, CountryCode: 'US' };
  196.                 fromParameters.outFields = [ "Loc_name" ];
  197.                 locator.addressToLocations(fromParameters, new AsyncResponder(
  198.                     myResultFunction, myFaultFunction, "From"));
  199.                
  200.                 var toParameters:AddressToLocationsParameters = new AddressToLocationsParameters();
  201.                 toParameters.address = { SingleLine: toTx.text, CountryCode: 'US' };
  202.                 toParameters.distance=0.005;
  203.                 toParameters.outFields = [ "Loc_name" ];
  204.                 locator.addressToLocations(toParameters, new AsyncResponder(
  205.                     myResultFunction, myFaultFunction, "To"));
  206.                
  207.                 function myResultFunction(result:Array, token:String = null):void
  208.                 {
  209.                     solveRoute(result, token);
  210.                 }
  211.                 function myFaultFunction(error:Fault, token:Object = null):void
  212.                 {
  213.                     Alert.show(error.faultString, "Locator Error");
  214.                 }
  215.             }
  216.             
  217.             private function solveRoute(addressCandidates:Array, type:String):void
  218.             {
  219.                 if (addressCandidates.length == 0)
  220.                 {
  221.                     Alert.show(type + " address not found.", "Missing Result");
  222.                     return;
  223.                 }
  224.                
  225.                 var stop:AddressCandidate = addressCandidates[0];
  226.                
  227.                 if (type == "From")
  228.                 {
  229.                     map.defaultGraphicsLayer.remove(fromGraphic);
  230.                     fromGraphic = new Graphic(stop.location, fromSymbol, { address: stop.address, score: stop.score });
  231.                     map.defaultGraphicsLayer.add(fromGraphic);
  232.                     stopsFS.features[0] = fromGraphic;
  233.                     
  234.                 }
  235.                 else if (type == "To")
  236.                 {
  237.                     map.defaultGraphicsLayer.remove(toGraphic);
  238.                     toGraphic = new Graphic(stop.location, toSymbol, { address: stop.address, score: stop.score });
  239.                     map.defaultGraphicsLayer.add(toGraphic);
  240.                     stopsFS.features[1] = toGraphic;
  241.                     
  242.                 }
  243.                
  244.                 if (stopsFS.features[0] && stopsFS.features[1])
  245.                 {
  246.                     routeParams.attributeParameterValues=attributeParameters;
  247.                     
  248.                     routeTask.solve(routeParams);
  249.                 }
  250.             }
  251.             
  252.             private function solveCompleteHandler(event:RouteEvent):void
  253.             {
  254.                 directionResult =new directionResultGroup();
  255.                 tabImpact.addChild(directionResult);
  256.                 tabImpactIndex = tabImpact.numChildren-1;
  257.                 tabImpact.selectedIndex = tabImpactIndex;
  258.                 directionResult.map = map;
  259.                 showStateResults();
  260.                 var routeResult:RouteResult = event.routeSolveResult.routeResults[0];
  261.                 directionResult.directionsFS = routeResult.directions;
  262.                 //add at 2014-01-08
  263.                
  264.                 //var route:Graphic=routeResult.route;
  265.                 directionResult.route=routeResult.route;
  266.                 directionResult.graphicLayer.add(fromGraphic);//图标传给动态生成的tab页
  267.                 directionResult.graphicLayer.add(toGraphic);//图标传给动态生成的tab页
  268.                 map.defaultGraphicsLayer.clear();
  269.                 directionResult.showResult();
  270.             }
  271.             
  272.             
  273.             private function faultHandler(event:FaultEvent):void
  274.             {
  275.                 Alert.show(event.fault.faultString + "\n\n" + event.fault.faultDetail, "Routing Error " + event.fault.faultCode);
  276.             }
  277.             
  278.             
  279.             private function formatDistance(dist:Number, units:String):String
  280.             {
  281.                 var result:String = "";
  282.                
  283.                 var d:Number = Math.round(dist * 100) / 100;
  284.                
  285.                 if (d != 0)
  286.                 {
  287.                     result = d + " " + units;
  288.                 }
  289.                
  290.                 return result;
  291.             }
  292.             
  293.             private function formatTime(time:Number):String
  294.             {
  295.                 var result:String;
  296.                
  297.                 var hr:Number = Math.floor(time / 60);
  298.                 var min:Number = Math.round(time % 60);
  299.                
  300.                 if (hr < 1 && min < 1)
  301.                 {
  302.                     result = "";
  303.                 }
  304.                 else if (hr < 1 && min < 2)
  305.                 {
  306.                     result = min + " 分钟";
  307.                 }
  308.                 else if (hr < 1)
  309.                 {
  310.                     result = min + " 分钟";
  311.                 }
  312.                 else
  313.                 {
  314.                     result = hr + " 小时 " + min + " 分钟";
  315.                 }
  316.                
  317.                 return result;
  318.             }
  319.             
  320.             protected function cmbTravelType_changeHandler(event:ListEvent):void
  321.             {
  322.                 // TODO Auto-generated method stub               
  323.                 attributeParameters = new Array({
  324.                     "attributeName" : "Time",
  325.                     "parameterName" : "TravelType",
  326.                     "value" : cmbTravelType.selectedItem.data});
  327.                 if(cmbTravelType.selectedItem.data==0){
  328.                     trace("use walking");
  329.                     restrictionAttributes=new Array("walking");
  330.                 }else{
  331.                     restrictionAttributes=new Array("driving");
  332.                 }
  333.                 routeParams.attributeParameterValues=attributeParameters;
  334.             }
  335.             
  336.             protected function cmbImpedance_changeHandler(event:ListEvent):void
  337.             {
  338.                 routeParams.impedanceAttribute=cmbImpedance.selectedItem.data;
  339.                
  340.             }
  341.             
  342.             protected function btnFrom_clickHandler(event:MouseEvent):void
  343.             {
  344.                 // TODO Auto-generated method stub
  345.                 stopType="From";
  346.                 myDrawTool.markerSymbol=fromSymbol;
  347.                 myDrawTool.activate(DrawTool.MAPPOINT);
  348.                
  349.             }
  350.             
  351.             protected function btnTo_clickHandler(event:MouseEvent):void
  352.             {
  353.                 // TODO Auto-generated method stub
  354.                 stopType="To";
  355.                 myDrawTool.markerSymbol=toSymbol;
  356.                 myDrawTool.activate(DrawTool.MAPPOINT);
  357.             }
  358.             
  359.             protected function drawTool_drawEndHandler(event:DrawEvent):void
  360.             {
  361.                 // reset after finished drawing a feature
  362.                 myDrawTool.deactivate();
  363.                 //查询地址信息
  364.                 if(stopType=="From"){
  365.                     map.defaultGraphicsLayer.remove(fromGraphic);
  366.                     fromGraphic=event.graphic;
  367.                 }else{
  368.                     map.defaultGraphicsLayer.remove(toGraphic);
  369.                     toGraphic=event.graphic;
  370.                 }
  371.                 var point:MapPoint=event.graphic.geometry as MapPoint;
  372.                 locator.locationToAddress(point, 1000);
  373.                
  374.             }
  375.             
  376.             private function onLocationToAddressComplete(event:LocatorEvent):void
  377.             {
  378.                
  379.                 var candidate:AddressCandidate = event.addressCandidate;               
  380.                
  381.                 if (candidate && candidate.address && candidate.address.Address)
  382.                 {
  383.                     var address:Object = candidate.address;                 
  384.                     
  385.                     if(stopType=="From"){
  386.                         fromTx.text=address.Address;   
  387.                     }
  388.                     else{
  389.                         toTx.text=address.Address;
  390.                     }                             
  391.                 }
  392.                 else
  393.                 {
  394.                     Alert.show("This location does not have a known street address.");
  395.                 }
  396.             }
  397.             
  398.             private function onFault(event:FaultEvent):void
  399.             {
  400.                 if (event.fault.name == 'Error'
  401.                     && event.fault.faultCode == '500'
  402.                     && event.fault.faultString == 'An unexpected error occurred processing the request.')
  403.                 {
  404.                     Alert.show("Did you click too far from a road?\n\n" + event.fault.faultDetail, "No result");
  405.                 }
  406.                 else
  407.                 {
  408.                     Alert.show(event.fault.faultString + "\n\n" + event.fault.faultDetail, "Reverse Geocoding Error " + event.fault.faultCode);
  409.                 }
  410.             }
  411.             
  412.             private function widgetClosedHandler(event:Event):void
  413.             {
  414.                 map.defaultGraphicsLayer.clear();
  415.             }            
  416.             
  417.         ]]>
  418.     </fx:Script>
  419.    
  420.    
  421.    
  422.     <fx:Declarations>
  423.         <!-- Symbol for all point shapes -->
  424.         
  425.         <esri:DrawTool id="myDrawTool" drawEnd="drawTool_drawEndHandler(event)"
  426.                        graphicsLayer="{map.defaultGraphicsLayer}" map="{map}"/>
  427.         <!--http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer-->
  428.         <esri:Locator id="locator" fault="onFault(event)"
  429.                       locationToAddressComplete="onLocationToAddressComplete(event)"
  430.                       outSpatialReference="{map.spatialReference}" showBusyCursor="true"
  431.                       url="{encodeURI(locatorURL)}"/>
  432.         
  433.         <esri:RouteTask id="routeTask" concurrency="last" fault="faultHandler(event)"
  434.                         requestTimeout="30" showBusyCursor="true"
  435.                         solveComplete="solveCompleteHandler(event)" url="{encodeURI(sUrl)}"/>
  436.         
  437.         <esri:RouteParameters id="routeParams" attributeParameterValues="{attributeParameters}"
  438.                               directionsLengthUnits="esriMeters"
  439.                               outputGeometryPrecisionUnits="esriDecimalDegrees"
  440.                               outSpatialReference="{map.spatialReference}"
  441.                               restrictionAttributes="{restrictionAttributes}"
  442.                               returnDirections="true" returnRoutes="true" returnStops="true"
  443.                               startTime="{startTime}" stops="{stopsFS}"/>
  444.         
  445.         <!--<esri:SimpleMarkerSymbol id="fromSymbol" color="0x00FF00"/>-->
  446.         <!--<esri:SimpleMarkerSymbol id="toSymbol" color="0xFF0000"/>-->
  447.         <esri:PictureMarkerSymbol id="fromSymbol" source="assets/skins/directions/green-A.png"/>
  448.         <esri:PictureMarkerSymbol id="toSymbol" source="assets/skins/directions/blue-B.png"/>
  449.         <esri:SimpleLineSymbol id="routeSymbol" width="4" alpha="0.5" color="0x0000FF"/>
  450.         <esri:SimpleLineSymbol id="segmentSymbol" width="8" alpha="0.5" color="0xFF0000"/>
  451.         <esri:SimpleLineSymbol id="tempSymbol" width="8" alpha="0" color="0xFF0000"/>
  452.         <s:DateTimeFormatter id="dtFormatter" dateTimePattern="MM/dd/yy, HH:mm"/>
  453.     </fx:Declarations>
  454.     <viewer:WidgetTemplate id="wTemplate" closed="widgetClosedHandler(event)" width="340" height="520">
  455.         
  456.         <s:Group id="textInput" visible="false" width="100%" height="100%"
  457.                  visible.textInput="true">            
  458.             <s:Form width="100%">
  459.                 <!-- 更改垂直间距 -->
  460.                 <s:layout>
  461.                     <s:FormLayout gap="-14"/>
  462.                 </s:layout>
  463.                 <s:FormItem label="起点:">
  464.                     <s:HGroup width="100%">
  465.                         <s:TextInput id="fromTx" text="{fromText}" width="90%"/>            
  466.                         <s:Image id="addFrom" buttonMode="true" click="btnFrom_clickHandler(event)" height="30"
  467.                                  source="@Embed('assets/skins/directions/add-stop.png')"
  468.                                  toolTip="{resourceManager.getString('ESRIMessages', 'directionsAddDestinationByMapClickTooltip')}"
  469.                                  useHandCursor="true"/>        
  470.                     </s:HGroup>
  471.                 </s:FormItem>
  472.                 <s:FormItem label="终点:">
  473.                     <s:HGroup width="100%">
  474.                         <s:TextInput id="toTx" text="{toText}" width="90%"/>
  475.                         <s:Image id="addTo" buttonMode="true" click="btnTo_clickHandler(event)" height="30"
  476.                                  source="@Embed('assets/skins/directions/add-stop.png')"
  477.                                  toolTip="{resourceManager.getString('ESRIMessages', 'directionsAddDestinationByMapClickTooltip')}"
  478.                                  useHandCursor="true"/>
  479.                     </s:HGroup>
  480.                 </s:FormItem>
  481.                 <s:FormItem label="出行方式:">
  482.                     <mx:ComboBox id="cmbTravelType" change="cmbTravelType_changeHandler(event)"
  483.                                  dataProvider="{travelTypeList}" selectedIndex="1"/>
  484.                     
  485.                 </s:FormItem>
  486.                 <s:FormItem label="路径选择:">
  487.                     <mx:ComboBox id="cmbImpedance" change="cmbImpedance_changeHandler(event)"
  488.                                  dataProvider="{impedanceAttributes}" selectedIndex="0"/>
  489.                     
  490.                 </s:FormItem>
  491.                 <s:FormItem label="出发时间:">
  492.                     <s:HGroup><mx:DateField id="startDateField" formatString="YYYY-MM-DD" height="30"
  493.                                             selectedDate="{new Date()}">                                
  494.                               </mx:DateField>
  495.                         <s:NumericStepper id="hoursStepper" width="40" maximum="24" minimum="1">                                 
  496.                         </s:NumericStepper><s:Label text="时"/>                                                            
  497.                         <s:NumericStepper id="minutesStepper" width="40" maximum="59" minimum="0"></s:NumericStepper><s:Label text="分"/>
  498.                     </s:HGroup></s:FormItem>
  499.                 <s:FormItem>                             
  500.                     <s:Button label="查询" click="getDirections()" height="30"/>
  501.                 </s:FormItem>
  502.             </s:Form>
  503.         </s:Group>
  504.         <s:Group id="resultsList" visible="false" width="100%" height="100%"
  505.                  visible.resultsList="true">            
  506.             <RichTabNavigator:RichTabNavigator id="tabImpact" width="100%" height="100%" backgroundAlpha="0"
  507.                                                cornerRadius="5" dropShadowVisible="false" horizontalAlign="left"
  508.                                                paddingTop="-1" tabHeight="30" tabWidth="110" borderVisible="true">
  509.             </RichTabNavigator:RichTabNavigator>
  510.         </s:Group>
  511.         
  512.         
  513.     </viewer:WidgetTemplate>
  514. </viewer:BaseWidget>
复制代码
GIS作品:百度搜索:GIS之家(https://shop116521643.taobao.com/shop/view_shop.htm);
QQ兴趣部落GIS技术交流:gis之家(http://buluo.qq.com/p/barindex.html?bid=327395);
GIS毕业设计&项目承接群:238339408;
GIS技术交流群:432512093

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表