1. 程式人生 > >ArcGIS API for JavaScript之text轉換成CAD(.dwg)檔案

ArcGIS API for JavaScript之text轉換成CAD(.dwg)檔案

最近根據使用者的需求寫了這個功能。

需求:先在web端編輯文字標註,然後轉換成CAD檔案。

 使用者想將註記釋出成要素服務,然後再轉換成CAD(.dwg)檔案使用。但是註記是不支援釋出成要素服務的,下面是我想到的實現思路(如有其它方案,歡迎補充!):

  1. 定義一個TextSymbol,寫入內容;
  2. 將TextSymbol存入到Graphic裡面;
  3. 將Export to CAD工具釋出成GP服務;
  4. 通過GP服務轉換成CAD檔案。

實現步驟:

一、定義一個TextSymbol,寫入內容。(由於測試,我點選地圖後將點選的X座標寫入到TextSymbol,後期根據需求可能也會修改。)

 var color = new Color("#0a162c"
); var textSymbol = new TextSymbol(evt.mapPoint.x).setColor(color);; textSymbol.font.setSize("14pt"); textSymbol.font.setFamily("arial");

二、將TextSymbol存入到Graphic裡面,並在地圖顯示。

var labelPoint = new Point(evt.mapPoint.x, evt.mapPoint.y, new SpatialReference({ wkid: map.spatialReference }));
labelGraphic = new Graphic(labelPoint, textSymbol);
map.graphics.add(labelGraphic);

三、將Export to CAD工具釋出成GP服務。
 可以直接將該工具執行,然後在結果視窗中共享成GP服務,這樣生成的結果會存放到arcgisjobs檔案下對應ID資料夾內。如果想自定義資料存放位置操作如下:

 將Export to CAD工具放到模型(moudle)中,然後新建一個為currentTime的變數,型別為任意值。引數填寫如下圖:

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

四、通過GP服務轉換成CAD檔案。

 var gp = new Geoprocessor("https://sms.esrichina.com/serv ... 6quot;);
          var in_features = new FeatureSet();
          in_features.fields = ;
          in_features.features.push(labelGraphic);

          var Output_Type = "
DWG_R2013"; //var Output_File = "E:/demo/ExportCAD"; //如果自定義路徑,需要該引數 var param = { //currentTime: Output_File, Output_Type: Output_Type, Input_Features: [in_features] }; gp.submitJob(param, Result); }); function Result(res){ console.log(res); if(res.jobStatus = "esriJobSucceeded") { alert("已生成"); }else{ alert("執行工具失敗"); } }

全部程式碼:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <title>Simple Map</title>

    <link rel="stylesheet" href="https://sms.esrichina.com/arcg ... gt%3B
    <script type="text/javascript" src="https://sms.esrichina.com/arcg ... ot%3B ></script>
    <style>
      html, body, #map {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #button{
      position: fixed;
      top: 10px;
      right: 30px;
      border-radius: 4px;
      height: 30px;
      width: 80px;
      }
    </style>
     <script>
      var map;

      require([
        "esri/map", 
        "esri/Color",
        "esri/symbols/TextSymbol",
        "esri/layers/LabelClass",
        "esri/geometry/Point",
        "esri/SpatialReference",
        "esri/graphic",
        "esri/tasks/Geoprocessor",
        "esri/tasks/FeatureSet",

        "dojo/dom", "dojo/on",
        "dojo/domReady!"
        ], function(Map, Color,TextSymbol, LabelClass, Point, SpatialReference, Graphic, Geoprocessor, FeatureSet, dom, on) {
        map = new Map("map", {
          basemap: "osm", 
          center: [112.886936,34.807108], 
          zoom: 6
        });
        var labelGraphic;
        map.on("click", function(evt){
          var color = new Color("#0a162c");
          var textSymbol = new TextSymbol(evt.mapPoint.x).setColor(color);;
          textSymbol.font.setSize("14pt");
          textSymbol.font.setFamily("arial");

          var labelPoint = new Point(evt.mapPoint.x, evt.mapPoint.y, new SpatialReference({ wkid: map.spatialReference }));
          labelGraphic = new Graphic(labelPoint, textSymbol);
          map.graphics.add(labelGraphic);
        });


        var converButton = dom.byId("button")
          on(converButton, "click", function(evt){
          var gp = new Geoprocessor("https://sms.esrichina.com/serv ... 6quot;);
          var in_features = new FeatureSet();
          in_features.fields = ;
          in_features.features.push(labelGraphic);

          var Output_Type = "DWG_R2013";
          //var Output_File = "E:/demo/ExportCAD"; //如果自定義路徑,需要該引數
          var param = {
           // currentTime: Output_File,
            Output_Type: Output_Type,
            Input_Features: [in_features]

          };
          gp.submitJob(param, Result);

        });
          function Result(res){
            console.log(res);
            if(res.jobStatus = "esriJobSucceeded")
            {
              alert("已生成");
            }else{
              alert("執行工具失敗");
            }
          }

      });
    </script>
  </head>

  <body>
    <div id="map"></div>
    <button id="button" >轉換</button>
  </body>
</html>

這裡寫圖片描述
P.S:雖然自定義了路徑,但是還是生成到安裝server的伺服器上,所以,自己寫個程式碼將伺服器上的檔案儲存到本地吧。

相關推薦

ArcGIS API for JavaScripttext轉換CAD(.dwg)檔案

最近根據使用者的需求寫了這個功能。 需求:先在web端編輯文字標註,然後轉換成CAD檔案。  使用者想將註記釋出成要素服務,然後再轉換成CAD(.dwg)檔案使用。但是註記是不支援釋出成要素服務的,下面是我想到的實現思路(如有其它方案,歡迎補充!): 定

【十】ArcGIS API for Javascript專題圖的製作(四)熱力圖渲染(上)

一 、熱力圖定義 熱力圖(heat map)也稱熱圖,是以特殊顏色高亮區域的形式表示密度、溫度、氣壓、頻率等分佈的不易理解和表達的資料。 二、HeatmapRenderer esri/renderers/HeatmapRenderer類用來快速繪製熱力圖,將要

【十】ArcGIS API for JavascriptMix Echarts熱力圖

一、引言 Echarts對於WebGIS開發人員來說並不陌生,特別是隨著版本的更新,與地圖相結合的資料視覺化方式使得專題圖製作更加直觀明瞭。近期專案需求,需要動態地根據業務資料生成熱力圖。解決方案即:A

ArcGIS API For Javascript顏色分類實現

   在博文(http://blog.csdn.net/lovecarpenter/article/details/52672046)的基礎上,利用該文章中的客戶端渲染唯一值實現了功能。但是做了修改,我渲染的是SimpleLineSymbol。在API3.8的版本中set

(十三)ArcGIS API For Javascript網路分析

require(["esri/map", "dojo/on", "dojo/dom", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/tas

ArcGIS API For Javascript呼叫動態地圖服務+屬性、空間查詢

1.引言       在本篇部落格中主要記錄一下在ArcGIS API如何呼叫自己釋出的動態地圖服務,利用動態地圖服務我們可以完成哪一些需求等等。 注:(如何利用ArcGIS Server釋出動態地圖服務請看部落格ArcGIS Server釋出動態地圖服務), 2.呼叫動態地

(三)ArcGIS API For Javascript呼叫動態地圖服務

1.引言       在本篇部落格中主要記錄一下在ArcGIS API如何呼叫自己釋出的動態地圖服務,利用動態地圖服務我們可以完成哪一些需求等等。 注:(如何利用ArcGIS Server釋出動態地圖服務請看部落格ArcGIS Server釋出動

(十九)ArcGIS API For Javascript專案真實部署

1.引言(友情提示:新手勿看)       在先前的部落格當中我們已經說了,ArcGIS API在本地如何部署,但是在先前的本地部署過程中存在什麼問題呢?現在我們來看一下先前的部署當中哪一些不合適的地方。 先前我們的js檔案引入方式為:

ArcGIS API For JavascriptGraphicsLayer和Graphic

1、map物件中預設有一個GraphicLayer,置於最頂層,使用它的方式是map.graphics. 比如map.graphics.add(graphci); 2、可以給GraphicLayer新增事件,比如點選事件, dojo.connect(map.

(六)ArcGIS API For Javascript查詢功能

1.引言 在ArcGIS API中查詢功能是非常常用的,Esri給我們提供了三個類用於實現向量資料查詢功能。FindTask,QueryTask,IdentifyTask,他們之間的區別為: FindTask只能進行屬性查詢,QueryTask,

ArcGIS API For Javascript多圖層顯示與隱藏,圖層要素選框查詢

5、多圖層的載入與隱藏 利用Html+Javascript前端程式設計實現上傳到服務端的地圖服務中的多圖層的載入與隱藏。本實驗中除了底圖之外,添加了共10個圖層,分別為 賓館酒店_point (0) 餐飲_point (1) 超市商城_point (2) 地級市_font

ArcGIS API for JavaScript 與 npm 例子運行

node 服務器環境 arcgis dem git ive bubuko 下載 module 下載官方的demo,4.7的,在終端裏跑了一下,測試成功(未打包) 在測試中精簡掉了不需要的文件,使用http協議跑的(file協議不行哦) 最簡單的目錄如下: 我把以上文件放到

WebGIS ArcGIS API for JavaScript 總結(一)

幾天時間過完了一本《WebGIS 從基礎到開發實踐》 如今閱讀技術書籍也同讀小說一樣,風裡來雨裡去,恢巨集鉅著,從洪荒原始到當今現代。由於是媳婦在圖書館給借的書,在這裡將這本書做一個總結和筆記。 一、為什麼要讀這本書。 美國的esri公司,全稱美國環境系統研究所公司

ArcGIS API For JavaScript官方文件(四)事件處理

        ArcGIS API For JavaScript是事件驅動的API。事件發生在您與JavaScript應用程式互動時,載入頁面、單擊滑鼠、執行任務和許多其他操作都會觸發事件。您可以通過監聽事件並編寫響應事件的程式碼使應用程式具有互動性,這就是所謂的“處理”事

ArcGIS API for JavaScript 4.x 離線配置IIS法

mil 主機名 def 創建網站 ali 修改 class web服務 block 【導讀】 關於如何在默認網站(Default Web Site,物理地址C:\inetpub\wwwroot\)啟動,已有很多博客詳盡地寫好了。 本篇在自建網站(本機)中配置jsAPI,j

ArcGIS API for JavaScript 4.x 離線配置Nginx法

上篇ArcGIS API for JavaScript 4.x 離線配置之IIS法提到,如何用IIS配置ArcGIS jsAPI; 本篇則使用http下的Nginx配置,其原理基本一致。https的部署方法暫時沒有試驗。下篇使用Apache和Tomcat配置。 【環境說明】作業系統Windows

ArcGIS API For JavaScript官方文件熱力圖渲染

一、API類:HeatmapRenderer             require(["esri/renderers/HeatmapRenderer"], function(HeatmapRenderer){ /*主體程式碼*/ }); 二、描述     Heatma

arcgis-api-for-js-參考系統的轉換

1. 前言 對於簡單的參考系統的轉換,例如從地理座標系統到 Web 墨卡託投影座標系統,可以直接使用 "esri/geometry/webMercatorUtils" 模組中的功能函式即可,對於複雜的參考系統的轉換,可以呼叫伺服器的幾何物件服務(esri/ta

ArcGIS API For JavaScript官方文件(二十)圖形和要素圖層——①Graphics概述

Working with graphics    ArcGIS JavaScript API允許在地圖上繪製graphic(圖形)。graphic可以由使用者作為標記或輸入繪製,也可以由應用程式根據任務繪製。例如,應用程式可能會將查詢結果作為graphics新增到地圖。   

使用Arcgis Api for Javascript 調用 本地Portal發布的WebMap

pla basemap 步驟 reat 地址 dap toc cli 配置 步驟: 安裝Arcgis Portal 10.4,Server 10.4,DataStore ,WebAdaptor for IIS,搭建arcgis api for javascript 4