使用python制作ArcGIS插件(5)其他技巧

by 李远祥

使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口。只有掌握了这些,才可以顺利的开发ArcGIS插件。

但是,很多程序开发者真的不喜欢python的写法,尤其不习惯,既希望能够使用ArcPy的简洁用法,又希望在其他逻辑操作中使用自己熟悉的语言。其实python的优势之处在于其粘合度非常好,可以充分利用一些其他语言的功能。

假如程序员非常熟悉VB这个古老的语言,之前已经有一些逻辑实现在VB上完成了,希望能够很好的迁移到python中来,如果什么都得重新实现,那实在令人失望。下面介绍一种比较有效的方式去调用VB或者VBScript。

ArcGIS Desktop在相当的一段时间内允许使用VBScript去扩展其功能,并且在很多的工具里面都允许使用VBScript。以前有相当的这些成果,都可以使用python去调用这些既有的成果。

看以下一个excel表格的内容,这是一个机场点的数据,一般情况下会使用十进制度来描述经纬度,当然也有例外的时候,例如下图这样

用字母表达东经北纬等,维度的前两位是整度,后面是小数位;经度的规律也是类似的。如果要将这个表格进行落地,将其坐标转为点数据,那么需要对这些非十进制度进行转换。常规的流程是使用excel转表工具先转为arcgis的table,然后对table新增两个double字段,用作重新计算X和Y,之后用xy data工具转为点数据。

这个流程问题不大,但主要是经纬度的转换,在Python下面做远没有在VB脚本下做那么简单。如果我们希望用最简单的方式去实现的话,只是这个转换工作使用VBScript,其他部分还是使用Python,那这样就最优的方案。ArcGIS是允许这样执行的。我们来看以下代码

#写入经度
        airPort_X_codeblock="""dim result
            result = Mid( [经度],2,3 )
            if  Left( result ,1 )=0 then
            result= Mid(result,2,2 )
            end if
            result =result+"."+ Mid( [经度],5,2 )
            result = result+Right( [经度],1 )
            if  Left( [经度],1  )="W" then
            result="-"+result
            end if"""
        arcpy.CalculateField_management(AB.airPortTableURL,"X","result","VB",airPort_X_codeblock)        

        #写入纬度
        airPort_Y_codeblock="""dim result
            result = Mid( [纬度],2,2 )
            if  Left( result ,1 )=0 then
            result= Mid(result,2,2 )
            end if
            result =result+"."+ Mid( [纬度],4,2 )
            result = result+Right( [纬度],1 )
            if  Left( [经度],1  )="S" then
            result="-"+result
            end if"""
        arcpy.CalculateField_management(AB.airPortTableURL,"Y","result","VB",airPort_Y_codeblock)
        #创建XY图层,还没加入坐标系统选择功能
        #spRef = r"Coordinate Systems\Geographic Coordinate Systems\world\WGS 1984.prj"
        arcpy.MakeXYEventLayer_management(AB.airPortTableURL,"X","Y",AB.airPortTable,mapLayerInfo.XYRef)

上述代码就是将VBScript代码混在ArcPy中进行调用,可以看到使用的是字段计算器,其中有一项是选择脚本语言,那么可以选择VB项进行调用。

ArcGIS有很多工具都支持混合脚本调用。这些都是非常重要的技巧,可以尽量使用自己熟悉的工具或者使用已有的成果来实现功能。

使用python制作ArcGIS插件(5)其他技巧的更多相关文章

  1. 使用python制作ArcGIS插件(4)界面交互

    使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

  2. 使用python制作ArcGIS插件(3)ArcPy的使用说明

    使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...

  3. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  4. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

  5. 使用python制作ArcGIS插件(6)案例分析

    利用ArcPy制作航空制图插件 By 李远祥 这是笔者两年多前写的一个面向航路图做的一个插件,基本上将航路图的制作进行流程化,制作成为可交互的插件,只要有航路和机场的信息,就可以直接生成一个航路图,每 ...

  6. 《零基础学习Python制作ArcGIS自定义工具》课程简介

    Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...

  7. ArcGis Python脚本——ArcGIS 中使用的 Python 是什么版本

    Python 编程语言用于自 9.0 起的各版本 ArcGIS 中,并被整合到 ArcMap 和 ArcGIS for Server 的自动安装中. ArcGIS 将在完整安装过程中安装下列 Pyth ...

  8. Python 内编写类的各种技巧和方法

    Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...

  9. 转载:用python爬虫抓站的一些技巧总结

    原文链接:http://www.pythonclub.org/python-network-application/observer-spider 原文的名称虽然用了<用python爬虫抓站的一 ...

随机推荐

  1. 控制流之break

    break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句.一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块 ...

  2. 网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  3. view添加阴影无效

    需求:需要给cell里的imageview添加阴影 问题:按照标准的代码添加阴影,然并卵:代码如下: imageview.layer.shadowColor = [[UIColor blackColo ...

  4. 基于libUSB的USB设备固件更新程序(下载数据)(转)

    源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libU ...

  5. VS2010下创建的VB.NET项目打包发布安装包的流程

    VS2010下创建的VB.NET项目打包发布安装包的流程 参考:http://blog.csdn.net/liuyanlinglanq/article/details/8609675  关于relea ...

  6. 交换Ctrl和Caps Lock键

    由于使用vim的缘故,就把Ctrl和Caps Lock键交换了,在ubuntu系统下使用系统设置可以很简单地进行全局替换. 在ubuntu下习惯了之后在window下就经常按错...后来决定也把win ...

  7. jstree使用小结(二)

    继续上一篇: 1.数据 按照官网的json数据返回格式: 有两种格式,我使用的格式如下: $('#jstree1').jstree({ 'core' : { 'data' : [ { "id ...

  8. async & await 的用法

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们 编程埋下了一些 ...

  9. gulp学习指南之CSS合并、压缩与MD5命名及路径替换

    1.引入插件 var gulp = require('gulp'), // uglify = require('gulp-uglify'), concat = require('gulp-concat ...

  10. windows系统下安装Scala

    一.下载.msi文件 直接下一步安装 二.配置环境变量 1.环境变量 -->> 用户变量 -->> 新建 SCALA_HOME: D:\Program Files\scala ...