番茄排骨汤 发表于 2015-12-20 17:27

离线谷歌卫星地图加载服务中间件调用示例For ArcGIS JS API

1.
说明
水经注离线谷歌卫星地图加载服务中间件可利用离线地图的.dat文件在本地建立服务端,并生成影像、标签、高程等服务地址,可以在ArcGIS API for JavaScript中直接调用该服务地址,并将请求到的服务资源显示在前端,当请求的地图资源不存在可通过网络直接下载缺失的地图,并储存在.dat文件中。


获取更多免费软件、技术加群:329081749


2.实现

2.1准备ArcGIS API for JavaScript

下载ArcGIS API for JavaScript。

1、请先配置IIS,方法请见《水经注离线谷歌卫星地图加载服务中间件调用示例 For ArcGIS JS API》文档
2、启动bin下的RiverMapServer服务(配置config.ini文件),或者直接运行"测试.bat"(已经设置好命令行参数)
3、运行RiverMapServerSample For ArcGIS JS api\RiverMapServerSample For ArcGIS JS Api.html测试文件.

bin文件(水经注离线地图服务中间件)
dat文件(测试数据)


API的下载地址:http://support.esrichina.com.cn/2011/0223/960.html。最新版本为3.9。
水经注离线谷歌卫星地图加载服务中间件调用示例 For ArcGIS JS API:http://pan.baidu.com/s/1i3CUCNb

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A42E05.png


取arcgis_js_v39_api\arcgis_js_v39_api\arcgis_js_api文件夹下library文件夹及arcgis_js_v39_sdk\arcgis_js_v39_sdk\arcgis_js_api文件夹下sdk文件夹。放入新的文件夹中。例如”..\ 水经注离线谷歌卫星地图加载服务中间件调用示例 For ArcGIS API for JavaScript\RiverMapServerSample For ArcGIS JS api”如下图。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A4452a.png



2.2 ArcGIS API for JavaScript离线部署

2.2.1 IIS部署

打开信息服务管理器(IIS),添加网站,设置物理路径为..\ 水经注离线谷歌卫星地图加载服务中间件调用示例 For ArcGIS API for JavaScript\RiverMapServerSample For ArcGIS JS api。在绑定一栏中分配IP地址。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A50WL.png

这里的IP地址为192.168.1.51,端口为默认端口80。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A525544.png

在功能视图中目录浏览一项启用视图浏览功能。


2.2.2 ArcGIS JS API离线部署

用记事本打开:\library\3.9\3.9\init.js文件,将文本中,用<myserver>/library/3.9/3.9/替换,其中myserver可以是机器名、IP等,这里部署的IP地址为192.168.1.51,即将替换为192.168.1.51/library/3.9/3.9/。
用记事本打开:\library\3.9\3.9\js\dojo\dojo\dojo.js文件,将替换为192.168.1.51/library/3.9/3.9/。
(示例中已将改为192.168.1.51/library/3.9/3.9/)
在其目录下新建一个html文件“RiverMapServerSample For ArcGIS JS Api.html”,如下图.

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A553Y2.png

利用记事本打开“RiverMapServerSample For ArcGIS JS Api.html”并进行编辑,具体内容如下。
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>RiverMapServerSample_For_ArcGISApiForJavaScript</title>

    <link rel="stylesheet" href="library/3.9/3.9/js/dojo/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="library/3.9/3.9/js/esri/css/esri.css">

    <script>var dojoConfig = {parseOnLoad: true};</script>
    <script src="library/3.9/3.9/init.js"></script>
    <script>
      dojo.require("esri.map");
      dojo.require("dijit.layout.BorderContainer");
      dojo.require("dijit.layout.ContentPane");

      var map;
      var halfCircle = 20037508.342787;
      function init() {
      initLayer();
       map = new esri.Map("map",{
logo:false
});                                             
       map.addLayer(new SJZLayer());
      }

      function initLayer() {
      dojo.declare("SJZLayer", esri.layers.TiledMapServiceLayer, {
          constructor: function() {
            this.spatialReference = new esri.SpatialReference({
            wkid: 102113
            });
            this.initialExtent = new esri.geometry.Extent(-20037508.342789, -20037508.342789, 20037508.342789, 20037508.342789, this.spatialReference);
            this.fullExtent = new esri.geometry.Extent(-20037508.342789, -20037508.342789, 20037508.342789, 20037508.342789, this.spatialReference);
            this.tileInfo = new esri.layers.TileInfo({
            "dpi": "90.71428571427429",
            "format": "image/png",
            "compressionQuality": 0,
            "spatialReference": {
                "wkid": "102113"
            },
            "rows": 256,
            "cols": 256,
            "origin": {
                "x": -halfCircle,
                "y": halfCircle
            },
            "lods" : [
            {"level" : 0, "resolution" : 156543.033928, "scale" : 591657527.591555},
            {"level" : 1, "resolution" : 78271.5169639999, "scale" : 295828763.795777},
            {"level" : 2, "resolution" : 39135.7584820001, "scale" : 147914381.897889},
            {"level" : 3, "resolution" : 19567.8792409999, "scale" : 73957190.948944},
            {"level" : 4, "resolution" : 9783.93962049996, "scale" : 36978595.474472},
            {"level" : 5, "resolution" : 4891.96981024998, "scale" : 18489297.737236},
            {"level" : 6, "resolution" : 2445.98490512499, "scale" : 9244648.868618},
            {"level" : 7, "resolution" : 1222.99245256249, "scale" : 4622324.434309},
            {"level" : 8, "resolution" : 611.49622628138, "scale" : 2311162.217155},
            {"level" : 9, "resolution" : 305.748113140558, "scale" : 1155581.108577},
            {"level" : 10, "resolution" : 152.874056570411, "scale" : 577790.554289},
            {"level" : 11, "resolution" : 76.4370282850732, "scale" : 288895.277144},
            {"level" : 12, "resolution" : 38.2185141425366, "scale" : 144447.638572},
            {"level" : 13, "resolution" : 19.1092570712683, "scale" : 72223.819286},
            {"level" : 14, "resolution" : 9.55462853563415, "scale" : 36111.909643},
            {"level" : 15, "resolution" : 4.77731426794937, "scale" : 18055.954822},
            {"level" : 16, "resolution" : 2.38865713397468, "scale" : 9027.977411},
      {"level" : 17, "resolution" : 1.19432856685505, "scale" : 4513.988705},
      {"level" : 18, "resolution" : 0.597164283559817, "scale" :2256.994353},
      {"level" : 19, "resolution" : 0.298582141647617, "scale" : 1128.497176}
]
            });
            this.loaded = true;
            this.onLoad(this);
          },

          getTileUrl: function(level, row, col) {
var baseUrl="http://127.0.0.1:1002/getDefinedImage?";
var x=col+1;
var y=row+1;
var z=level+1;
var url=baseUrl + "x=" + x + "&y=" + y + "&z=" + z;
            return url;
          }
      });
      }
      dojo.ready(init);
    </script>
</head>
<body onload='init();'>
      <div id='map' style='width: full; height: 700px;'>
      </div>
   </body>
</html>
其中【strURL=”http://localhost:1002/getDefinedImage?”】表示请求的是影像、地图、地形、标签、影像+标签、影像+地图、影像+地形或Dem。具体根据RiverMapServer的启动配置参数来确定。
例如:RiverMapServer.exe “1002” “Image_Label” “c:\test\tile” “c:\test\label”表示此应用输出合并底图(可以为影像、地图、地形任意一种)和标签两个地图瓦片。RiverMapServer.exe “1002” “Image” “c:\test\tile”表示此应用输出地图底图(可以为影像、地图、地形任意一种)

2.2启动RiverMapServer
启动RiverMapServer有两种方式都可以正常运行。

2.2.1直接运行RiverMapServer
通过config.ini文件配置参数,如下图。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A620301.png

PORT=1002表示端口为1002;GetFileType=Image_Label表示此应用输出合并底图(可以为影像、地图、地形任意一种)和标签两个地图瓦片,后面必须跟两个瓦片工程文件目录;TileDir=..\dat\tile表示影像数据路径;LabelDir=..\dat\label 表示标签数据路径;DemDir=..\dat\dem 表示高程数据路径。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051A63T54.png


2.2.2 通过cmd.exe输入启动参数运行
新建一个bat文件,设置配置参数,如下图。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051AA2N2.png


双击.bat启动服 务。运行效果和直接运行RiverMapServer效果一致。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051AFWG.png



3.运行结果
浏览器打开RiverMapServerSample For ArcGIS JS Api.html效果,如下图。

http://www.rivermap.cn/uploads/allimg/151105/2-1511051AH24F.jpg

附录:

启动参数说明

1.瓦片文件类型:Image_Lable 表示此应用输出合并底图(可以为影像、地图、地形任意一种)和标签两个地图瓦片,后面必须跟两个瓦片工程文件目录
例子:RiverMapServer.exe “1002” “Image_Label” “c:\test\tile” “c:\test\label”

2.瓦片文件类型:Image 表示此应用输出地图底图(可以为影像、地图、地形任意一种)
后面必须只需一个瓦片工程文件目录
例子:RiverMapServer.exe “1002” “Image” “c:\test\tile”

3.瓦片文件类型:Label表示此应用输出地图标签 后面必须只需一个瓦片工程文件目录
例子:RiverMapServer.exe “1002” “Label” “c:\test\label”

4.(待)瓦片文件类型:dem表示此应用输出地图位置高程 后面必须只需一个地图位置高程工程文件目录
例子:RiverMapServer.exe “1002” “dem” “c:\test\dem”
输入参数大小写不敏感,启动时需检查瓦片文件类型与工程文件是否匹配

请求接口说明
根据启动参数输出相应类型图片(影像、地图、地形、标签、影像+标签、影像+地图、影像+地形、Dem)
http://localhost:1002/getDefinedImage?x=1&y=1&z=1

输出地图底图(影像、地图、地形任意一种)
http://localhost:1002/getTileImage?x=1&y=1&z=1

输出标签
http://localhost:1002/getLabelImage?x=1&y=1&z=1

输出高程
http://localhost:1002/getDemImage?x=1&y=1&z=1

删除地图地图(影像、地图、地形任意一种)
http://localhost:1002/delTileImage?x=1&y=1&z=1

地图服务启动日志输出

1.服务启动时需要检测输入参数的数据是否正确:

@@INPUT:OK 输入参数正确
@@INPUT:PortError 端口错误
@@INPUT:TypeError 瓦片类型错误
@@INPUT:DataFileError:瓦片工程文件 瓦片工程文件错误

2 .服务正常启动与运行输出:

@@RUN:WAITING 正常启动后和服务空闲时每分钟输出
@@RUN:Exception:异常消息(不能有回车换上等控制字符)服务启动异常后输出

服务正常启动后建立与瓦片工程文件数据源的连接
@@DSCOK:瓦片工程文件 连接正常
@@DSCFAIL:瓦片工程文件 连接失败
@@PORT:端口

3 .瓦片输出

@@TileOK:X=1&y=1&z=1 底图瓦片下载成功(已下载正常输出瓦片不输出日志)
@@LabelOK:X=1&y=1&z=1 标签瓦片下载成功(已下载正常输出瓦片不输出日志)
@@TileNoExists:X=1&y=1&z=1 底图瓦片不存在
@@LabelNoExists:X=1&y=1&z=1 标签瓦片不存在
@@TileOverRange:X=1&y=1&z=1 底图瓦片超出工程文件覆盖范围
@@LabelOverRange:X=1&y=1&z=1 标签瓦片超出工程文件覆盖范围
页: [1]
查看完整版本: 离线谷歌卫星地图加载服务中间件调用示例For ArcGIS JS API