รู้เบื้องต้นเกี่ยวกับ GDAL
GDAL (Geospatial Data Abstraction Library) เป็นไลบรารีการแปลงข้อมูลพื้นที่แรสเตอร์โอเพนซอร์สภายใต้ข้อตกลงใบอนุญาต X/MIT มันใช้แบบจำลองข้อมูลนามธรรมเพื่อแสดงรูปแบบไฟล์ที่รองรับ นอกจากนี้ยังมีชุดเครื่องมือบรรทัดคำสั่งสำหรับการแปลงข้อมูลและการประมวลผล
เว็บไซต์ทางการของ GDAL: http://www.gdal.org/ สามารถรองรับรูปแบบข้อมูลแผนที่ยอดนิยมที่หลากหลายในปัจจุบันรวมถึง Raster และ Vector Maps สำหรับรายละเอียดอ้างอิงเว็บไซต์ทางการ ไลบรารีนี้ได้รับการพัฒนาโดยใช้ C/C ++ มันต้องมีการรวบรวมตนเองเมื่อใช้ใน Java ฉันจะไม่พูดถึงกระบวนการรวบรวมที่เฉพาะเจาะจงที่นี่ มาดูเนื้อหาหลักของบทความนี้กันเถอะ
ตัวอย่างของวิธี Java ในการอ่านและเขียน shapefile โดยใช้ gdal
อ่านไฟล์ SHP และแปลงเป็น JSON
นำเข้า org.gdal.ogr.*; นำเข้า org.gdal.ogr.driver; นำเข้า org.gdal.gdal.*; คลาสสาธารณะ gdalshptest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// ลงทะเบียนไดรเวอร์ทั้งหมด ogr.registerall (); // เพื่อรองรับเส้นทางจีนโปรดเพิ่มรหัสต่อไปนี้ gdal.setConfigOption ("GDAL_FILENAME_IS_UTF8", "ใช่"); // ในการทำให้ฟิลด์ตารางแอตทริบิวต์สนับสนุนภาษาจีนโปรดเพิ่มประโยคต่อไปนี้ gdal.setConfigoption ("shape_encoding", ""); String strVectorfile = "D: //test//node.shp"; // เปิดไฟล์ dataSource ds = ogr.open (strvectorfile, 0); if (ds == null) {system.out.println ("เปิดไฟล์ล้มเหลว!"); กลับ; } system.out.println ("เปิดไฟล์สำเร็จ!"); ไดรเวอร์ dv = ogr.getDriverbyName ("geojson"); if (dv == null) {system.out.println ("เปิดไดรเวอร์ล้มเหลว!"); กลับ; } system.out.println ("เปิดไดรเวอร์สำเร็จ!"); dv.copydatasource (ds, "d: //test//node.json"); System.out.println ("การแปลงสำเร็จ!"); - เขียนไฟล์ shp
นำเข้า org.gdal.ogr.*; นำเข้า org.gdal.gdal.*; class writeshp2 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {writeshp2 readshpoBj = new writeshp2 (); readshpobj.writevectorfile (); } โมฆะคงที่ writevectorfile () {string strverectorfile = "d: //test//test.shp"; ogr.registerall (); gdal.SetConfigOption ("GDAL_FILENAME_IS_UTF8", "ไม่"); gdal.setConfigoption ("shape_encoding", "cp936"); string strdrivername = "esri shapefile"; org.gdal.ogr.driver odriver = ogr.getDriverbyName (strdrivername); if (odriver == null) {system.out.println (strverectorfile + "ไดรเวอร์ไม่สามารถใช้ได้! /n"); กลับ; } dataSource ods = odriver.createdataSource (strvectorfile, null); if (ods == null) {system.out.println ("สร้างไฟล์เวกเตอร์ [" + strvectorfile + "] ล้มเหลว! /n"); กลับ; } layer olayer = ods.createlayer ("testpolygon", null, ogr.wkbpolygon, null); if (olayer == null) {system.out.println ("การสร้างเลเยอร์ล้มเหลว! /n"); กลับ; } // สร้างตารางแอตทริบิวต์ด้านล่าง // ก่อนสร้างแอตทริบิวต์จำนวนเต็มที่เรียกว่า FieldId OfieldId = ใหม่ FieldDefn ("fieldId", ogr.oftinteger); Olayer.CreateField (Ofieldid); // สร้างแอตทริบิวต์อักขระที่เรียกว่า featurename โดยมีความยาวอักขระ 50 fieldDefn ofieldName = new FieldDefn ("FieldName", Ogr.oftString); OfieldName.SetWidth (100); Olayer.CreateField (OfieldName); fileatureefn odefn = olayer.getLayerDefn (); // สร้างคุณสมบัติสามเหลี่ยมคุณลักษณะของ ATEATURETRIARGLE = คุณสมบัติใหม่ (ODEFN); Ofeaturetriangle.setfield (0, 0); Ofeaturetriangle.setfield (1, "สามเหลี่ยม"); เรขาคณิต geomtriangle = geometry.createfromwkt ("รูปหลายเหลี่ยม ((0 0,20 0,10 15,0 0))"); OfeatureTriangle.Setgeometry (Geomtriangle); olayer.createfeature (oreaturetriangle); // สร้างคุณสมบัติคุณลักษณะสี่เหลี่ยมผืนผ้า OfeAterureCtangle = คุณสมบัติใหม่ (ODEFN); OfeAturerectangle.setfield (0, 1); OfeAturerectangle.SetField (1, "สี่เหลี่ยม"); เรขาคณิต GeomRectangle = Geometry.CreateFromWkt ("Polygon ((30 0,60 0,60 30,30 30,30 0,30 0)"); OfeAturerectangle.Setgeometry (GeomRectAngle); Olayer.CreateFeature (OfeAterureCtangle); // สร้างคุณสมบัติคุณสมบัติเพนตากอนของ ATEATUREPENTAGON = คุณสมบัติใหม่ (ODEFN); Ofeaturepentagon.setfield (0, 2); Ofeaturepentagon.setfield (1, "Pentagon"); รูปทรงเรขาคณิต geompentagon = เรขาคณิตสร้างจาก WKKT ("รูปหลายเหลี่ยม ((70 0,85 0,90 15,80 30,65 15,70 0))"); Ofeaturepentagon.setgeometry (Geompentagon); Olayer.CreateFeature (oreaturepentagon); ods.synctodisk (); System.out.println (" /n การสร้างชุดข้อมูลเสร็จสมบูรณ์! /n"); -รับ test.dbf, test.shp, test.shx
test.dbf มีดังนี้:
เปิดรูปร่างดังนี้
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร