这段时间我一直在研究如何用PIE加载在线地图服务,遇到了许多问题,多亏了技术员小姐姐的帮助,才让我能正确加载ArcGIS Online在线服务、天地图在线地图和谷歌在线地图。我是根据博客园PIE官方博文(https://www.cnblogs.com/PIESat/p/10184862.html)进行研究的,主要参照打开网络地图数据、加载自定义切片服务数据两篇博文,最后实现是用的加载自定义瓦片地图。

加载在线地图服务关键在于服务接口URL的写法和瓦片参数的设置,自定义服务接口需要路径含有级别,行列信息,以调用ArcGIS Online在线瓦片地图服务为例,服务路径应写为

http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/[$Level]/[$Row]/[$Column];其中Level表示级别,Row表示为行,Column表示为列。服务路径不能在浏览器中直接复制打开,这是因为加载一个URL将链接在请求服务信息中的返回瓦片比例尺级别和行列号用了模糊查找,如果为了测试可以将链接中的[$Level]、[$Row] 和[$Column] 换成你要浏览的参数即可。

瓦片参数可直接访问调用的ArcGIS Online在线地图服务(http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer),结果如下图所示:

其中坐标系WKID为3857,代表的是WGS84墨卡托投影,瓦片图像格式可以为PNG32,PNG24,PNG,JPG,DIB,TIFF,EMF,PS,PDF,GIF,SVG,SVGZ,BMP 13种,每英寸点数96,压缩的质量为75。0级瓦片分辨率为156543.03392800014m,比例尺为2019-05-305.91657527591555E8;瓦片开始位置为(-2.0037508342787E7, 2.0037508342787E7);瓦片显示范围为(-2.003750722959434E7, -1.997186888040859E7, 2.003750722959434E7, 1.9971868880408563E7);瓦片的高度和宽度都为256。

在实现过程中还遇到了一些其他的小问题,比如PIE.Carto.TileImageFormat枚举类型里面什么也没有,还有就是一些接口运行时不能正常工作。对于第一个问题,我自己写了一个枚举类,如下图所示,并将它强制转换为PIE.Carto.TileImageFormat类型(tileInfo.Format = (TileImageFormat)TileImageFormat2.PNG;),但是最好还是不要这样做哦,我觉得这是流氓做法。对于第二个问题,则需要将运行路径设置为SDK安装路径下的bin目录下,这样就能正常运行了。

源代码如下

  private void toolStripButton1_Click(object sender, EventArgs e)
{
string strUrl = "http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/[$Level]/[$Row]/[$Column]";
ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference();
PIE.Carto.TileInfo tileInfo = new TileInfo();
tileInfo.Format = (TileImageFormat)TileImageFormat2.TIFF;
tileInfo.DPI = ;
tileInfo.CompressionQuality = ; tileInfo.LODInfos = new List<LODInfo>();
double dResolution = 156543.03392800014;//1.40625;
double dScale = 5.91657527591555E8;//5.90995197141668E8;
for (int i = ; i < ; ++i)//显示23级数据
{
PIE.Carto.LODInfo lodInfo = new LODInfo();
lodInfo.Level = i;
lodInfo.Resolution = dResolution / Math.Pow(2.0, i);
lodInfo.Scale = dScale / Math.Pow(2.0, i); ;
tileInfo.LODInfos.Add(lodInfo);
}
PIE.Carto.CustomerOnlineTiledLayer tiledLayer = new CustomerOnlineTiledLayer(strUrl);
tiledLayer.Name = "ArcgisServer"; //设置瓦片开始位置
tileInfo.SpatialReference = spatialReference;
IPoint point = new PIE.Geometry.Point();
point.PutCoords(-2.0037508342787E7, 2.0037508342787E7);//开始点切片
(point as IGeometry).SpatialReference = spatialReference;
tileInfo.Origin = point; //设置瓦片显示范围
IEnvelope envelope = new Envelope();
envelope.PutCoords(-2.003750722959434E7, -1.997186888040859E7, 2.003750722959434E7, 1.9971868880408563E7);
tileInfo.InitialExtent = envelope;
tileInfo.FullExtent = envelope;
tileInfo.TileWidth = ;
tileInfo.TileHeight = ;
tiledLayer.SetTileInfo(tileInfo); //加载影像并设置显示范围
mapControlMain.FocusMap.AddLayer(tiledLayer);
IEnvelope envelop = new Envelope();
envelop.PutCoords(, , , );//长沙市主校区
mapControlMain.ActiveView.Extent = envelop;
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}

PIE加载自定义服务数据详细介绍的更多相关文章

  1. PIE SDK加载自定义服务数据

    1.功能简介 自定义服务数据,将符合要求的矢量数据和栅格数据集等数据以服务的方式发布,将数据存储在某服务器中,在有网络的情况下可以根据URL就可以访问,比较常见的服务数据类型的有ArcGIS Serv ...

  2. PIE SDK加载WMS服务数据

    1.   功能简介 WMS服务,WMS是OGC标准中比较简单也是比较重要的标准之一.它全称是“Web Map Service”(网络地图服务):利用具有地理空间位置信息的数据制作地图.其中将地图定义为 ...

  3. HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序 1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元 ...

  4. Oracle数据加载之外部表的介绍

    环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 目录: 一. 创建外部表 1.1 创建外部表需要的目录 1.2 创建外部表 1.3 创建外部表源文件 1.4 查询外部表 二. 加载 ...

  5. mxnet自定义dataloader加载自己的数据

    实际上关于pytorch加载自己的数据之前有写过一篇博客,但是最近接触了mxnet,发现关于这方面的教程很少 如果要加载自己定义的数据的话,看mxnet关于mnist基本上能够推测12 看pytorc ...

  6. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  7. [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

    Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...

  8. TensorFlow2.0(10):加载自定义图片数据集到Dataset

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  9. cesium加载WFS服务(GeoServer发布)

    需求: 为了便于前端渲染数据,自定义图层渲染. 思路: 获取地图服务中的要素进行渲染. 工具: GeoServer 2.6.4,cesium, 思路有了就开始找资料写代码,cesium有接口可以加载W ...

随机推荐

  1. 【PostgreSQL-9.6.3】约束

    PostgreSQL中的约束有以下五种:主键约束.外键约束.非空约束.唯一性约束.默认约束.下面分别对这五种约束作说明. 一.主键约束(PrimaryKey Constraint) 主键约束要求主键列 ...

  2. Assembly之instruction之Indirect Autoincrement Mode

    Assembler Code Content of ROMMOV @R10+,0(R11)   MOV @R10+,0(R11) Length: One or two words Operation: ...

  3. dubbo之多协议

    (1) 不同服务不同协议 比如:不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议 consumer.xml <?xml version="1.0& ...

  4. C++程序设计实验安排

    2016-2017第二学期C++程序设计的实验时间与地点安排如下表,请大家根据时间按时来上机实验.另外,因为原来安排在4.1的实验因为调休补周一的课,因此挪至周五.另外第4次周六的课,考虑有一些同学有 ...

  5. jq 禁用复选框 和输入框

    $('input').attr("readonly", ""); $('input').attr("disabled", "fal ...

  6. eas之控制kdtable滚动条

    //滚动条支持三种状态 自动 隐藏 显示 public static final int SCROLL_STATE_AUTO=0://自动根据数据判断是否显示或隐藏 public static fin ...

  7. 51nod1596 搬货物

    现在有n个货物,第i个货物的重量是 2wi .每次搬的时候要求货物重量的总和是一个2的幂.问最少要搬几次能把所有的货物搬完. 样例解释: 1,1,2作为一组. 3,3作为一组. Input 单组测试数 ...

  8. nyoj24-素数 距离问题

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...

  9. SSH(远程登录)

    在linux中SSH服务对应两个配置文件: ssh特点:在传输数据的时候,对文件加密后传输. ssh作用:为远程登录会话和其他网络服务提供安全性协议. ssh小结: 1.SSH是安全的加密协议,用于远 ...

  10. 《黑白团团队》第八次团队作业:Alpha冲刺

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 <黑白团团队>第七次作业:团队项目设计完善&编码 Git ...