1. 程式人生 > >ArcGIS for Android 體驗(二) 繪製標繪

ArcGIS for Android 體驗(二) 繪製標繪

          最最基本的單位是point。然後通過point可以自己組成一個點要素,然後若是想要組成polyline或者polyline的話,那麼需要進行更多操作。Polyline和polygon的基本組成要素是line,可以理解成線段。而line是需要point來組成。每個line有且僅有兩個point,也就是兩點組成一段,然後又line來組成polyline和polygon。這和我們以往的理解有些不同。在以往的理解中,polyline和polygon都是由point組成的。所以現在有了這個不同,在這裡本人就要特別提一下。

         大家看到這個point,polyline以及polygon了,這些只能算是要素,自己是沒有外形的。我們需要為其設定外形,點的形狀,顏色,大小。線的粗細,顏色,虛線與否。面的透明度,顏色以及填充物樣式等。這些在ArcGIS for Android中為Symbol中進行設定。Symbol的基本結構大概如此:

        一個真正的標繪Graphic的基本組成單元是由Geometry和Symbol共同完成的,所以我們在設定標繪的時候,要使用兩者一同設定。下文是Graphic的構造器的說明:

工程的建立

Menu的設定

在談及完Graphic的結構原理後,現在需要做的是對於工程的建立來實現標繪的新增。

在介面中,不修改main.xml,整個螢幕不新增控制元件,讓其顯示最完成。然後所有操作設定在menu上面。我分成點,線,面三種類型的繪製,每種型別有一些選擇來區別標繪內容。

         Menu設定的實現程式碼:

  1. //選單的載入
  2.     @Override
  3.     publicboolean onCreateOptionsMenu(Menu menu){  
  4.         //載入點選擇選單
  5.         SubMenu pointSubMenu=menu.addSubMenu("點");  
  6.         pointSubMenu.setHeaderTitle("選擇繪製的點");  
  7.         pointSubMenu.add(000"圖點");  
  8.         pointSubMenu.add(010"紅點");  
  9.         pointSubMenu.add(020"藍點");  
  10.         pointSubMenu.add(0
    30"綠點");  
  11.         //載入線選擇選單
  12.         SubMenu lineSubMenu=menu.addSubMenu("線");  
  13.         lineSubMenu.setHeaderTitle("選擇繪製的線");  
  14.         lineSubMenu.add(1,0,0,"白線");  
  15.         lineSubMenu.add(110"紅線");  
  16.         lineSubMenu.add(120"藍虛線");  
  17.         lineSubMenu.add(130"黃粗線");  
  18.         //載入面選擇選單
  19.         SubMenu gonMenu=menu.addSubMenu("面");  
  20.         gonMenu.setHeaderTitle("選擇繪製的面");  
  21.         gonMenu.add(200"紅面");  
  22.         gonMenu.add(210"綠面半透明");  
  23.         gonMenu.add(2,2,0,"藍面虛線填充");  
  24.         returnsuper.onCreateOptionsMenu(menu);  
  25.     }  
  26.     //選單項被單擊的事件
  27.     @Override
  28.     publicboolean onOptionsItemSelected(MenuItem mi){  
  29.         isChoose=true;  
  30.         //判斷是在哪個groupid裡面的
  31.         switch (mi.getGroupId()) {  
  32.         case0:  
  33.             drawType=Geometry.Type.POINT;  
  34.             switch (mi.getItemId()) {  
  35.                 case0:  
  36.                         Drawable drawable=this.getResources().getDrawable(R.drawable.icon);  
  37.                         symbol=new PictureMarkerSymbol(drawable);  
  38.                     break;  
  39.                 case1:  
  40.                     symbol=new SimpleMarkerSymbol(Color.RED, 14, SimpleMarkerSymbol.STYLE.CIRCLE);  
  41.                     break;  
  42.                 case2:  
  43.                     symbol=new SimpleMarkerSymbol(Color.BLUE, 14, SimpleMarkerSymbol.STYLE.CIRCLE);  
  44.                     break;  
  45.                 case3:  
  46.                     symbol=new SimpleMarkerSymbol(Color.GREEN, 14, SimpleMarkerSymbol.STYLE.CIRCLE);  
  47.                     break;  
  48.                 default:  
  49.                     break;  
  50.             }  
  51.             break;  
  52.         case1:  
  53.             drawType=Geometry.Type.POLYLINE;  
  54.             switch (mi.getItemId()) {  
  55.                 case0:  
  56.                     symbol=new SimpleLineSymbol(Color.WHITE, 8, SimpleLineSymbol.STYLE.SOLID);  
  57.                     break;  
  58.                 case1:  
  59.                     symbol=new SimpleLineSymbol(Color.RED, 8, SimpleLineSymbol.STYLE.SOLID);  
  60.                     break;  
  61.                 case2:  
  62.                     symbol=new SimpleLineSymbol(Color.BLUE, 10, SimpleLineSymbol.STYLE.DASH);  
  63.                     break;  
  64.                 case3:  
  65.                     symbol=new SimpleLineSymbol(Color.YELLOW, 18, SimpleLineSymbol.STYLE.SOLID);  
  66.                     break;  
  67.                 default:  
  68.                     break;  
  69.             }  
  70.             break;  
  71.         case2:  
  72.             drawType=Geometry.Type.POLYGON;  
  73.             switch (mi.getItemId()) {  
  74.                 case0:  
  75.                     fillSymbol=new SimpleFillSymbol(Color.RED, SimpleFillSymbol.STYLE.SOLID);  
  76.                     fillSymbol.setAlpha(100);  
  77.                     break;  
  78.                 case1:  
  79.                     fillSymbol=new SimpleFillSymbol(Color.GREEN);  
  80.                     fillSymbol.setAlpha(50);  
  81.                     break;  
  82.                 case2:  
  83.                     fillSymbol=new SimpleFillSymbol(Color.BLUE,SimpleFillSymbol.STYLE.BACKWARD_DIAGONAL);  
  84.                     fillSymbol.setAlpha(100);  
  85.                     break;  
  86.                 case3:  
  87.