安装了ArcGIS Server 一直都不知道怎么用,最近一个星期也没有写什么东西,现在累计了一个星期,一起写出来吧。
ArcGIS Server有几个必须知道的URL路径
http://localhost:8399/arcgis/rest/services 这个是: ArcGIS Services Directory ArcGIS 服务的目录。很重要。在部署services后自动生成。
http://localhost:8099/arcgismanager/main/main.jsf 这个是:管理ArcGIS Server的一个主要链接,登陆账号就是设置的arcgismanager ,其实应该是只要是agsadmin组的用户都可以登陆
上面的这两个服务 是 arcGIS Server 自带的一个服务,其主要的程序是:
"E:\Program Files\ArcGIS\Server10.0\java\manager\service\lib\manager.exe"
主要的web目录在:
8399端口下:
E:\Program Files\ArcGIS\Server10.0\java\manager\web_output
该目录下包括
/rest #8399 这个应该是服务目录 主目录了。
/sdk/soap #rest 开发文档
/sdk/rest #rest 开发文档
/web #主要是发布的应用程序在这里 形式以war文件,至于怎么调用 懂JSP的应该熟点吧
8099端口下:
E:\Program Files\ArcGIS\Server10.0\java\manager\service\managerserver
应该是这个样子的。。我对于JSP和tomcat(这个manager.exe应该是tomcat的修改版 的主文件。)
这个ArcGIS Server的服务运行 架构 解析 ,暂时就不做了。现在是只要知道怎用就行了。至于具体是怎么配置的服务 有空了再单独分析。
基本知识介绍完毕。下面开始主要的步骤了
1.ArcGIS 部署服务和发布Web应用程序
===============================
发布services至少有两种方法:一种是登陆8099管理页面,另一种是运行arcgisCatalog,连接到ArcGIS Server上,然后选择需要发布的资源,右击直接发布
首先要确定发布何种服务:
这些分别是:地里编码服务、地理数据服务、地理服务、3D地球服务、地理数据处理服务、镜像服务、地图服务、搜索服务。(翻译可能不准确)
我并非全部使用过,但是最简单的应该了解MapService。
其次,选择数据源,地图服务的话,一般来说就是mxd地图文件了mxd地图文件会调用一些数据,确保这些数据也可以正常使用。
在E:\Program Files\ArcGIS\DeveloperKit10.0\java\samples\data 目录中,有一些数据,比如SanFrancisco,这里面有一个mxd地图和一个gdb文件数据库
还有 E:\Program Files\ArcGIS\DeveloperKit10.0\java\samples\data\mxds\包括了几个地图都是基于这些示例数据的吧。
在输入服务名称后,点击下一步,就是提交地图文件了。可以是远程提交,也可以是GIS Server本地文件系统上进行选择。下一步
地图服务可以发布许多capability,KML是谷歌地图可以识别的文件吧,基于xml的。Nerwork Analysis是网络分析,很有用的。手机数据访问。其他的几个WMS WFS WCS 不太熟悉。
选择一个,右侧和下侧都会有设置选项的。
然后一路下一步,直到finish就可以完成发布了。
在已经有了Services的前提下,才可以部署Web应用程序,这个web应用程序就是可以在web上查看地图啊,进行简单的操作的,具体有多少功能我不清楚,我只是介绍一个简单的方法而已。
在8099的左侧的application下,点击Create Web Application,输入名称,到时候回在路径中体现。
后面的操作主要在两个方面,一个是添加地图Layer,可以选择一个地图或者layer。
第二个是添加任务,比如查询、print。之类的,有些任务需要建立其他的服务,比如geoCOde,我没有建立,就不能添加。好像至少得添加一个任务吧,print最简单,不需要设置
最后完成回到管理界面。选择该app 点击上面的deploy部署,然后再点击这个app,就可以打开新的url访问了,比如http://angle-pc:8399/s/mapviewer.jsf?width=1131&height=673#
具体,其中要涉及到许多知识,我现在还没有完全学懂。继续学习。
2.部署本地ArcGIS APIs for Javascript(部署本地化的原因是,访问在线的太慢了)
===============================
首先,官网的地址是: http://help.arcgis.com/en/webapi/javascript/arcgis/ (有什么不知道的,请输入 http://help.arcgis.com查看)
在concepts里面,最后一个References=>Frequently Asked Questions,这个文章里是介绍 一些问题的,其中就有一个安装到本地。找到链接 ArcGIS API for JavaScript download page,进去下载就行了。需要注册一个arcgis的账号,必须通过邮箱验证(我的gmail邮箱验证是等了一天,才收到邮件的)。
下载好arcgis_js_v25_api.zip和 arcgis_js_v25_sdk.zip 之后,解压,sdk先别管,先配置api部分(就是js库,所有的数据都在这里面)
我用IIS来部署这个(任何Web服务器都可以,因为访问的都是静态内容,不对,除了arcgis目录下得有jsp ashx php三种服务器脚本支持才可以,其实可以写成静态的吧?)
我IIS根目录是C:\inetpub\wwwroot
我把api解压到了C:\inetpub\wwwroot\arcgis_js_api\arcgis_js_v25_api,把Library放到这里,sdk也放到这里。library是api的主目录,包括安装部署文档和2.5的arcgis和arcgis_compact两种服务(有什么区别,我还不知道)。
必须做的替换:
修改C:\Inetpub\wwwroot\arcgis_js_api\library\2.1\arcgis\js目录下的
\esri\esri.js、
\dojo\dojo\dojo.xd.js、\dojo\dojo\dojo.xd.js.uncompressed.js
的“[HOSTNAME_AND_PATH_TO_JSAPI]”为“<myserver>/arcgis_js_api/library/2.1/arcgis/”,<myserver>为计算机名字。同样的,
C:\Inetpub\wwwroot\arcgis_js_api\library\2.1\arcgis_compact\js目录下的
\esri\esri.js、
\dojo\dojo\dojo.xd.js、
\dojo\dojo\dojo.xd.js.uncompressed.js的“[HOSTNAME_AND_PATH_TO_JSAPI]”为“<myserver>/arcgis_js_api/library/2.1/arcgis_compact/”,<myserver>为计算机名字。
打开IIS,将arcgis_js_api转为应用程序,并在IIS的功能中选择默认文档,添加Default.ashx为起始页面配置。
至此,arcgis_js_api部署完毕。
接下来配置ArcGIS Server rest,打开“ArcGIS安装地址\java\web_output\rest\WEB-INF\classes\resources”,用文本打开rest-config。找到JS API URLs,修改其下的配置:
jsapi.arcgis=http://serverapi.arcgisonline.com/jsapi/arcgis?v=1.2
jsapi.arcgis.sdk=http://resources.esri.com/arcgisserver/apis/javascript/arcgis
jsapi.arcgis.css=http://serverapi.arcgisonline.com/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css
jsapi.arcgis.https=https://serverapi.arcgisonline.com/jsapi/arcgis?v=1.2
jsapi.arcgis.css.https=https://serverapi.arcgisonline.com/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css
改为:
jsapi.arcgis=http://主机名/arcgis_js_api/library/2.1/arcgis/
jsapi.arcgis.sdk=http://resources.esri.com/arcgisserver/apis/javascript/arcgis
jsapi.arcgis.css=http://主机名/arcgis_js_api/library/2.1/arcgis/js/dojo/dijit/themes/tundra/tundra.css
jsapi.arcgis.https=https://主机名/arcgis_js_api/library/2.1/arcgis/
jsapi.arcgis.css.https=https://主机名/arcgis_js_api/library/2.1/arcgis/js/dojo/dijit/themes/tundra/tundra.css
重启ArcGIS Server,完成。
PS:如果部署在内网的话,不能使用主机名,必须使用IP,这样的话,才能够正确访问!
-------------------------
以上是copy的最后一个修改arcgis的这个文件 不知道在什么地方会用到。
下面来批量替换 Demo 和 sample中的示例 中的官网的api地址为本地部署的api(方便本地运行),只需要打开UltraReplace.exe(自己下载),选择api的目录,然后选择普通替换,把什么 替换为 什么 ,这应该都能理解的啊。根据下面的三条替换规则,把这个目录下得所有文件替换,其实只是替换了两个目录下得文件,都是示例文件。这样在本地运行示例,就不需要连接到arcgisOnline上了(访问速度,堪比 蜗牛)。
替换css文件
====================
http://serverapi.arcgisonline.com/jsapi/arcgis/2.5/js/dojo/dijit/themes/claro/claro.css
替换为:
http://localhost/arcgis_js_api/arcgis_js_v25_api/library/2.5/arcgis/js/dojo/dijit/themes/claro/claro.css
http://serverapi.arcgisonline.com/jsapi/arcgis/2.5/js/esri/dijit/css/Popup.css
替换为:
http://localhost/arcgis_js_api/arcgis_js_v25_api/library/2.5/arcgis/js/esri/dijit/css/Popup.css
替换主要的 js文件
=================
http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.5
替换为:
http://localhost/arcgis_js_api/arcgis_js_v25_api/library/2.5/arcgis/
然后访问
http://localhost/arcgis_js_api/arcgis_js_v25_api/library/2.5/arcgis/
http://localhost/arcgis_js_api/arcgis_js_v25_api/sdk/help/jshelp_start.htm
可以直接访问sdk和arcGIS API for javascript 的js库了。
3.8399端口下登陆arcgis rest services 显示HTTP status 404
登陆 http://localhost:8399/arcgis/rest/services 显示404 的错误
问题起因是:由于manager服务开始了,但是SOM SOCmon服务还没有开始,所以有些资源没有及时使用上。
解决方法是:重启ArcGIS Server Manager Service服务(前提是SOM Socmon服务已经启动)
还有个问题,就是在Arcgis server 的8099下,我的host machine丢失了,于是我要建立一个我本机的host
但是一建立就出现错误
报错:(workgrou-34bc76是机器名)
Machine workgrou-34bc76 is not a valid server container. Error: (-8013) Unable to locate the sysgen folder.
Specify the name of the machine that you want to use as a Server Object Container machine. Note: the machine must already have the necessary ArcGIS Server software installed on it.
后来发现解决方法很简单:
在添加host machine的时候,把capacity的值改为1 ,而不是unlimited,这样就可以添加成功了
再添加一次,这次就可以把capacity的值保留为unlimited,这样也会成功了,会覆盖前面的那次添加,相当于修改了。