Posted: July 21st, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, 空间数据挖掘, geoprocessing | No Comments »
arcgis server geoprocessing中简单的介绍了一下geoprocessing service中的一些相关的概念,接下来主要是按照自己以前的经验编写两个例子,一个是buffer的例子,另外一个是计算点密度分析的。在这里主要是借助ModelBuilder和geoprocesssing来完成,最后自己的例子主要是采用javascript rest开发。
首先使用的是arcgis的modelbuilder创建一个model,关于model的创建方法以及相关的资料,可以访问以下资源:
首先我们来介绍一下buffer的例子,该例子的效果是当你用鼠标在地图上点击时,然后再地图上就会创建一个缓冲区,该缓冲区的大小是可以限制的。关于缓冲区的模型的建立实际上只要将arcgis arctoolbox 中analysis tools—>proximity–>buffer拖拽到model builder中,然后设置输入、输出参数(如下图所示,其中p就是已经设置了参数,可以很据箭头的方式来判断输入输出参数,其实这个是在创建一个toolbox中已经设计好的)。下图是一个已经完全建立好的model,剩下来只要将这个model发布成一个geoprocessing service就行了。
Read the rest of this entry »
Posted: July 3rd, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, geoprocessing, rest | No Comments »
arcgis server 9.3.1 rest开发学习(一)中已经描述了rest开发的简单的例子,主要是在地图加载的时候在地图上添加了点数据,在此例中清楚了rest javascript开发的一些对象。在这部分主要接触的是在使用queryTask查询地图中的数据,并以柱状图的形式显示出来,在这里需要接触两个知识,一个是querytask,另外一个是使用dojo来实现柱状图。
也许你要问一下为什么使用的是dojo,而不是其他的JavaScript的包,其实其他的包也完全没有问题,你甚至是可以使用Google Chart 服务来完成这部分工作,我之所以使用dojo的主要原因是arcgis rest javascript sdk用的也是dojo的包。
esri.tasks.QueryTask对象就是对一个ArcGIS Server REST 链接(这里面的链接通常是一个图层,例如http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/3)执行一个查询任务。通过下面的图我可以知道,关于QueryTask的执行是在一个图层上进行的。QueryTask执行的主要步骤:
- 初始化一个map,然后添加一个图层,这个图层主要是作为背景图层显示的
- 初始化一个QueryTask对象,参数是一个utl,这个url制定为一个mapservice的Layer,例如上面所说的
http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/3
- 初始化一个query(esri.task.Query)对象,对于query对象中主要做的是对查询条件的设置,返回结果设置等。
- 设置信息显示窗口的大小。
- 如果有Geometry对象返回的话,设置Geometry对象的样式。 Read the rest of this entry »
Posted: June 21st, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, 实习, geoprocessing, rest | No Comments »
以前对于arcgis只是给美国那边解决一些简单的小问题,毕竟那边没有什么专门的人来做arcgis开发,最近自己这边的设计也快出来了,开始准备开始做系统开发,从目前的开发框架上来说,自己还主要是学习使用rest的方式来开发arcgis中的功能。之所以选择rest开发主要有两个原因:第一是项目的具体需求需要;第二的原因是arcgis server的rest开发方式实现了我多年梦寐以求的GIS开发模式。其实这arcgis最有魅力的地方还是arcgis server中的geoprocessing的部分,如果你选择了使用这种开发模式的话,我相信你的代码量将会减少到只有原来的三分之一左右,如果是要是需要arcgis中多个功能之间进行组合的话,那这样的方式更适合你。
想要了解arcgis server中的geoprocessing service 的话,首先应该了解是arcgis desktop中的arctoolbox和ModelBuilder部分,因为要使用geoprocessing service需要发布的是arctoolbox,在实际调用的时候只要根据参数和服务地址来调用相应的服务。自己在学习这方面的资料的时候看的资料都是零零散散的,只有在youku上看见了一个arcgis的培训视频之后才慢慢的明白其中的一些意思。
首先介绍一下modelbuilder,打开一个arcmap或者是catalog,然后打开arctoolbox中新建一个arctoolbox,然后你可以之间将相关的arcmap中的一些arctoolbox中的一些功能直接拖拽到你新建的modelbuilder中去,这样发布出去的geoprocessing服务与具体的地图没有关系,这样发布出来的服务能够被任何应用程序调用,不过需要对于数据的输入输出必须得满足您所选择的开发模式。具体的数据支持请参考:input and output data types,大家目前习惯的开发模式为rest开发方式,而且很多的事情是直接在web应用中去调用geoprocessing service的服务。
对于geoprocessing service的服务发布存在两种方法,第一种是直接使用arcgis server manager来发布服务,一般来说如果是仅仅简单的进行发布一个geoprocessing service的话,那直接在新建service中新建一个geopeocessing service;另外一种发布geoprocessing service的方式是使用catalog的方式进行部分。 Geopeocessing service 其实有三种:
- A geoprocessing service
- A geoprocessing service with a source map document
- A geoprocessing service with a result map service
关于三种service的大概可以理解成: Read the rest of this entry »
Posted: April 13th, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, rest | 1 Comment »
以前自己做arcgis server的开发一般都是基于jsf框架做的,最近美国同事那边开始做基于rest的开发方式,自己以前在java的条件下做了几个demo,感觉还不错,开发起来比jsf感觉要爽很多,不需要一大堆jsf之类的东西。
开始自己想实现简单的功能就是在地图加载的时候自己直接添加上一些点,自己做一个test程序,程序的代码如下:
dojo.require(“esri.map”);
var map;
function init() {
var startExtent = new esri.geometry.Extent(-117.29, 34, -117.14, 34.10, new esri.SpatialReference({ wkid: 4326 }) );
map = new esri.Map(“map”,{ extent: startExtent });
var tiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer(“http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer”);
map.addLayer(tiledMapServiceLayer);
addPointToMap();
}
function addPointToMap(){
//alert(map.graphics)
var markerSymbol = new esri.symbol.SimpleMarkerSymbol();
markerSymbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE);
markerSymbol.setSize(12);
markerSymbol.setColor(new dojo.Color([255,0,0,0.5]));
pointESRI = new esri.geometry.Point(-117.233,34.057, map.spatialReference);
// alert(“pointESRI “+pointESRI);
pointGraphic = new esri.Graphic(pointESRI, markerSymbol);
// alert(“pointGraphic “+pointGraphic);
map.graphics.add(pointGraphic);
}
dojo.addOnLoad(init);
就这样的一段代码自己怎么弄就是现实map.graphics的对象始终为null,一开始就不明白,然后我就在想试试因为map.graphics这个对象在map的onload的时候还没有初始化完的呢?照着这个想法自己写了一个button,然后在onclick事件中直接添加了addPointToMap函数,结果work了,看来自己的想法八九不离十了,然后自己就回到rest 的javascript api中查了一下最后看到了一段原文的描述:
Since the Map.graphics object is only available to use after the Map.onLoad event is fired, you should wait to register event listeners until the the Map.onLoad event is fired.
看完之后我明白是怎么回事了,但是我不知道怎么样才能解决这个问题,之前自己也没有怎么写过javascript程序,然后自己又在api中查到了dojo.connect方法,这个方法就可以监听事件。然后在看了一下api中的sample,之后只是在上述的init中添加一句dojo.connect(map, “onLoad”, addPointToMap);然后就搞定了。 Read the rest of this entry »
Posted: March 6th, 2010 | Author: laomi | Filed under: 开发日志 | Tags: arcgis, 空间数据挖掘, gis | No Comments »
最近在这边实习的主要工作是做数据挖掘的工作,自己以前在实验室也做了一些类似的工作,但是以前的工作相对来说比较简单。目前自己主要做的事情首先就是利用spatial analyze部分分析数据,看看目前自己所用所的数据特征,然后再决定做什么。
关于arcgis spatial analyze的部分主要包括以下几个:在这里面有不少你常常用来做数据分析的工具,例如点密度分析,均值和方差分析,栅格图的差值以及表面分析等。最近我收到有一些数据要做一些空间的处理,如果有过的东西自己来写程序也不是很难,但是已经有了现成的工具干嘛不用,况且只是用这些工具来分析一下这些数据适合做些什么处理。在做这些数据处理的工作中,自己主要是用到了空间分析中的点密度分析,对于计算出来的栅格数据对他们进行均值和方差的计算,后来主要是用了spatial statistic中的一些工具来判断自己的数据是不适合做聚类分析等,其实在spatial statistics中有很多关于计算聚类的工具比如:analyzing pattern中的一些工具,不知道熟悉arcgis arcmap工具的朋友们知道不,在arcgis arctool box中有很多的工具是可以看到他们的python代码,其实这些也是学习用arcgis 来做开发的一些很好的资料。这次自己也用vba开发了一些arcgis的程序的运用,主要用来将最后的计算结果以更好、更形象的方式展现出来。
自己以前对于arcgis还是挺排斥的,我想主要原因有:第一在刚刚接触gi产品的时候,自己第一个接触的产品时mapinfo,而且mapinfo在界面设计方面确实是做的非常的人性化,自己从一用上它就喜欢它了;第二的主要原因是arcgis功能很强大,很多的功能需要经过专业的培训才能很好的掌握,但是自己在平常的项目中,用到得GIS得功能相当的简单,用maoinfo基本上就能解决了,所以自己也不是很想去接触arcgis,毕竟平常没有那么多的时间去接触他。但是来这边实习之后,自己慢慢的发现arcgis的强大之处,它的强大确实是超出了我的想象范围,现在自己确实认为他是一个很不错的GIS工具,但是想很好的掌握这个工具还得花些时间去弄清arcobject,现在自己只是接触了arcobject中很少,比较简单的部分。 Read the rest of this entry »
Recent Comments