package org.example;
import org.gdal.ogr.DataSource;
import org.gdal.ogr.Feature;
import org.gdal.ogr.Geometry;
import org.gdal.ogr.Layer;
import org.gdal.ogr.ogr;
public class Main {
public static void main(String[] args) {
// 注册OGR 驱动
ogr.RegisterAll();
// 打开矢量文件
String filePath = "F:/Test/BJ/beijing_shp/beijing_dissolved.shp";
DataSource dataset = ogr.Open(filePath, 0);
if (dataset == null) {
System.out.println("Failed to open file: " + filePath);
System.exit(1);
}
// 获取第一个图层
Layer layer = dataset.GetLayer(0);
if (layer == null) {
System.out.println("Failed to read layer");
System.exit(1);
}
// 遍历要素
Feature feature;
while ((feature = layer.GetNextFeature()) != null) {
// 获取要素属性
for (int i = 0; i < feature.GetFieldCount(); i++) {
String fieldName = feature.GetFieldDefnRef(i).GetName();
String fieldValue = feature.GetFieldAsString(i);
System.out.println(fieldName + ": " + fieldValue);
}
// 获取几何信息
Geometry geometry = feature.GetGeometryRef();
if (geometry != null) {
String geometryType = geometry.GetGeometryName();
System.out.println("Geometry Type: " + geometryType);
// 根据几何类型进行处理
// 这里只是简单打印坐标信息
if (geometryType.equals("POINT")) {
double x = geometry.GetX();
double y = geometry.GetY();
System.out.println("Coordinates: (" + x + ", " + y + ")");
} else if (geometryType.equals("POLYGON")) {
for (int i = 0; i < geometry.GetGeometryCount(); i++) {
Geometry ring = geometry.GetGeometryRef(i);
for (int j = 0; j < ring.GetPointCount(); j++) {
double x = ring.GetX(j);
double y = ring.GetY(j);
System.out.println("Ring Coordinates: (" + x + ", " + y + ")");
}
}
}
}
feature.delete();
}
// 释放资源
layer.delete();
dataset.delete();
}
}
结果:
与GIS结果对比: