访问量: 203 次浏览
一直觉得ArcGIS的开发很复杂。看过的教程上都说要先打开Visual Studio,建立相关的工程,添加窗体,再加入控件。这还不够,还有一个授权的问题。而且还有新旧版本迁移、转换的问题。所以,我觉得在Visual Studio窗口拖曳的背后有着复杂的AO、授权与窗体相互耦合的复杂机制。 作为常年使用命令行、纯文本编辑器写程序的人来讲,ArcGIS的这种开发方式无疑是令 我深恶痛绝的。面对着刚刚初步建立的工程文件里面自行产生的众多代码,立刻有一种无能为力的感觉涌上心头。所以尽管也用c#做过一点ArcGIS的开发,但一直感觉对 其开发的方式并不了解。 这次也不知为什么,突然想做一个最简单的基于.net的ArcGIS开发,我想看一下剥去层层外衣的ArcGIS是个什么东西。 最简单的方式当然是基于命令行的,没有图形界面,想做点有用的东西,就是地处理了。 做个经典的缓冲分析吧。 下面是代码,文件名为Program.cs,当然这不重要。用到一些数据可以自己找,在源代码中修改一下即可。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.AnalysisTools;
using ESRI.ArcGIS.esriSystem;
class Program
{
static void Main( string[] args)
{
// 首先要进行授权。没想到是这么简单
// 原来以为背后还会有一些东西
// 这种授权方式是针对ArcGIS 10的。
ESRI.ArcGIS. RuntimeManager .Bind(ESRI.ArcGIS.ProductCode .EngineOrDesktop);
// 设置一些参数变量
string ws = @"d:\w\gdb.gdb\ds" ;
string infea = "arc" ;
string outfea = "arc_buf" ;
int buf_size = 2000;
// 创建地处理对象,并设置工作空间
Geoprocessor gp = new Geoprocessor();
gp.SetEnvironmentValue( "workspace" ,ws );
// 缓冲工具,也要建立对象,感觉没有面向过程的语句好理解
ESRI.ArcGIS.AnalysisTools. Buffer bufTool =
new ESRI.ArcGIS.AnalysisTools.Buffer (infea, outfea, buf_size);
// 最后别忘记执行之。
gp.Execute(bufTool, null );
Console .ReadLine();
}
}
很简单的代码。 然后要进行编译,基于命令行的模式。程序引用了一些dll,可以都拷贝到源文件目录下面:
ESRI.ArcGIS.AnalysisTools.dl l, ESRI.ArcGIS.Geoprocessor.dll, ESRI.ArcGIS.System.dll, ESRI.ArcGIS.Version.dll。
下面是编译的命令,为了版面的问题分行写了,用的时候要放到一行中:
csc /r:ESRI.ArcGIS.Geoprocessor.dll,ESRI.ArcGIS.Version.dll,
ESRI.ArcGIS.System.dll,ESRI.ArcGIS.AnalysisTools.dll
/out:run.exe Program.cs
可能是我的大脑比较简单,不简化到最简单的模式,实在是不好理解。两相比较之下,还是简单的Python更适合我。