当前位置: 首页 > news >正文

切片地图服务使用Flex API编辑和更新切图

ArcGIS Flex API 2.0开始支持访问ArcGIS Server 10 的Feature Service进行编辑。

Flex:



minWidth="955" minHeight="600"
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" >

<!-- [CDATA[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import com.esri.ags.Graphic;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import com.esri.ags.events.DrawEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import com.esri.ags.events.FeatureLayerEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import com.esri.ags.geometry.Extent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import com.esri.ags.layers.supportClasses.FeatureEditResult;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import mx.controls.Alert;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import mx.rpc.events.FaultEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import mx.rpc.events.ResultEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected function buttonAddFeature_click(event:MouseEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buttonAddFeature.selected){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drawTool.activate(DrawTool.MAPPOINT, false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drawTool.deactivate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected function drawTool_drawEnd(event:DrawEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var g:Graphic = event.graphic;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.attributes = new Object();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.attributes.CITY_NAME = "test";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.attributes.POP_RANK = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var adds:Array = new Array();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adds.push(g);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; featureLayer0.applyEdits(adds, null, null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected function featureLayer0_editsComplete(event:FeatureLayerEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show('编辑要素成功,通知更新切图');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var adds:Array = event.featureEditResults.addResults;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objectids:String = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for each(var f:FeatureEditResult in adds){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objectid:int = f.objectId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(objectids==null){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objectids = String(objectid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objectids += ",";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objectids += String(objectid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var params:Object = new Object();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params.objectids = objectids;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpUpdateCache.send(params);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected function httpUpdateCache_resultHandler(event:ResultEvent):void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var result:Boolean = event.result as Boolean;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(result){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show('更新切图成功');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show('更新切图失败');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]]-->



url="http://localhost:8399/arcgis/rest/services/sde/world/MapServer"/ >




<!-- 将非可视元素(例如服务、值对象)放在此处 -->

map="{map}"
graphicsLayer="{drawLayer}"
drawEnd="drawTool_drawEnd(event)"/>

url="http://localhost:8399/arcgis/rest/services/sde/world/FeatureServer/0"
editsComplete="{featureLayer0_editsComplete(event)}"
fault="trace(event)"/>

url="http://localhost:8080/ArcObjectsServer/rest/update_cache"
result="httpUpdateCache_resultHandler(event)"
fault="trace(event)"/>

更新数据完成后,再通过基于ArcObjects开发的Web服务更新切图

Java:

private String result(String objectids) {
String result = "false";

IServerContext serverContext = null;
try {
ResourceBundle rb = ResourceBundle.getBundle("wuyf.Config");

String host = rb.getString("HOST");
String username = rb.getString("USERNAME");
String password = rb.getString("PASSWORD");
String service = rb.getString("MAP_SERVER");
int layerId = Integer.valueOf(rb.getString("LAYER_ID"));

ServerInitializer serverInitializer = new ServerInitializer();
serverInitializer.initializeServer(host, username, password);
ServerConnection conn = new ServerConnection();
conn.connect(host);

IServerObjectManager som = conn.getServerObjectManager();
serverContext = som.createServerContext(service, "MapServer");

MapServer mapServer = (MapServer) serverContext.getServerObject();
IFeatureLayer feaLayer = (IFeatureLayer) mapServer.getLayer(
mapServer.getDefaultMapName(), layerId);
IFeatureClass feaClass = feaLayer.getFeatureClass();

String mapName = mapServer.getDefaultMapName();
Map map = (Map) mapServer.getMap(mapName);
ILODInfos lodInfos = mapServer.getCacheDescriptionInfo(
map.getName()).getTileCacheInfo().getLODInfos();
String layers = "";
for (int i = 0, count = map.getLayerCount(); i < count; i++) {
String layerName = map.getLayer(i).getName();
if (layers != "") {
layers += ";";
}
layers += layerName;
}
String levels = "";
for (int i = 0, count = lodInfos.getCount(); i < count; i++) {
ILODInfo lodInfo = lodInfos.getElement(i);
if (levels != "") {
levels += ";";
}
levels += String.format("%f", lodInfo.getScale());
}

String[] ids = objectids.split(",");
String where = "";
for (int i = 0, count = ids.length; i < count; i++) {
if (where != "") {
where += " AND ";
}
where += "OBJECTID=" + ids[i];
}
QueryFilter filter = (QueryFilter) serverContext
.createObject(QueryFilter.getClsid());
filter.setWhereClause(where);

IFeatureCursor feaCursor = feaClass.search(filter, false);
IFeature fea = feaCursor.nextFeature();
while (fea != null) {
IGeometry geo = fea.getShape();
IEnvelope env = geo.getEnvelope();

GeoProcessor gp = (GeoProcessor) serverContext
.createObject(GeoProcessor.getClsid());
gp.setOverwriteOutput(true);

ManageMapServerCacheTiles mc = new ManageMapServerCacheTiles();

VarArray var = (VarArray) serverContext.createObject(VarArray
.getClsid());
var.add(host);
var.add(service);
var.add(mapName);
var.add(layers);
var.add(levels);
var.add("Recreate All Tiles");
String extent =
String.format("%f", env.getXMin()) + " " +
String.format("%f", env.getYMin()) + " " +
String.format("%f", env.getXMax()) + " " +
String.format("%f", env.getYMax());
var.add(extent);

//注意,执行这个GP需要将soc帐号加入到agsadmin组
IGeoProcessorResult gpResult = gp.execute(mc.getToolName() + "_" + mc.getToolboxAlias(),var, null);
if (gp.getMessageCount() > 0) {
for (int i = 0, count = gp.getMessageCount(); i < count; i++) {
System.err.print(gp.getMessage(i));
}
}

fea = feaCursor.nextFeature();
}

result = "true";
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
serverContext.releaseContext();
} catch (Exception ex) {
ex.printStackTrace();
}
}

return result;
}

相关文章:

  • 敏捷宣言创始人:十年之后看“修炼”
  • ArcSDE vs. Oracle Spatial 17
  • 【转】人际关系经验
  • ArcSDE vs. Oracle Spatial 18
  • Entity Framework Code-First(下)
  • 《ArcSDE vs. Oracle Spatial》 PDF
  • 表单向Servlet提交参数时的中文乱码问题
  • Ubuntu10.04下Zend Studio7.1.2 开发环境配置日志
  • Lucid Lynx使用感受
  • Oracle日期转换函数的格式参数大小写规则【转自ITPUB】
  • 从△走进OO,走进策略模式
  • 如何花钱让2000元的月收入工资价值最大化?
  • uploadify可以获取到自己定义上传的文件名称的方法
  • ubuntu下arm-linux-gcc的安装
  • vs2005 创建dll 和exe文件[转]
  • 网络传输文件的问题
  • ComponentOne 2017 V2版本正式发布
  • js继承的实现方法
  • Logstash 参考指南(目录)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Promise面试题,控制异步流程
  • React-Native - 收藏集 - 掘金
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 半理解系列--Promise的进化史
  • 仿天猫超市收藏抛物线动画工具库
  • 理清楚Vue的结构
  • 聊聊redis的数据结构的应用
  • 前端之Sass/Scss实战笔记
  • 入手阿里云新服务器的部署NODE
  • 数组的操作
  • kubernetes资源对象--ingress
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Semaphore
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #AngularJS#$sce.trustAsResourceUrl
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (145)光线追踪距离场柔和阴影
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十八)SpringBoot之发送QQ邮件
  • (四)c52学习之旅-流水LED灯
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .jks文件(JAVA KeyStore)
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃