这段时间我一直在研究如何用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. 简繁体互换工具:opencc

    简繁体互换工具:opencc opencc是一个简体.繁体相互转换的命令行工具. 安装 下载软件包.在下载页面下载软件包(如1.0.4版本) 解压.通过命令解压:tar -xzvf opencc-1. ...

  2. LinkedList 源码

    1.类继承结构            结构: 2.成员及方法                 注意:其中      getFirst,getLast,removeFirst,removeLast,el ...

  3. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

  4. (转)基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用

    http://www.cnblogs.com/wuhuacong/p/4774396.html Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使 ...

  5. windows控制台(console)乱码

    在cmd中输入 CHCP 65001,实操有效.记录一下 永久设置,代码如下: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Cons ...

  6. SharePoint Designer 2013 开启新式验证(Modern Authentication)

    首先安装office 2013全家桶 再安装SharePoint Designer 2013 安装完之后,去windows检查更新,并把所有需要更新的都更新了 (更新之后我还通过KMS激活了offic ...

  7. 【剑指Offer】56、删除链表中重复的结点

      题目描述:   在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4-> ...

  8. php第十一节课

    增删改查 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  9. swift-教你如何实现导航上的UISearchController动画效果。

    这个代码片段是我这周我从网上找了各种资料然后经过自己的修改终于弄好了导航的上下动画效果: step1:==>因为这个搜索要有动画效果,所以这个页面必须要有一个导航控制器: //1.自定义创建导航 ...

  10. 数据类型 scanf标准函数 sizeof关键字 二进制(day03)

    字符类型的名称是char 字符类型里包含256个不同的整数,每个 整数对应一个字符(例如'a', '^'等) 这些整数和字符完全可以互相替代 ASCII码表列出所有整数和字符的对应关系 ASCII码表 ...