ArcGIS Engine加载WMTS影像服务

本文介绍了一种通过代码实现WMTS服务加载的方法,详细展示了如何使用IWMTSConnectionFactory和IWMTSConnection接口来获取并连接WMTS服务,同时提供了具体的C#代码示例。注意,该操作不应在子线程中执行,以避免出现错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

/// <summary>
/// 加载WMTS服务
/// </summary>
/// <param name="sUrl"></param>
/// <returns></returns>
public List<ILayer> GetWMTSLayer(string sUrl)
{
	var lstLayer = new List<ILayer>();
	try
	{
		IPropertySet pPropertySet = new PropertySetClass();
		pPropertySet.SetProperty("URL", sUrl);
		IWMTSConnectionFactory pWmtsConnectionFactory = new WMTSConnectionFactoryClass();
		IWMTSConnection pWmtsConnection = pWmtsConnectionFactory.Open(pPropertySet, 0, null);
		IWMTSServiceDescription pWmtsServiceDescription = pWmtsConnection as IWMTSServiceDescription;
		for (int i = 0; i < pWmtsServiceDescription.LayerDescriptionCount; i++)
		{
			IWMTSLayerDescription pWmtsLayerDescription = pWmtsServiceDescription.LayerDescription[i];
			IWMTSLayer pWmtsLayer = new WMTSLayerClass();

			IPropertySet pPropSet = new PropertySetClass();
			pPropSet.SetProperty("URL", sUrl);
			pPropSet.SetProperty("LayerName", pWmtsLayerDescription.Identifier);

			WMTSConnectionName connectionName = new WMTSConnectionNameClass
			{
				ConnectionProperties = pPropSet
			};
			if (pWmtsLayer.Connect((IName)connectionName))
			{
				lstLayer.Add(pWmtsLayer as ILayer);
			}
		}
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex.Message);
	}
	return lstLayer;
}

说明

  • 不要在子线程中调用,否则会在pWmtsLayer.Connect((IName)connectionName)处报错。
### 在Unreal Engine中使用Cesium插件加载高德地图数据 #### 安装和配置Cesium for Unreal 为了在Unreal Engine项目中集成并利用Cesium来显示来自高德的地图影像,需先完成Cesium for Unreal的安装。 可以通过Epic Games Launcher中的Twinmotion部分找到Cesium for Unreal插件,并按照提示进行安装。也可以访问官方GitHub仓库获取最新版本源码编译安装[^1]。 #### 配置高德地图服务 由于Cesium默认支持多种在线地理信息服务提供商(如Bing Maps, ArcGIS Online),而直接对接中国本土服务商如高德地图则需要额外设置: 1. **申请API Key** 访问高德开放平台注册账号并创建应用以获得合法使用的密钥。 2. **自定义图层URL模板** 构建符合Cesium预期格式的Tile Map Service(TMS)或Web Map Tile Service(WMTS)请求链接字符串。对于高德而言,通常形式如下: ``` https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z} ``` 3. **实现ImageryProvider类** 编写继承于`Cesium::CustomUrlTemplateImageryProvider`的具体子类,在其中重载虚函数指定上述定制化参数。 ```cpp #include "Cesium/CustomUrlTemplateImageryProvider.h" class AGaodeMapProvider : public CustomUrlTemplateImageryProvider { public: AGaodeMapProvider(const FString& apiKey) : CustomUrlTemplateImageryProvider( TEXT("https://webrd0{x}.is.autonavi.com/appmaptile?" "lang=zh_cn&size=1&scale=1&style=7&x={X}&y={Y}&z={Z}"), /*minLevel=*/0, /*maxLevel=*/19, /*tilingScheme=*/std::make_shared<CesiumGeospatial::WebMercatorTilingScheme>(), /*rectangle=*/Rectangle::MAX_VALUE, /*apiKey=*/apiKey) {} }; ``` 4. **实例化与挂接至场景视图** 最后一步是在UE编辑器内或者蓝图脚本里新建该提供者的实体对象并将之绑定到当前世界的可视化组件上。 ```blueprint // 假设已在C++侧暴露了AGaodeMapProvider给Blueprints GaodeMapProvider = NewObject<AGaodeMapProvider>(this,TEXT("MyGaodeLayer")); if(GaodeMapProvider){ GaodeMapProvider->SetupPlayerInputComponent(PlayerController); UWorld* world = GetWorld(); if(world && CesiumEditorUtils::IsCesiumForUnrealEnabled()){ ACesium3DTileset* tileSet = ACesium3DTileset::AddNew(this,FVector(0.f)); tileSet->SetImageryProvider(GaodeMapProvider); } } ``` 通过以上步骤即可实现在基于Unreal Engine的游戏或其他虚拟环境中调用高德地图作为底图资源展示的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值