ArcGIS Runtime for .Net Quartz开发探秘(三):承接来自GIS服务器的服务

简介: 在上一篇博客中,我们已经在程序中添加了两个服务,一个是切片地图服务,另一个是三维场景服务。 这篇博客则会从整体上介绍几种常用服务的使用方式。 先解释两个名词:服务、图层 服务:服务器对外提供功能的单元 图层:应用程序组织要素的单元 服务和图层,表现在程序中是这样的: 其中http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer是服务,ArcGISTiledLayer是图层。

在上一篇博客中,我们已经在程序中添加了两个服务,一个是切片地图服务,另一个是三维场景服务。

这篇博客则会从整体上介绍几种常用服务的使用方式。

先解释两个名词:服务、图层

服务:服务器对外提供功能的单元

图层:应用程序组织要素的单元

服务和图层,表现在程序中是这样的:

<esri:ArcGISSceneLayer Name="BuildingsLayer" Source="http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0"/>

其中 http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer是服务,ArcGISTiledLayer是图层。

动态地图服务&切片地图服务

动态地图服务:用户浏览地图的时候由Server临时绘制地图的一种服务。

切片地图服务:与动态地图服务不同,切片是事先绘制好缓存起来的,而动态地图服务则是在调用时,读取地图数据后临时绘制的。

MapService:在ArcGIS Server的服务中,一个MapService地图服务可能同时包含上面两种服务的服务能力(动态地图服务和切片地图服务)。通过各种终端发布至ArcGIS Server的MapService,默认会开启动态地图服务能力,但是不一定有切片地图服务能力。作为移动端开发人员,拿到的URL在结构上是看不出是否具有切片地图服务能力的,只能通过在浏览器上输入URL,在服务详情中产看。如下图,有Tile Info的MapService才有切片地图服务能力。


既然地图服务的URL一样,那怎么去区别使用呢?

使用MapService的哪种能力,要通过API去控制,要看程序用什么图层对象去承接MapService。

如果我用ArcGISMapImageLayer对象去承接,则使用的是动态地图服务的能力,如果使用的是ArcGISTiledLayer对象去承接,则使用的是切片地图服务的能力。

下面给出动态地图服务加载的代码和切片地图服务加载的代码。

<esri:Scene.OperationalLayers>
      <esri:ArcGISMapImageLayer Source="http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_by_Sex/MapServer"></esri:ArcGISMapImageLayer>
      <esri:ArcGISTiledLayer Source="http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_by_Sex/MapServer"></esri:ArcGISTiledLayer>
      <esri:ArcGISSceneLayer Name="BuildingsLayer"
           Source="http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_Brest/SceneServer/layers/0"/>
</esri:Scene.OperationalLayers>

一个服务同时有动态地图服务能力和切片服务能力的MapService,使用ArcGISMapImageLayer和使用ArcGISTiledLayer加载的最终效果一样,但是加载时间长短区别很大。切片地图服务是提前把每个比例尺下的地图切割成小块图片,保存在服务器上。这样客户端在访问地图时,直接获取需要的小块图片拼接成整幅地图,而不是由服务器动态创建出一幅图片再送到客户端,极大程度提高了访问速度。

要素服务

要素服务一般被用作要素在线编辑。服务的URL与MapServer的URL略有不同。示例URL:

http://sampleserver6.arcgisonline.com/arcgis/rest/services/PoolPermits/FeatureServer

要素服务的末尾不是MapServer,而是FeatureServer,并且在要素服务使用的过程中,往往是使用FeatureServer的具体图层。下面的代码展示了如何在地图中加载要素服务,至于要素服务怎么编辑,放到后面的内容中去探索。

Uri serviceUri = new Uri( "http://sampleserver6.arcgisonline.com/arcgis/rest/services/PoolPermits/FeatureServer/0");
ServiceFeatureTable myFeatureTable =new ServiceFeatureTable(serviceUri);
myFeatureTable.FeatureRequestMode= FeatureRequestMode.OnInteractionNoCache;
FeatureLayer myFeatureLayer =newFeatureLayer(myFeatureTable);
myMap.OperationalLayers.Add(myFeatureLayer);


影像服务

影像服务这里不做过多介绍,这里给出一个影像服务的示例URL,并给出服务加载代码。

http://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer

ImageServiceRaster serviceRaster = new ImageServiceRaster(new Uri("http://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer"));
serviceRaster.Loaded += (s, e) =>
{
    ArcGISImageServiceInfo serviceInfo = serviceRaster.ServiceInfo;
    IReadOnlyList<RenderingRuleInfo> renderingRuleInfos = serviceInfo.RenderingRuleInfos;
    RenderingRule renderingRule = new RenderingRule(renderingRuleInfos[3]);
    serviceRaster.RenderingRule = renderingRule;
    RasterLayer layer = new RasterLayer(serviceRaster);
};
serviceRaster.LoadAsync();

相关文章
|
6月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
319 18
|
8月前
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
499 0
|
11月前
|
监控 前端开发 应用服务中间件
小游戏源码开发搭建技术栈和服务器配置流程
近些年不同场景游戏层出不穷,现就小游戏开发技术应用及功能详细剖析!
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
2669 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
395 2
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。
|
JSON JavaScript API
geoserver图层属性查询及查询结果转换为arcgis js api能使用的格式
一个项目使用了ArcGIS JS API开发GIS展示层,但GIS服务使用了Geoserver,这时加载Geoserver数据和查询数据就和之前完全不一样了,以下介绍下我使用ArcGIS JS API+Geoserver开发过程中解决Geoserver图层属性查询的一个方案。
1595 0
|
人工智能 数据可视化 API
ArcGIS API for Python
ArcGIS API for Python
198 0
|
JavaScript 前端开发 应用服务中间件
Arcgis api for javascript 详细部署
Arcgis api for javascript 详细部署