前段时间研究了下 arcgis runtime sdk .net 二次开发··这里做个笔记

runtime版本为100.6 基于WPF 开发

命名空间引入

    xmlns:esri="http://schemas.esri.com/arcgis/runtime/2013"

基本只用到了mapview这个控件和相关的对象,下边把默认的背景网格去了,改了背景色,mapview的map对象是依赖属,性支持绑定的,可直接绑定

            <esri:MapView  x:Name="MyMapView"  Map="{Binding Path=MainMap}">
<esri:MapView.BackgroundGrid>
<esri:BackgroundGrid Color="yellow" IsVisible="False"/>
</esri:MapView.BackgroundGrid>
</esri:MapView>

可直接在nuget上安装arcgis runtime ,直接安装arcgis的 WPF开发包会自动安装runtime的包,默认为开发者授权,是有开发者水印的,可以申请为arcgis开发者,有lite版授权,可以去掉水印,

这个lite版授权有很多限制,比如不能加载本地地图。下边代码为使用开发者授权license代码

            //使用lite版license //去掉水印
var res = Esri.ArcGISRuntime.ArcGISRuntimeEnvironment.SetLicense("你的授权license");

加载地图:大部分的地图操作都封装在Map对象中,初始化的时候可以使用BaseMap对象创建地图有arcgis内置的很多网络地图,可直接加载到BaseLayer中,这里不展示

一 加载天地图地图

这里展示直接加载天地图的网络地图到basemap的图层中,因为新版天地图服务需要token,需要开发者自己申请账户,申请后可将申请token放在地址中即可,

下边为加载矢量地图的代码,加载影像和地形图类似,需要吧关键字换成对应的就可以了,天地图有备用的好几个域名的,可以传一个list,这里写死了t0

 public void LoadTDTLayer()
{
//tempurl
string vecurl = "http://t0.tianditu.gov.cn/vec_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=c&TileMatrix={level}&TileRow={row}&TileCol={col}&style=default&format=tiles&tk=自己的token";
string cvaurl = "http://t0.tianditu.gov.cn/cva_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=c&TileMatrix={level}&TileRow={row}&TileCol={col}&style=default&format=tiles&tk=自己的token";
//切片比例尺
List<LevelOfDetail> levels = new List<LevelOfDetail>()
{
new LevelOfDetail(, 0.703125, 295497593.05875003),
new LevelOfDetail(, 0.3515625, 147748796.52937502),
new LevelOfDetail(, 0.17578125, 73874398.264687508),
new LevelOfDetail(, 0.087890625, 36937199.132343754),
new LevelOfDetail(, 0.0439453125, 18468599.566171877),
new LevelOfDetail(, 0.02197265625, 9234299.7830859385),
new LevelOfDetail(, 0.010986328125, 4617149.8915429693),
new LevelOfDetail(, 0.0054931640625, 2308574.9457714846),
new LevelOfDetail(, 0.00274658203125, 1154287.4728857423),
new LevelOfDetail(, 0.001373291015625, 577143.73644287116),
new LevelOfDetail(, 0.0006866455078125, 288571.86822143558),
new LevelOfDetail(, 0.00034332275390625, 144285.93411071779),
new LevelOfDetail(, 0.000171661376953125, 72142.967055358895),
new LevelOfDetail(, 8.58306884765625e-005, 36071.483527679447),
new LevelOfDetail(, 4.291534423828125e-005, 18035.741763839724),
new LevelOfDetail(, 2.1457672119140625e-005, 9017.8708819198619),
new LevelOfDetail(, 1.0728836059570313e-005, 4508.9354409599309),
new LevelOfDetail(, 5.3644180297851563e-006, 2254.4677204799655),
new LevelOfDetail(, 2.6822090148925781e-006, 1127.2338602399827),
new LevelOfDetail(, 1.3411045074462891e-006, 563.61693011999137)
};
//投影
SpatialReference sp = new SpatialReference();
var tileInfo = new TileInfo(, TileImageFormat.Mixed, levels, new MapPoint(-, , sp), sp, , );
var env = new Envelope(, , , , sp);//预设中国 区域
var vecLayer = new WebTiledLayer(vecurl, tileInfo, env);//底图
_mainMap.Basemap.BaseLayers.Add(vecLayer);//这里加到底图里边
var cvaLayer = new WebTiledLayer(cvaurl, tileInfo, env);//注记
_mainMap.Basemap.BaseLayers.Add(cvaLayer);//这里加到底图里边
}

二加载本地地图

这里以加载shp文件为实例,其他的应该只需要换对应的layer对象加载就可以了,使用lite版授权不能加载本地文件

实例加载了shp文件和本地的tif影像,这里加到了map的OperationalLayers中

        public async Task<FeatureLayer> LoadMap(string file)
{
try
{
//加载本地shp文件
var filepath = $"{LocalConfig.Instance.StatMapDir}\\{file}.shp";
ShapefileFeatureTable myShapefile = await ShapefileFeatureTable.OpenAsync(filepath);
FeatureLayer newFeatureLayer = new FeatureLayer(myShapefile); _mainMap.OperationalLayers.Clear();
_mainMap.OperationalLayers.Add(newFeatureLayer);
newFeatureLayer.Opacity = ;
newFeatureLayer.ShowInLegend = true;
//加载tif
Raster raster = new Raster(LocalConfig.Instance.TifPath);
RasterLayer rasterLayer = new RasterLayer(raster);
rasterLayer.Name = "tifLayer";
IEnumerable<Color> colors = ConstructColors(, Color.Gold);
ColormapRenderer colormapRenderer = new ColormapRenderer(colors);
rasterLayer.Renderer = colormapRenderer;
rasterLayer.Opacity = 0.6;
_mainMap.OperationalLayers.Add(rasterLayer); return newFeatureLayer;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
return null;
}

三 加载arcserver中的地图服务

可单独加载服务中的图层服务或者直接加载地图服务,

比如地图服务地址 http://{serverhost}:6080/arcgis/rest/services/{目录}/{服务名}/MapServer

图层服务地址http://{serverhost}:6080/arcgis/rest/services/{目录}/{服务名}/MapServer/{图层索引}   ,图层索引一般是自动生成比如1,2,3....

        //从 arcserver加载地图服务,这种是直接加载服务 不支持图层,支持切片,
//用serviceLayer加载支持查询,但是不能添加到map对象
public void LoadServerImag()
{
var url = new Uri(string.Format(LocalConfig.Instance.ImagePath));
var imgLayer = new ArcGISMapImageLayer(url);
_mainMap.OperationalLayers.Insert(, imgLayer);
}
//从arcgserver 加载图层服务,可以直接加载某个图层类似加载本地shp服务,但是不支持某些查询操作,具体得自己试下
public async void LoadServerFeaturlayer()
{
var uri = new Uri(string.Format(LocalConfig.Instance.ServerFeaturePath));
var layer = new ServiceFeatureTable(uri);
var feature = new FeatureLayer(layer);
feature.RenderingMode = FeatureRenderingMode.Automatic;
feature.IsVisible = false;
_mainMap.OperationalLayers.Insert(, feature); //查询 这里支持查询
QueryParameters queryStates = new QueryParameters { WhereClause = "1=1" };
var features = await feature.FeatureTable.QueryFeaturesAsync(queryStates);
}

四 绘图图层

可以支持在控件上绘制简单图形,这里以画方框为例,创建GraphicsOverlay对象,这个图层是直接加到mapview对象中的

        //画图图层
public void LoadGraphic()
{
var lineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Color.Red, 2.0);
var locationOverlay = new GraphicsOverlay
{
Id = "TapPoints",
Renderer = new SimpleRenderer(lineSymbol)
};
//画一个方形区域
SpatialReference sp = new SpatialReference();
var envelope = new Envelope(, , , , sp);//预区域
locationOverlay.Graphics.Clear();
Graphic graphic = new Graphic(envelope);
locationOverlay.Graphics.Add(graphic);
//直接添加到图层
//MyMapView.GraphicsOverlays.Add(model.LocationsOverlay);
}

其他相关:

1 其他的比如注记和符号 类似之前的arcgis object 二次开发中的对象只是换了个名字,加载方式不一样基本类似,可以设置不同的符号和注记

2 符号的关键字为Symbol,注记关键字为Label,可以搜相关对象对应实现即可

3 另可搜一个arcgis.toolkit 的项目 里边为arcgis实现的一些简单工具比如测量之类的可按这个实例实现自己的功能,里边主要依赖SketchEditor这个对象实现了很多操作。

Arcgis runtime sdk .net 二次开发的更多相关文章

  1. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  2. ArcGIS runtime sdk for wpf 授权

    这两天由于runtime sdk for wpf的授权和runtime sdk 其他产品的授权的不一样导致自己混乱不堪. 总结下吧. sdk 简介 当前ArcGIS runtime sdk 包括一系列 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)

    1.前言 今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本“Quartz”版的更新资料,它将是一个非常重要的更新,包括API接口的重构和开发思路的调整.具体 ...

  4. 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建

    一. ArcGIS Runtime SDK for .NET介绍 ArcGIS Runtime SDK for .net是一款针对windows平台的开发包.能够在开发出在windows phone, ...

  5. ArcGIS Runtime SDK for Android 10.2.5新开发平台安装配置指南

    ArcGIS Runtime SDK for Android 10.2.5版本在年前发布,其中一个重大的变化是:新版本使用了新的开发环境,在10.2.5版本中Esri使用了官方提供的新的Android ...

  6. ArcGIS Runtime SDK for iOS开发地图图层-图形图层

    注:本文翻译自:https://developers.arcgis.com/ios/objective-c/guide/creating-a-graphics-layer.htm        创建图 ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境

    1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

随机推荐

  1. centos7.5下yum安装mysql-5.6.43

    cd ~/ && cat /etc/redhat-release yum list installed |grep mysql #<===查看是否安装mysql,如果已经安装,使 ...

  2. ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码

    现在网上有很多类似的文章.其实这一篇也借鉴了很多其他博主的文章. 写这篇文章的重点是在于解析功能和报文.对Modbus这个协议并不会做很多介绍. 好了,我们开始吧. 常用的功能码其实也没多少.我也就按 ...

  3. 简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发 阅读导航 常用类属性设 ...

  4. PyCharm专业版激活+破解到期时间2100年

    PyCharm专业版激活+破解到期时间2100年 转载文章:https://blog.51cto.com/13696145/2464312?source=dra 到2020年5月激活码: N7UR85 ...

  5. 一行代码解决MacBook Pro安装VSCode没有应用图标问题

    笔者今天升级了VSCode,安装完后发现Dock(程序坞)没有VSCode的图标了,导致切换应用非常不方便. 具体情况就像下面这张图,VSCode明明开着,但是在Dock找不到VSCode了. 解决办 ...

  6. clr via c# Array2

    1,Array类型生成方式以及实际类型 private static void ArrayIntro() { String[] sa = new String[1]; Array a1 = Array ...

  7. 如何使用 Vue-TCB 快速在 Vue 应用中接入云开发

    什么是 Vue TCB 我自己平时经常会用到 Vue 来开发前端应用.所以,基于 Vue 的插件系统,封装了一个 Vue 插件. 如何使用 1. 安装 vue-tcb 执行如下命令,安装 vue-tc ...

  8. 腾讯qlv视频转为MP4格式工具

    本文解决上一篇<优酷爱奇艺视频转换为MP4格式工具>留下的腾讯视频qlv转MP4格式问题,教程都是一步步亲手操作的,每一步都有配图.希望各位老板多转发分享,谢谢! 解压软件.(建议关闭所有 ...

  9. (办公)记事本_linux压缩命令

    参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show 在Linux中可以识别的常见的压缩格式有十几种,比如&quo ...

  10. mac电脑怎么投屏?教你选择适合自己的Mac投屏软件

    mac上有什么好的投屏软件嘛?苹果手机ios投屏到mac用哪款投屏软件,mac投屏ipad该用哪款软件怎么操作,macdown小编给大家介绍的这几款Mac投屏软件,各有各的特色,总有一款适合你投屏. ...