资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
使用外部数据库中的属性值标注要素空间要素的属性信息通常是存储在一个外部的数据库中。例如,地方政府一般都会以shapefile、geodatabase或者其他GIS的格式存储宗地信息,而宗地的业主信息则可能存储在土地管理部门的一个数据库中。为了打印一幅印有业主姓名的宗地地图,我们需要将带有业主信息的表格从外部的数据库中连接(join)到宗地这个要素类上。当空间数据与非空间数据是一对一或多对一时,上述操作能顺利进行。但是,如果空间数据与属性数据是一对多或多对多时,空间要素则会被标注一个值,而不是多个值。多个单位共用的宗地就是这一弊病的好例子:这块宗地可以用一个单独的多边形来表示,但是在税务数据库中,这块宗地上的每一个单位都会相应有一条记录。使用ArcMap中的高级标注选项可以轻松地解决这个问题。通过ArcMap中的VBScript解析器,我们可以编写VBScript代码来自定义标注内容(ArcMap也支持JScript)。可以利用ActiveX Data Objects(ADO)访问外部数据库,以获取属性信息。ADO是建立在OLE DB基础上的基于对象的高层数据接口,能够访问任何类型的数据(可以是相关数据库,也可以是外部数据库、文件夹、文件甚至e-mail信息)。在编写代码之前,有两件重要的事必须做。在客户端PC机上必须安装适当的数据库连接驱动程序。对于大多数的Windows PC机,Microsoft Access和Microsoft SQL Server的驱动程序都默认安装了。Oracle或者MySQL等其他数据库的专用驱动程序可以从软件提供商的网站下载。数据库连接字符串(ConnectionString)是ADO最重要的属性,它包含了ADO定位和配置驱动程序所需要的信息。各种数据库的连接字符串可以在www.connectionstrings.com查询。数据库连接字符串OraclePROVIDER=OraOLEDB.Oracle;Data Source=aDatabaseName;UserID=aUserName; Password=aPasswordMySQLdriver=MySQL ODBC 3.51 Driver; erver=aServerName;Database=aDatabaseName;uid=aUserName; PWD=aPasswordMicrosoft AccessPROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=c:myDatabase. mdb; Microsoft SQL Server(using Windows NTIntegrated security)Provider=SQLOLEDB; Integrated Security=SSPI; Persist Security Info=False; Initial Catalog=aDatabaseName; DataSource=aServerName表1 部分数据库的典型连接字符串在VBScript中,创建任何对象都要使用CreateObject()函数,并且要含有正确库名和对象名(例如:ADODB.Connection)。只要创建了Connection和RecordSet 对象,就可以使用正确的连接字符串打开数据库连接,通过一个正确的SQL语句打开RecordSet,使用带有字段名的RecordSet对象的Value属性获取数据。当获取数据之后,必须确保RecordSet和Connection对象关闭并且置空。安装完适当的驱动程序,并且找到正确的连接字符串之后,可以按下列步骤,利用外部数据库中的属性信息对地图进行标注。1. 打开ArcMap,添加需要标注的图层。2. 点击该图层属性(layer properties)对话框中的标注(label)标签,点击Expression按钮。3. 在Label Expression对话框中,选中Advanced复选框,在Expression框里即可见FindLabel()函数的桩代码。4. 将光标移至FindLabel后面的括号里,双击需要使用的字段的字段名。5. 在Expression表达式里书写表2所示的VBScript代码。6. 通过给函数名赋值返回字符串(例如:FindLabel = aString)。图1 标注表达式对话框点击Verify按钮,验证代码是否正确。如果代码无误,ArcMap将显示标注的样例。使用这种方法是十分便捷的,业主信息是存储在一个外部数据库中,而宗地分布信息则存储在一个personal geodatabase里,并且只含有一个ID属性。这种方法的一个优点就是迅速,只需几秒钟就可以标注上百个多边形(尽管标注的速度与PC机性能及网络速度有关)。这种方法的唯一缺点就是它要创建、打开再关闭数据库连接,并且为地图上的每一个可见要素做查询。需要做很多要素的标注时,这样的动作会使处理速度减慢,增加网络流量。解决此问题的一个方法就是设置可见比例尺(Scale Range)。在LayerProperties对话框的Label标签里,点击Scale Range按钮,定义标注的可见比例尺范围。Function FindLabel ( PIN )Dim strPrclQry, strInfostrPrclQry = SELECT OWNER_NAME FROM aTABLE WHERE PIN = & PIN & Dim ADOConnset ADOConn = createobject(ADODB.Connection)Dim rsPrclset rsPrcl = createObject(ADODB.Recordset) ADOConn.Open PROVIDER=MSDAORA;Data Source=aDatabaseService;User ID=aUserName;Password=aPasswordADOConn.CursorLocation = 3rsPrcl.Open strPrclQry, ADOConn, 3, 1, 1如果没有找到记录,则返回空字符串如果找到多于一条的记录,则通过来暗示含有多条业主信息可以做循环,直到标注出所有的业主信息Select Case rsPrcl.RecordCountCase -1, 0strInfo = Case 1只读取第一条记录strInfo = trim(rsPrcl.Fields(OWNER_NAME).Value & ) 在空值的情况下将出错Case ElsestrInfo = rsPrcl.Fields(OWNER_NAME).Value & End Select关闭连接-这是必须的rsPrcl.CloseADOConn.CloseSet rsPrcl = NothingSet ADOConn = Nothing返回字符串用于标注FindLabel = strInfoEnd Function表2 使用ADO连接为宗地标注业主姓名的VBScript代码
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号