Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)

最近要搞的项目要用Arcgis api for Javascript做地图模块,自己开始学相关的技术。这是之前整理的笔记,现在传到博客上,也作为学习的记录

0 环境搭建

Arcgis软件统一使用10.2版本(更新的版本很难找到比较齐全的server、sde等配套软件),安装arcgis Desktop、arcgis Server、arcSDE。更新的版本难以找到全套并破解的,如果能找到就更好了。

网页api使用Arcgis api for Javascript 4.14版本(目前的最新版本是4.15)。使用js api不需要搭建任何环境,但需要与Server配合使用。

Server在安装时会要求输入系统管理员账户和密码,务必使用本机的账户和密码,否则它会在电脑上新建一个账户。安装完成后,打开http://localhost:6080/arcgis/manager/进入Server的管理页面(打不开时在任务管理器中查看arcgis server服务是否启动)。初次登录时会要求创建站点管理员账户,建议账户名密码均为arcgis。

SQL Sever使用2014版本。

1 地图服务发布

在arcmap中可以将地图工作空间内的内容以地图服务的形式发布,地图服务发布后可以使用js api加载,其显示效果(线条的颜色、图层的开闭等)均与在arcmap中看到的一模一样。

发布服务前,在arcmap中把需要的数据全部加载进去,设置好图层的排列顺序、符号的格式、颜色等,并将工作台保存成.mxd文件。

点击File--Share as--Service进行发布服务。选Publish a Service发布一个新的服务,Overwirte就是覆盖原有的一个服务。初次使用时需要添加新的服务器链接,Server url填http://localhost:6080/arcgis 。

发布服务时的设置基本默认。

capabilities选项中,勾选Feature Access;在Feature Access的选项中,Operations allowed选项中选择增删改查等选项,这种方式发布的矢量图层才能才能在js api中进行编辑。

当有栅格图层时,需要在Caching选项中设置切片的层数,防止数据量过大。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第1张图片

 

服务发布后可以在Server的管理页面看到,点击图片可以预览。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第2张图片

 

发布时会自动把数据拷贝一份到服务器目录中。修改原本的数据是不会影响服务器中的数据的。如果需要服务内容跟随数据变化而动态变化,则需要将数据库或文件夹注册到服务器(见2.5节)。这样在发布服务时也不需要拷贝数据了。

2 地理数据库相关

使用arcSDE可以配合sql server创建并读写地理数据。Arcgis可以以sql Serve支持的的格式(geometry与geography)向数据库中存入地理数据,数据库中的一张表对应一个地图图层。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第3张图片

正在上传…重新上传取消

地理信息以压缩二进制形式存在Shape字段中,其他字段即是图层属性表中的内容。

对于这一个图层(/表),可以在SQL中对其进行编辑和管理,也可以在arcmap中直接加载,非常方便。

       但要实现以上功能,必须先在数据库中创建一个地理数据库。此后创建的图层才能被arcgis识别并加载。

2.1创建地理数据库

       创建地理数据库就是在数据库中创建一个类似GDB的文件结构,完成之后才能将普通的数据库当作地理数据库使用。在desktop中就可以完成这一操作。

       打开arctoolbox—data management tools—geodatabase administration—create enterprise geodatabase

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第4张图片

正在上传…重新上传取消

       平台选sql,实例填本机localhost,根据数据库登陆方式勾选操作系统认证;

数据库名可以是已有数据库的名字,这样就会在已有的数据库中创建地理数据库,否则会创建一个新的数据库;

取消勾选Sde owned schema,这样就会创建dbo架构的数据库(否则会以sde方式管理数据库,还会创建sde管理员什么的);

授权文件在图示位置。

创建完成的地理数据库中会出现一系列系统表,不用去动它。

2.2连接数据库

       在catalog中双击add Database connection,添加与sql server的连接。(需要安装ODBC Driver for SQL Server,sql安装时似乎已经自带了)

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第5张图片Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第6张图片

正在上传…重新上传取消

正在上传…重新上传取消

平台选sql,实例填localhost,然后在下拉框中就可以找到创建的数据库。在catalog中可以查看到该数据库中的所有表。

正在上传…重新上传取消

2.3 添加数据

右键数据库—import即可添加数据。可以将shapefile等以feature形式添加进去,或直接添加普通的表。

添加的shapefile会直接在数据库中形成一张表,表名就是之前填的名字。属性表中的内容也会完整保留下来。

正在上传…重新上传取消

在catalog里把图层拖到内容列表里即可查看。

注:表中字段名不能有SQL Server不支持的符号,如中文括号等。

2.4 数据编辑

图层数据需要先注册才能进行编辑

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第7张图片

正在上传…重新上传取消

在arcgis中,图层操作与通常操作shapefile相同。

在sql server中,图层数据的操作就和普通的表一样,可以进行增删改查等。但需要注意的是,geometry和geography数据不能直接在编辑模式下对字段内容进行编辑,需要通过代码来创建geometry或geography对象。

另外,当写入Shape数据(geometrygeography)时,需要对其使用MakeValid()方法,否则数据加载时会报错。以下是一个update的例子。

USE [TestGeoDB]

GO

declare @g geometry

set @g=geometry::STGeomFromText(' POLYGON ((484106.7988 3578750.2128999997, 484114.7882000003 3574915.2981000002, 486316.60319999978 3574919.8851999994, 486308.6138000004 3578754.8000000007, 484106.7988 3578750.2128999997)) ', 4549)

set @[email protected]()

-- 一定要MakeValid(),否则数据加载时出错

UPDATE [dbo].[CLIPRANGE]

   SET

      [Shape] = @g

 WHERE Id=5

GO

       注意geometry字符串最后的4549,这是坐标系代码,根据创建时的数据的坐标系生成,理论上不能变动了。

       在数据库的系统表dbo.SDE_dbtune中,有这样一个值:

正在上传…重新上传取消

这个值决定了数据库以geometry还是geography形式存储数据,似乎会根据导入的第一个数据的坐标系决定。

2.5 数据库注册到arcgis server

       在server管理页面的站点--数据存储中,可以注册数据库。这样,当服务需要读取数据库中的数据时,会直接从数据库中读取,而不需要复制一份到服务器;当数据库中的数据发生变动时,服务中的数据也会相应变化。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第8张图片

正在上传…重新上传取消

       点击“注册数据库”,要求填入名称及数据库连接。连接可以通过sde文件导入。若已在arcmap中创建了数据库连接,则可以在C:\Users\<用户名>\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog中找到对应的连接文件。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第9张图片

正在上传…重新上传取消

       我在导入连接文件时出现了问题,一直无法导入,于是在arcmap中进行了数据库注册。

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第10张图片

正在上传…重新上传取消

在catalog中右击地图发布服务器,选择server properties,点击registered Databases旁的加号,可以通过对话框注册数据库。

 

Arcgis api for Javascript + arcgisServer + arcSDE笔记(1)_第11张图片

为了以防万一,下面列出了一个连接字符串的示例:

SERVER=localhost;INSTANCE=sde:sqlserver:localhost;DBCLIENT=sqlserver;DB_CONNECTION_PROPERTIES=localhost;DATABASE=TestGeoDB;VERSION=dbo.DEFAULT;AUTHENTICATION_MODE=OSA

       注册数据库到server后,就可以使用这个数据库中的数据创建服务了。

 

你可能感兴趣的:(ArcGIS,ArcGIS,ArcGIS,API,for,Javascript,Arcgis,Server)