Geometry對象操作 - 創(chuàng)建對象

本文是Python GDAL/OGR Cookbook 1.0的C#版代碼,主要關(guān)注和幾何對象有關(guān)的操作

說明

  • 在運行下列代碼前歹啼,需要加入GDAL/OGR的引用,并導入命名空間using OSGeo.OGR;并注冊驅(qū)動器
  • 定義了PrintGeometry函數(shù)括细,用于打印輸出幾何對象薄榛,在代碼中不再一一調(diào)用

private static void PrintGeometry(Geometry geo)
{
Console.WriteLine(geo.ExportToJson(null));
string strWkt;
geo.ExportToWkt(out strWkt);
Console.WriteLine(strWkt);
}

  • Create a Point
Geometry geo = new Geometry(wkbGeometryType.wkbPoint);
geo.AddPoint_2D(1198054.34, 648493.09);
  • Create a LineString
Geometry geo = new Geometry(wkbGeometryType.wkbLineString);
geo.AddPoint_2D(1116651.439379124, 637392.6969887456);
geo.AddPoint_2D(1188804.0108498496, 652655.7409537067);
geo.AddPoint_2D(1226730.3625203592, 634155.0816022386);
geo.AddPoint_2D(1281307.30760719, 636467.6640211721); 
  • Create a Polygon
Geometry ring = new Geometry(wkbGeometryType.wkbLinearRing);
ring.AddPoint_2D(1179091.1646903288, 712782.8838459781);
ring.AddPoint_2D(1161053.0218226474, 667456.2684348812);
ring.AddPoint_2D(1214704.933941905, 641092.8288590391);
ring.AddPoint_2D(1228580.428455506, 682719.3123998424);
ring.AddPoint_2D(1218405.0658121984, 721108.1805541387);
ring.AddPoint_2D(1179091.1646903288, 712782.8838459781);
Geometry geo = new Geometry(wkbGeometryType.wkbPolygon);
geo.AddGeometry(ring);
  • Create a Polygon with holes
Geometry outRing = new Geometry(wkbGeometryType.wkbLinearRing);
outRing.AddPoint_2D(1154115.274565847, 686419.4442701361);
outRing.AddPoint_2D(1154115.274565847, 653118.2574374934);
outRing.AddPoint_2D(1165678.1866605144, 653118.2574374934);
outRing.AddPoint_2D(1165678.1866605144, 686419.4442701361);
outRing.AddPoint_2D(1154115.274565847, 686419.4442701361);
Geometry innerRing = new Geometry(wkbGeometryType.wkbLinearRing);
innerRing.AddPoint_2D(1149490.1097279799, 691044.6091080031);
innerRing.AddPoint_2D(1149490.1097279799, 648030.5761158396);
innerRing.AddPoint_2D(1191579.1097525698, 648030.5761158396);
innerRing.AddPoint_2D(1191579.1097525698, 691044.6091080031);
innerRing.AddPoint_2D(1149490.1097279799, 691044.6091080031);
Geometry geo = new Geometry(wkbGeometryType.wkbPolygon);
geo.AddGeometry(outRing);
geo.AddGeometry(innerRing);
  • Create a MultiPoint
Geometry point1 = new Geometry(wkbGeometryType.wkbPoint);
point1.AddPoint_2D(1251243.7361610543, 598078.7958668759);
Geometry point2 = new Geometry(wkbGeometryType.wkbPoint);
point2.AddPoint_2D(1240605.8570339603, 601778.9277371694);
Geometry point3 = new Geometry(wkbGeometryType.wkbPoint);
point3.AddPoint_2D(1250318.7031934808, 606404.0925750365);
Geometry geo = new Geometry(wkbGeometryType.wkbMultiPoint);
geo.AddGeometry(point1);
geo.AddGeometry(point2);
geo.AddGeometry(point3);
  • Create a MultiLineString
Geometry line1 = new Geometry(wkbGeometryType.wkbLineString);
line1.AddPoint_2D(1214242.4174581182, 617041.9717021306);
line1.AddPoint_2D(1234593.142744733, 629529.9167643716);
Geometry line2 = new Geometry(wkbGeometryType.wkbLineString);
line1.AddPoint_2D(1184641.3624957693, 626754.8178616514);
line1.AddPoint_2D(1219792.6152635587, 606866.6090588232);
Geometry geo = new Geometry(wkbGeometryType.wkbMultiLineString);
geo.AddGeometry(line1);
geo.AddGeometry(line2);
  • Create a MultiPolygon
Geometry ring1 = new Geometry(wkbGeometryType.wkbLinearRing);
ring1.AddPoint_2D(1204067.0548148106, 634617.5980860253);
ring1.AddPoint_2D(1204067.0548148106, 620742.1035724243);
ring1.AddPoint_2D(1215167.4504256917, 620742.1035724243);
ring1.AddPoint_2D(1215167.4504256917, 634617.5980860253);
ring1.AddPoint_2D(1204067.0548148106, 634617.5980860253);
Geometry poly1 = new Geometry(wkbGeometryType.wkbPolygon);
poly1.AddGeometry(ring1);
Geometry ring2 = new Geometry(wkbGeometryType.wkbLinearRing);
ring2.AddPoint_2D(1179553.6811741155, 647105.5431482664);
ring2.AddPoint_2D(1179553.6811741155, 626292.3013778647);
ring2.AddPoint_2D(1194354.20865529, 626292.3013778647);
ring2.AddPoint_2D(1194354.20865529, 647105.5431482664);
ring2.AddPoint_2D(1179553.6811741155, 647105.5431482664);
Geometry poly2 = new Geometry(wkbGeometryType.wkbPolygon);
poly2.AddGeometry(ring2);
Geometry geo = new Geometry(wkbGeometryType.wkbMultiPolygon);
geo.AddGeometry(poly1);
geo.AddGeometry(poly2);
  • Create a GeometryCollection
Geometry point = new Geometry(wkbGeometryType.wkbPoint);
point.AddPoint_2D(-122.23, 47.09);
Geometry line = new Geometry(wkbGeometryType.wkbLineString);
line.AddPoint_2D(-122.60, 47.14);
line.AddPoint_2D(-122.48, 47.23);
Geometry geo = new Geometry(wkbGeometryType.wkbGeometryCollection);
geo.AddGeometry(point);
geo.AddGeometry(line);
  • Create Geometry from WKT
string wkt = "POINT (1120351.5712494177 741921.4223245403)";
Geometry geo0 = Ogr.CreateGeometryFromWkt(ref wkt, null);
Console.WriteLine("{0}, {1}", geo0.GetX(0), geo0.GetY(0));
  • Create Geometry from GeoJSON
string geojson = "{\\"type\\":\\"Point\\",\\"coordinates\\":[108420.33,753808.59]}";
Geometry geo1 = Ogr.CreateGeometryFromJson(geojson);
Console.WriteLine("{0}, {1}", geo1.GetX(0), geo1.GetY(0));
  • Create Geometry from GML
string gml = "<gml:Point xmlns:gml=\\"http://www.opengis.net/gml\\"><gml:coordinates>108420.33,753808.59</gml:coordinates></gml:Point>";
Geometry geo2 = Ogr.CreateGeometryFromGML(gml);
Console.WriteLine("{0}, {1}", geo2.GetX(0), geo2.GetY(0));
  • Create Geometry from WKB
byte[] wkb = new byte[] { 
    0,0,0,0,3,0,0,0,1,0,0,0,6,65,49,253,211,42,41,37,56,65,37,192,157,196,135,117,19,
    7,65,49,183,93,5,150,43,69,65,36,94,128,137,112,75,248,65,50,136,240,239,22,209,
    18,65,35,144,137,168,96,54,68,65,50,191,36,109,175,66,146,65,36,213,190,159,242,
    223,69,65,50,151,101,16,217,17,120,65,38,1,168,92,113,151,146,65,49,253,211,42,4,
    1,37,56,65,37,192,157,196,135,117,197
};
IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(wkb, 0);
Geometry geo = Ogr.CreateGeometryFromWkb(wkb.Length, ptr, null);
PrintGeometry(geo);
  • Write Geometry to GeoJSON
...
Console.WriteLine(poly.ExportToJson(null));
  • Write Geometry to WKT
...
string outWkt;
poly.ExportToWkt(out outWkt);
Console.WriteLine(outWkt);
  • Write Geometry to KML
...
Console.WriteLine(poly.ExportToKML(null));
  • Write Geometry to WKB
...
byte[] outWkb = new byte[1000];
poly.ExportToWkb(outWkb);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窘俺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌复凳,老刑警劉巖瘤泪,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異育八,居然都是意外死亡对途,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門髓棋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來实檀,“玉大人惶洲,你說我怎么就攤上這事∩庞蹋” “怎么了恬吕?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長须床。 經(jīng)常有香客問我铐料,道長,這世上最難降的妖魔是什么豺旬? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任钠惩,我火速辦了婚禮,結(jié)果婚禮上族阅,老公的妹妹穿的比我還像新娘篓跛。我一直安慰自己,他們只是感情好坦刀,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布愧沟。 她就那樣靜靜地躺著,像睡著了一般求泰。 火紅的嫁衣襯著肌膚如雪央渣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天渴频,我揣著相機與錄音芽丹,去河邊找鬼。 笑死卜朗,一個胖子當著我的面吹牛拔第,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播场钉,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚊俺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逛万?” 一聲冷哼從身側(cè)響起泳猬,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宇植,沒想到半個月后得封,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡指郁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年忙上,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闲坎。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疫粥,死狀恐怖茬斧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梗逮,我是刑警寧澤项秉,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站库糠,受9級特大地震影響伙狐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞬欧,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一贷屎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艘虎,春花似錦唉侄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至候生,卻和暖如春同眯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唯鸭。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工须蜗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人目溉。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓明肮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缭付。 傳聞我的和親對象是個殘疾皇子柿估,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 知識點: 注:int類型默認32位有大小范圍 且第一位為符號位 0 為正 1 為負 8.4作業(yè) A:1、風力預警系...
    cGunsNRoses閱讀 1,097評論 0 0
  • 窗外霧霾嚴重陷猫,高一點的建筑物都是雨里霧里的秫舌,這不是寒假里回鄉(xiāng)火車上看到的炊煙和霧氣裊裊,肺疼……晚上回去煮個雪梨冰...
    這一只果是大小姐閱讀 372評論 0 0
  • 此時的心情應該用糟糕或者不僅僅是糟糕來描述吧绣檬。又或者說是一種無法描述的心情吧 時光匆匆舅巷,一轉(zhuǎn)眼我奔三了,一個一事無...
    夢小笨閱讀 242評論 0 0
  • 一爐赋元,一纂忘蟹,一線清香飒房。 一火,一世媚值,一縷從容狠毯。 ——致拙
    手握瓷杯閱讀 287評論 0 1
  • js驗證固定電話嚼松、手機號碼 規(guī)則的國內(nèi)固定電話和傳真的格式基本都是帶有0的區(qū)號+連接符“-”+電話號碼,另外還有可...
    duJing閱讀 6,183評論 0 2