使用ArcObjects新增點線面

2021-08-22 20:28:42 字數 3255 閱讀 6893

在ae中資料編輯是乙個重難點。它包括的東西很多,如地物的新增,地物的修改,地物查詢,節點捕捉,地物的符號化等一系列的問題。熟練的使用地物編輯的功能,是開發乙個系統必須具備的條件。資料編輯問題解決得好壞直接決定著軟體是否操作方便。在這我只是寫一些相應的功能函式,至於軟體開發中的架構暫不考慮。

1、新增地物

什麼是地物,這是 gis的基本概念,在此只說明一點,地物可以表現在地圖上,如房子、鐵路、水管等等。我們把房子的總稱稱為乙個地物類,在ae中對應乙個地物類(ifeatureclass),乙個地物類在地圖上表示為乙個地物層(ifeaturelayer),單獨的一棟房子或一條管道我們稱為地物(ifeature),arcgis中一類地物只能放在乙個層,通過圖層的疊加組成一幅地圖。

熟悉物件導向的人都知道,其實上邊的地物類和地物的概念就是類和物件的概念。房子、鐵路、水管等是一類地物的抽象,而具體的某一房子就是物件了。大家了解這一點,接下來的開發就容易理解一些了。當然,還有一些其他的概念也必須了解一下:如長事務、短事務、編輯空間等。請大家查詢一些相關資料,了解這方面的內容。

一、新增點

我們可以有多種方法新增點,但基本的思路一樣,只是有少量的介面有變化。下邊是通過ifeatureclass的createfeature()函式新增地物。

ifeaturelayer i = maptest.map.get_layer(0) as ifeaturelayer;

ifeatureclass fc = i.featureclass;

ifeatureclasswrite fcw = fc as ifeatureclasswrite;

iworkspaceedit w = (fc as idataset).workspace as iworkspaceedit;

ifeature f;

ipoint p;

w.startediting(false);

w.starteditoperation();

f = fc.createfeature();

p = new pointclass();

p.putcoords(93000, 48000);

f.shape = p;

fcw.writefeature(f);

w.stopeditoperation();

w.stopediting(true);

二、新增線

新增線的方法跟新增點一樣,不同的只是地物型別不一樣而已,我把**貼出來,大家跟新增點的方式進行對比。

ifeaturelayer i = maptest.map.get_layer(0) as ifeaturelayer;

ifeatureclass fc = i.featureclass;

ifeatureclasswrite fcw = fc as ifeatureclasswrite;

iworkspaceedit w = (fc as idataset).workspace as iworkspaceedit;

ifeature f;

ipoint p = new pointclass();

w.startediting(false);

w.starteditoperation();

//可選引數設定

object missing = type.missing;

f = fc.createfeature();

//定義乙個多義線物件

ipolyline polyline = new polylineclass();

//定義乙個點的集合

ipointcollection ptcollect = polyline as ipointcollection;

//定義一系列要新增到多義線上的點物件,並賦初始值

p.putcoords(95000, 48000);

ptcollect.addpoint(p, ref missing, ref missing);

p.putcoords(93000, 48000);

ptcollect.addpoint(p, ref missing, ref missing);

f.shape = polyline;

fcw.writefeature(f);

w.stopeditoperation();

w.stopediting(true);

三、新增面

新增面和新增線基本一致,將ipolyline換成ipolygon就可以了

ifeaturelayer fealayer = maptest.map.get_layer(0) as ifeaturelayer;

ifeatureclass fc = fealayer.featureclass;

ifeatureclasswrite fcw = fc as ifeatureclasswrite;

iworkspaceedit workspace = (fc as idataset).workspace as iworkspaceedit;

ifeature f;

ipoint p = new pointclass();

workspace.startediting(false);

workspace.starteditoperation();

//可選引數設定

object missing = type.missing;

f = fc.createfeature();

//定義乙個多邊形物件

ipolygon polygon = new polygonclass();

//定義乙個點的集合

ipointcollection ptcollect = polygon as ipointcollection;

//定義一系列要新增到多邊形上的點物件,並賦初始值

p.putcoords(90000, 48000);

ptcollect.addpoint(p, ref missing, ref missing);

p.putcoords(90000, 50000);

ptcollect.addpoint(p, ref missing, ref missing);

p.putcoords(93000, 50000);

ptcollect.addpoint(p, ref missing, ref missing);

f.shape = polygon;

fcw.writefeature(f);

workspace.stopeditoperation();

workspace.stopediting(true);

給UIImageView新增點選事件

uiimageview imageview1 uiimageview alloc initwithframe cgrectmake 125,50,229,229 imageview1 setimage uiimage imagewithcontentsoffile path imageview1.u...

vue router link 上新增點選事件

根據vue2.0官方文件關於父子元件通訊的原則,父元件通過prop傳遞資料給子元件,子元件觸發事件給父元件。但父元件想在子元件上監聽自己的click的話,需要加上native修飾符。所以如果在想要在router link上新增事件的話需要 click.native這樣寫 router link to...

(二)AS給button新增點選事件

三種方法給button新增點選事件 一 通過button的id,新增繼承view.onclicklistener的監聽實現 button android id id btn button2 android text 按鈕2 android layout width match parent andr...