ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

来源:互联网 发布:农村淘宝电话投诉电话 编辑:程序博客网 时间:2024/05/22 08:26

ArcGIS For Server10.1新特性之一就是服务器端打印,这个打印功能使用起来非常的方便,因为它是一个现成的GP服务,使用的时候只要输入相应的地图,地图范围,模板的名称等,就可以按需打印出你需要的地图。下面我们来看一下从制作模版到发布服务及服务调用的整个流程吧:

1、自己定义一个打印模板,如下图是布局视图:

   将模版保存到C:\Program Files (x86)\ArcGIS\Desktop10.1\Templates\ExportWebMapTemplates(当然你也可以保存到其他路径下,在发布服务的时候你可以指定你自己的路径)

2、在ArcToolBox中打开Export Web Map工具:

输入参数:Web Map as JSON为空;Output File为默认参数;Format可以自己输入;Layout Templates Folder(optional)选择一个模板文件夹(这里选择ArcGIS安装目录的模板文件夹),然后Layout  Templates (optional)就可以选择一个默认的模板了

点击OK,打开菜单栏Geoprocessing/Results,执行完成后选中Export Web Map右键Share as Geoprocessing services

下一步、下一步:Analyse后如果没有错误,直接点击Publish发布:

ArcCatalog中查看如下:

3、服务发布好后,可一下在Flex中如何调用一把:ArcGIS Flex API3.0也增加了对该打印服务的支持:

 代码如下:print.mxml

复制代码
<?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" minWidth="955" minHeight="600">    <fx:Declarations>        <!-- 将非可视元素(例如服务、值对象)放在此处 -->    </fx:Declarations>        <fx:Script>        <![CDATA[            import mx.managers.PopUpManager;                          private function onclick(event:MouseEvent):void            {                                var popWin:printForm = printForm(PopUpManager.createPopUp(this,printForm,false));                 popWin.printTask.getServiceInfo();//调用 打印 GP,获取模版和格式参数                popWin.map = this.myMap;                            }        ]]>    </fx:Script>        <esri:Map id="myMap">                 <esri:ArcGISDynamicMapServiceLayer url="http://localhost:6080/arcgis/rest/services/routTest2/MapServer"/>    </esri:Map>    <mx:Button id="button" x="409" y="10" label="打印" click="onclick(event)"/></s:Application>
复制代码

printForm.mxml

复制代码
<?xml version="1.0" encoding="utf-8"?><mx: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:esri="http://www.esri.com/2008/ags"         width="100%" height="100%"         close="PopUpManager.removePopUp(this)"        >    <fx:Script>        <![CDATA[            import com.esri.ags.Map;            import com.esri.ags.events.PrintEvent;            import com.esri.ags.tasks.supportClasses.DataFile;            import com.esri.ags.tasks.supportClasses.JobInfo;            import com.esri.ags.tasks.supportClasses.ParameterValue;            import com.esri.ags.tasks.supportClasses.PrintServiceInfo;            import com.esri.ags.tasks.supportClasses.LegendOptions;            import com.esri.ags.tasks.supportClasses.LegendLayer;                        import mx.collections.IList;            import mx.controls.Alert;            import mx.managers.PopUpManager;            import mx.rpc.events.FaultEvent;            import com.esri.ags.layers.*;                        [Bindable]                      public  var  map:Map;                        //打印结束后处理             private function printTask_executeCompleteHandler(event:PrintEvent):void            {                                                var paramValue:ParameterValue = event.executeResult.results[0];                var dataFile:DataFile = paramValue.value as DataFile;                navigateToURL(new URLRequest(dataFile.url));            }                        private function printTask_getResultDataCompleteHandler(event:PrintEvent):void            {                                var dataFile:DataFile = event.parameterValue.value as DataFile;                navigateToURL(new URLRequest(dataFile.url));            }                        private function printTask_jobCompleteHandler(event:PrintEvent):void            {                                var jobInfo:JobInfo = event.jobInfo;                if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)                {                    printTask.getResultData(jobInfo.jobId);                }                else                {                                        Alert.show(jobInfo.jobStatus);                }            }                        //获取打印参数(模版和格式)            protected function printTask_getServiceInfoCompleteHandler(event:PrintEvent):void            {                                initLayoutTemplates(event.serviceInfo);                initFormats(event.serviceInfo);                                printButton.enabled = true;            }                        //获得所有支持的打印格式            private function initFormats(serviceInfo:PrintServiceInfo):void            {                var formatsVisibility:Boolean = true;                var formats:IList = serviceInfo.formats;                formatsDDL.selectedItem = serviceInfo.defaultFormat;            }                        //获得所有模版            private function initLayoutTemplates(serviceInfo:PrintServiceInfo):void            {                var layoutTemplatesVisibility:Boolean = true;                                                layoutTemplatesFI.label = "模版";                        var layoutTemplates:IList = serviceInfo.layoutTemplates;                                    layoutTemplatesDDL.selectedItem = serviceInfo.defaultLayoutTemplate;            }                                    //获取打印比例尺            private function printButton_exportWebMapClickHandler(event:MouseEvent):void            {                                layoutOptions.title = txtTitle.text;                                layoutOptions.legendOptions = getLegendOptions();                                var oldscale:Number;                var oldLODs:Array;                if (scaleCheckbox.selected)                {                    oldscale =map.scale;                    oldLODs = map.lods;                                        map.lods = null; //prevent LOD snapping                    map.scale = Number(scaleInput.text);                }                                if (printTask.getServiceInfoLastResult.isServiceAsynchronous)                {                    printTask.submitJob(printParameters);                }                else                {                    printTask.execute(printParameters);                }                                if (scaleCheckbox.selected)                {                    map.scale = oldscale;                    map.lods = oldLODs;                }            }                        private function getLegendOptions():LegendOptions            {                var result:LegendOptions = new LegendOptions();                var legendLayers:Array = [];                                for each (var layer:Layer in map.layers)                {                    if (layer.name.indexOf("hiddenLayer_") == -1 && !(layer is GraphicsLayer && !(layer is FeatureLayer)))                    {                                                    var legendLayer:LegendLayer = new LegendLayer();                            legendLayer.layerId = layer.id;                            legendLayers.push(legendLayer);                                            }                }                                result.legendLayers = legendLayers;                                return result;            }                        protected function printTask_faultHandler(event:FaultEvent):void            {                                Alert.show(event.fault.toString());                        }                    ]]>    </fx:Script>        <fx:Declarations>        <esri:PrintTask id="printTask" url="http://localhost:6080/arcgis/rest/services/ExportWebMap/GPServer/Export%20Web%20Map"                            executeComplete="printTask_executeCompleteHandler(event)"                        fault="printTask_faultHandler(event)"                        getResultDataComplete="printTask_getResultDataCompleteHandler(event)"                        getServiceInfoComplete="printTask_getServiceInfoCompleteHandler(event)"                        jobComplete="printTask_jobCompleteHandler(event)"                        showBusyCursor="true"/>        <esri:PrintParameters id="printParameters"                              format="{formatsDDL.selectedItem}"                              layoutTemplate="{layoutTemplatesDDL.selectedItem}"                              map="{map}"                              preserveScale="{scaleCheckbox.selected}">            <esri:layoutOptions>                <esri:LayoutOptions id="layoutOptions"/>            </esri:layoutOptions>        </esri:PrintParameters>    </fx:Declarations>                <mx:FormItem id="titleFI"  width="100%" label="标题" >                        <s:TextInput id="txtTitle"  width="100%"  text="请输入标题"/>                    </mx:FormItem>    <mx:FormItem id="layoutTemplatesFI"  includeInLayout="true" width="100%" label="模版"  visible="true">                        <s:DropDownList id="layoutTemplatesDDL" width="175"                             dataProvider="{printTask.getServiceInfoLastResult.layoutTemplates}"                        requireSelection="true"/>                                </mx:FormItem>    <mx:FormItem id="formatsFI"  width="100%" label="格式"  visible="true">                    <s:DropDownList id="formatsDDL"   dataProvider="{printTask.getServiceInfoLastResult.formats}"    width="100" requireSelection="true"/>                        </mx:FormItem>    <s:HGroup id="scaleFI"              width="100%"              horizontalAlign="center"              visible="true">        <s:CheckBox id="scaleCheckbox" label="打印比例尺"/>        <s:TextInput id="scaleInput"                     width="100%"                       enabled="{scaleCheckbox.selected}"                     restrict="0-9"/>    </s:HGroup>    <s:HGroup width="100%" horizontalAlign="center" >        <s:Button id="printButton" label="打印"      click="printButton_exportWebMapClickHandler(event)"                           enabled="false"/>    </s:HGroup></mx:TitleWindow>
复制代码

 

0 0
原创粉丝点击