Arcgis runtime sdk .net 二次開發

来源:https://www.cnblogs.com/onegarden/archive/2019/12/31/12123488.html
-Advertisement-
Play Games

前段時間研究了下 arcgis runtime sdk .net 二次開發··這裡做個筆記 runtime版本為100.6 基於WPF 開發 命名空間引入 基本只用到了mapview這個控制項和相關的對象,下邊把預設的背景網格去了,改了背景色,mapview的map對象是依賴屬,性支持綁定的,可直接綁 ...


前段時間研究了下 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(1, 0.703125, 295497593.05875003),
                new LevelOfDetail(2, 0.3515625, 147748796.52937502),
                new LevelOfDetail(3, 0.17578125, 73874398.264687508),
                new LevelOfDetail(4, 0.087890625, 36937199.132343754),
                new LevelOfDetail(5, 0.0439453125, 18468599.566171877),
                new LevelOfDetail(6, 0.02197265625, 9234299.7830859385),
                new LevelOfDetail(7, 0.010986328125, 4617149.8915429693),
                new LevelOfDetail(8, 0.0054931640625, 2308574.9457714846),
                new LevelOfDetail(8, 0.00274658203125, 1154287.4728857423),
                new LevelOfDetail(10, 0.001373291015625, 577143.73644287116),
                new LevelOfDetail(11, 0.0006866455078125, 288571.86822143558),
                new LevelOfDetail(12, 0.00034332275390625, 144285.93411071779),
                new LevelOfDetail(13, 0.000171661376953125, 72142.967055358895),
                new LevelOfDetail(14, 8.58306884765625e-005, 36071.483527679447),
                new LevelOfDetail(15, 4.291534423828125e-005, 18035.741763839724),
                new LevelOfDetail(16, 2.1457672119140625e-005, 9017.8708819198619),
                new LevelOfDetail(17, 1.0728836059570313e-005, 4508.9354409599309),
                new LevelOfDetail(18, 5.3644180297851563e-006, 2254.4677204799655),
                new LevelOfDetail(19, 2.6822090148925781e-006, 1127.2338602399827),
                new LevelOfDetail(20, 1.3411045074462891e-006, 563.61693011999137)
            };
            //投影
            SpatialReference sp = new SpatialReference(4490);
            var tileInfo = new TileInfo(90, TileImageFormat.Mixed, levels, new MapPoint(-180, 90, sp), sp, 256, 256);
            var env = new Envelope(72, 3, 136, 54, 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 = 1;
                newFeatureLayer.ShowInLegend = true;
                //載入tif
                Raster raster = new Raster(LocalConfig.Instance.TifPath);
                RasterLayer rasterLayer = new RasterLayer(raster);
                rasterLayer.Name = "tifLayer";
                IEnumerable<Color> colors = ConstructColors(3, 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(0, 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(0, 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(4490);
            var envelope = new Envelope(72, 3, 136, 54, 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這個對象實現了很多操作。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.繼承Thread類 public class ThreadCreator extends Thread{ public static void main(String[] args) { //第一種方式: ThreadCreator creator = new ThreadCreator(); ...
  • 1.背景 1.當我的手機連接電腦的時候想要調試居然連接不上,之後我將項目發佈之後才可以請求(同一區域網下) 2.你們不覺得發佈到IIS再附加進程太煩了麽?看了看網上全是這種方法,這不科學!VS已經提供了更好的方式了。 2.準備 1.電腦和手機在同一個網路下麵。(外網請求,可以看我其他的博客了) 3. ...
  • XAML(Extensible Application Markup Language的簡寫,發音為“zammel”)是用於實例化.NET對象的標記語言。儘管XAML是一種應用於諸多不同問題領域的技術,但其主要作用是構造WPF用戶界面。換言之,XAML文檔定義了在WPF應用程式中組成視窗的面板、按鈕 ...
  • Lucene.net Lucene.net是Lucene的.net移植版本,是一個開源的全文檢索引擎開發包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,是一個高性能、可伸縮的文本搜索引擎庫。它的功能就是負責將文本數據按照某種分詞演算法進行切詞,分詞後的結 ...
  • 在平時開發過程中,數組是我們使用頻率最高的類型之一,在使用定長列表時,數組可以說是最佳方案,這也是我們最熟悉的數據結構之一。 在C#中使用數組,可以獲取在記憶體上連續的相同類型的一組變數,在連續訪問時可以滿足CPU訪問寄存器的時間局部性和空間局部性,大大提高了對大量數據的訪問效率,但是在使用它時我們依 ...
  • 微信公眾號:Dotnet9,網站:Dotnet9。問題或建議,請網站留言; 如果您覺得Dotnet9對您有幫助,歡迎贊賞 C WPF發票列印 內容目錄 1. 實現效果 2. 業務場景 3. 編碼實現 4. 本文參考 5. 源碼下載 1.實現效果 發票界面 PDF列印結果 2.業務場景 界面作為發票預 ...
  • 本筆記摘抄自:https://www.cnblogs.com/maitian-lf/p/3670570.html,記錄一下學習過程以備後續查用。 序列化是把一個記憶體中的對象的信息轉化成一個可以持久化保存的形式,以便於保存或傳輸。序列化的主要作用是不同平臺之間進行通信,常用的序 列化有json、xml ...
  • 瞭解了多線程的基本使用後,現在我們來聊聊多線的實際項目場景:多線程的取與舍,也就是取在指定時間有響應結果的任務,捨棄未響應的任務。我們也遇到根據實際需要處理的業務量動態創建線程並控制等場景。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...