Geometry对象操作 - 创建对象

本文是Python GDAL/OGR Cookbook 1.0的C#版代码,主要关注和几何对象有关的操作

说明

  • 在运行下列代码前,需要加入GDAL/OGR的引用,并导入命名空间using OSGeo.OGR;并注册驱动器
  • 定义了PrintGeometry函数,用于打印输出几何对象,在代码中不再一一调用

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容

  • 知识点: 注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1 为负 8.4作业 A:1、风力预警系...
    cGunsNRoses阅读 1,076评论 0 0
  • 窗外雾霾严重,高一点的建筑物都是雨里雾里的,这不是寒假里回乡火车上看到的炊烟和雾气袅袅,肺疼……晚上回去煮个雪梨冰...
    这一只果是大小姐阅读 356评论 0 0
  • 此时的心情应该用糟糕或者不仅仅是糟糕来描述吧。又或者说是一种无法描述的心情吧 时光匆匆,一转眼我奔三了,一个一事无...
    梦小笨阅读 232评论 0 0
  • 一炉,一纂,一线清香。 一火,一世,一缕从容。 ——致拙
    手握瓷杯阅读 268评论 0 1
  • js验证固定电话、手机号码 规则的国内固定电话和传真的格式基本都是带有0的区号+连接符“-”+电话号码,另外还有可...
    duJing阅读 6,171评论 0 2