arcgis

建立自定义命令扩展ArcGIS

那年仲夏 提交于 2020-04-02 11:16:46
关于本文 本文演示如何创建一个简单的命令,实现缩放至所选图层范围的功能。该命令继承自ESRI公司的ADF里的BaseCommand类。以下是详细实现步骤。 注:本文演示环境 VS2020 & C# & ArcGIS 10.0 本文PDF下载 创建一个类库 开启VS2010,以 Visual C# >> ArcGIS >>Extending ArcObjects 下的Class Library (ArcMap) 为模板创建一个新类库项目,将该项目命名为CmdZoomToLayer,选择合适的存储位置,单击确定。如下图所示。 添加引用 为该项目添加所需的ESRI对象库引用以及System.Drawing引用。 ESRI提供的ESRI.ArcGIS.ADF.Local程序集包含了ESRI.ArcGIS.ADF.BaseClasses命名空间,可以继承该程序集所提供的一些抽象类来创建一个自定义命令/工具。该程序集还包含了ESRI.ArcGIS.ADF.CATIDs命名空间,其中的一些类可用于注册组件至合适的ESRI组件类别。 在上一步点击确定后,弹出ArcGIS Project Wizard,可以利用该向导添加ESRI对象库引用。因为现在创建的是ArcGIS Desktop应用程序,所以只有与ArcGIS Desktop相关的程序集才显示于该向导中。添加ESRI.ArcGIS.ADF

解析ArcGis的标注(一)——先看看分数式、假分数式标注是怎样实现的

拟墨画扇 提交于 2020-03-30 12:14:01
该“ 标注 ”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它。 ArcGis的标注表达式支持VBScript、Jscript、Python ,3种脚本语言进行语句解析。一般我们常用的是VB、Python。 普通标注这里不做讲述,先从一个简单的换行标注开始讲起。 两行标注 可以很简单的通过下面的VB语句来实现 [字段1] +VB换行符+ [字段2] VB的换行符一般用vbnewline,它与vbcrlf是等价的,在ArcGis的字段计算器或者标注表达式中其实还可以用chr(10)、chr(13)、chr(10)+chr(13)来替代。 先了解一下chr函数,它是将ASCII码值返回对应的字符,这篇文章的读者应该会对这个概念比较陌生,有兴趣不妨自己去查一下chr函数与ASCII。 chr(10)—>vblf—>换行; chr(13)—>vbcr—>回车; chr(10)+chr(13)—>vbcrlf(vbnewline)—>换行回车 上面vb……的东西是VB语言中的预置常数,其值就是对应的chr函数返回值。 下面几种组合的结果是一样的 [PartCount] +vbnewline+ [BH] [PartCount] +chr(10)+ [BH] [PartCount] +vbcr+

ArcGIS制图之Maplex自动点抽稀

淺唱寂寞╮ 提交于 2020-03-28 16:58:11
制图工作中,大量密集点显示是最常遇到的问题。其特点是分布可能不均匀、数据点比较密集,容易造成空间上的重叠,影响制图美观。那么,如果美观而详细的显示制图呢? 主要原理 Maplex中对标注有很好的显示控制,一旦显示符号,则会出现符号存在、标注不存在,并且可能存在符号互相叠置的现象(如上图所示);使用牵引符号将符号作为标注的一部分来显示,调整阈值自动进行标注间避让,计算出地图上所有标注的最佳放置,可以实现当标注不存在时,符号也不存在,从而达到不改变数据的情况下,完美地自动点抽稀。 下面的所有步骤是必须的,除此之外,用户还可以根据自己的要求、审美来调整标注其他属性。 实现步骤 第一步,选择Maplex标注引擎 。如果不是,在数据框架上右键-属性-常规-标注引擎,选择选择Maplex标注引擎即可。 第二步,选择牵引线标注。 在测试点图层上右键-标注-点击"符号",在弹出的符号选择器中选择项目符号牵引线(必须是这种样式),然后单击"编辑符号"准备进行修改。 第三步,设置牵引容差 。在弹出的编辑器选择高级文本-文本背景-属性,这里最重要的一步是设置牵引线容差,其值为符号到标注的距离(单位为磅,1磅约=0.03527厘米,1厘米约=28.35磅),设置间距为0,然后点击牵引线复选框下的"符号"。 第四步,设置标注属性 。在弹出的符号编辑器中选择类型为"标注线状符号"(英文为marker line

spatial join arcgis pro

痴心易碎 提交于 2020-03-28 06:40:44
问题 I got this shape files Highway1,Highway2,Highway3 etc... The attribute tables are the same, they contain info about latitude, longitude , direction, shape_length and speed_allowed. I want to make a script in python that would allow me to make a spatial join between every shape file that intersect other . For example if Highway1 intersect Highway2 , Highway12 and Highway22 i want 3 spatial join, every join should contain all the data from Highway 1 and where intersect the other highway, to

ArcGIS 9.3 安装之 SDE的安装及使用

旧巷老猫 提交于 2020-03-24 07:17:01
由于ArcSDE9.3只支持Oracle 11gR1 32位版本,所以要在安装ArcSDE的电脑上安装一个32位版本的Oracle 11gR1客户端。 1 、安装SDE程序,并进行注册 (1)选择注册机KeyGen.exe,点击server标签,在Feature下拉列表框选择arcsdeserver,Version下拉列表框选择93,点击ALL按钮,生成license文件 (2)将license文件,全选,新建一个txt文档,将其拷贝进去,另存为.ecp文件,注册的时候,选择该文件进行注册。 (3)ArcSDE安装。打开安装目录找到..\ArcGIS 9.3\sde\ESRI.exe,选择ArcSDE for oracle 11g (ATMS所用数据库为oracle 11g),next直到安装完成。 (4)点击ok进入ArcSDE的配置界面。 2 、安装后的配置 (1)进入如下界面,选择complete安装 (2)进入下一步安装,此处需要连接数据库,输入sys用户的密码(Admin2008),进行对后续Oracle数据插入SDE表空间的操作 (3)此步为创建SDE表空间和SDE用户 在第一个文本框中,输入SDE用户的密码,需要记住,本次系统采用sde作为密码以便记忆,方便测试,系统投入使用,则需要严格按照数据库密码管理办法执行。选择默认表空间名称,一般为sde

ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别

ぃ、小莉子 提交于 2020-03-23 05:10:33
1:QueryTask是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便需要提一下的是,QueryTask进行查询的地图服务并 不必项加载到Map中进行显示。QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。 查询一个图层里面的数据:链 接如http://10.188.180.124:8399/arcgis/rest/services/123/MapServer/13 ,MS只可以查找唯一的数据; 2:FindTask是在某个地图服务中迕行属性查询的功能类。FindTask不QueryTask的使用徆类似,当然,QueryTask在execute的时候需要给一个Query对象作为参 数,FindTask则是给一个FindParameters对象作为参数。另外,FindTask的url属性需要指向所查询的地图服务的REST URL,而丌像QueryTask需要指定子图层的 URL。 可查询单图层和跨图层数据,输入查询的图层Layers;查询的字段名字Search Fields,查询的条件 Search Text,可以查询非唯一的数据。 3:IdentifyTask是一个在地图服务中识别要素的功能类。当用户在客户端使用Draw工具绘制了一个几何对象以后

python制作ArcGIS插件(1)

吃可爱长大的小学妹 提交于 2020-03-23 02:47:14
ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作。相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷。通过开发语言,可以制作ArcGIS Desktop各个软件模块的插件。 Addin支持多种开发语言,如.net、java和python。其中.net和java需要配合ArcGIS的SDK,使用ArcObjects进行开发。其好处是ArcObjects可以非常细粒度的控制ArcGIS Desktop的各种操作;其困难之处就是ArcObjects非常庞大,学习成本非常高,一般只适合有多年编程经验和熟悉ArcGIS的开发人员使用。Python语言进行Addin开发,非常适没有编程能力,但又经常使用ArcGIS工具的人员使用。为什么这样说呢?由于python语言非常简洁,写法独特,由于适合于没有学习过编程语言的人上手(没有任何的编程语言羁绊有时候是件好事),而且ArcGIS内置了ArcPy,一个使用python进行ArcGIS调用的开发包,可以轻松调用ArcGIS Desktop的所有工具箱工具,并能通过python语言很好的进行扩展,可以说,使用python进行Addin开发,门槛相当低,而且快捷。但不足之处也是显而易见的,就是ArcPy定位是工具级别的操作,粒度相对于ArcObjects 是非常大的,不适用做复杂的交互操作

ArcGIS Label

元气小坏坏 提交于 2020-03-22 22:59:12
ArcGIS Label 以前用 ArcGIS Label 一般也就在图层的 Properties 里面定义一下 Label 字体大小和粗细。这两天遇到一个问题,需要在 Label 中显示多个字段的内容,比如 BlockName 和 CompanyName 。其实这个本来不是很难的问题,因为 Label 中支持 VBScript ,使用 [BlockName] & VbNewLine & [CompanyName] 。就可以实现标注中第一行显示 BlockName ,第二行显示 CompanyName. 现在问题出来了,出图时候希望突出 BlockName 效果,希望加粗显示,而 CompanyName 使用一般字体。考虑了很长时间终于从 ArcGIS 帮助中找到了相关的内容,原来 Label 的 VBScript 里面支持类似于 Html 的 VBScript 标签,比如加粗就是用 <BOL>, 上面问题就可以使用下面语句解决 : "<BOL>" & [BlockName] & "</BOL>" & VbNewLine & [CompanyName] 除了加粗, ArcGIS 中还支持下面的文本格式标签 : Font: 字体 "<FNT name='Arial' size='18'>" & [LABELFIELD] & "</FNT>" Color: 颜色 "<CLR red=