Arcgis 二次开发指导 热点分析实现

背景

大三下上完了arcgis二次开发,真心觉得咱们gis开发这个平台还是太小了,也不那么成熟。主要体现在 1.文档不全,稍有特色的功能比如热点分析就没有文档。2.乱七八糟的接口还有类,还有很多强制转换,都是些什么鬼…开发变成了背书吗?

为了做二次开发的大作业,我就想实现热点分析这个功能,百度和谷歌都查了好久好久,相关的信息非常匮乏,最后我终于做出来了!!朋友们,让我来告诉你们这玩意怎么做吧!

具体操作

1.toolbox试验

如果你在二次开发中,要实现arcmap的arctoolbox中某个功能,请先使用arctoolbox操作一遍,来验证你的输入文件名,输入数据格式,输出数据名,相关licence开启等是否有问题,排除和二次开发代码逻辑无关的因素。如果显示成功,结果无误,就可以进行下一步操作了。
在这里插入图片描述

然后找到功能对应的工具大类,比如热点分析的工具大类是空间分析(Spatial Analyst tools),

然后通过工具找到对应的二次开发命名空间的引用,如果你不知道对应的英文名,可以看我这张图。

2.查找接口

开发第一步,找接口!!或者找相关的示例代码!别人的梯子改改不香吗??!!问题来了,如何找接口,文档很庞大(吐槽二次开发文档的搜索),怎么找到你想要的那个接口?分为以下几步:
(1)找出相应工具的英文名,所有工具在这个网址都有,arctoolbox工具相关接口名比如热点分析叫hotspot。
在这里插入图片描述
(2)点击visual studio的引用中对应的命名空间,双击就会出现相关文献,(比帮助文档全多了,强烈推荐结合二次开发的帮助文档一起看)
找接口

(3)如果文档里面没有相关的示例代码,(没错有时候就会很坑,gis开发就是不友好)。但你已经得到了相关操作的英文名和中文名,请去谷歌或者百度上搜索相关示例代码,(可以搜索: arcgis + 功能名+c#),官网有Java,C#,python的代码,可以借鉴。

在网上查找到 热点分析是SpatialAnalysis大工具下的,而所有SpatialAnalysis大工具都是可以通过 Geoprocessor来处理!如果你对强大的Geoprocessor还不理解,可以看看这篇文章

3.输入文件路径,特别注意!

虽然我很幸运的找到了涉及调用的工具,但是我在 没有正确的填写 输入输出路径这里卡了一周!事实证明真的坑!
给大家列出3个易错点(都是我猜的坑):
1.路径中default.gdb不需要后缀名(.gdb)
2.输入输出的要素都需要.shp后缀名
3.路径不能太深或者出现空格(最好使用全英文路径,root目录下更好)
给大家我的正确示范:

 HotSpots getisOrd = new HotSpots();
getisOrd.Input_Feature_Class = @"D:\data\Vorono.shp"; // input feature class  
//getisOrd.Input_Feature_Class = @txtInputPath.Text;
getisOrd.Input_Field = "Cu";
getisOrd.Input_Field = txbField.Text;
getisOrd.Output_Feature_Class = @"D:\data\POPU_Hottt.shp"; // location of output feature class  
//getisOrd.Output_Feature_Class = @txtOutputPath.Text;
getisOrd.Conceptualization_of_Spatial_Relationships = "INVERSE_DISTANCE";
getisOrd.Distance_Method = "EUCLIDEAN_DISTANCE";
getisOrd.Standardization = "NONE";
getisOrd.Distance_Band_or_Threshold_Distance = 200;
gp.Execute(getisOrd, null);

 //执行地理处理工具
IGeoProcessorResult results = (IGeoProcessorResult)gp.Execute(getisOrd, null);

//添加缓冲区图层到当前地图中
 Add2Map(); //这个函数我就不解释了 大家应该都会

4.找出错误原因

提到正确的解法是不完全的,如何debug,自己找出正确解才是最重要的,大家最好使用MessageBox来输出具体的错误信息,visual studio报错程序异常,给出的错误提示真的用处不太够啊!
下面是使用Geoprocessor输出具体错误信息的代码,因为messageBox大小是固定的,所以可能会显示2次messageBox哦!请认真看完全部的错误信息!特别是如果关于路径问题,请参考上面我的路径写法!

 try
            {
 }
 catch (Exception ex)
            {
                string message = "";
                for (int i = 0; i < gp.MessageCount; i++)
                {
                    message += gp.GetMessage(i) + "    ";
                }
                MessageBox.Show(message + e.ToString());
            }
        }


总结

没啥好总结的,接下来我还会写几篇二次开发的实验吧,毕竟这东西我觉得不写出来,以后的学弟学妹还要和我们受一样的苦。

如果如果大家对Arcgis二次开发、深度学习和大厂面试感兴趣的人,也可以加关注我的微信公众号,里面包括Arcgis二次开发、保研分享、大厂面试、机器学习等内容,会持续更新的:)
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值