文章目录
- 简要说明
- maven依赖
- 样例代码
简要说明
在java开发中,利用gdal,将原本shpfile的坐标系转为想要的坐标系,并输出新的shpfile
maven依赖
<!--需要安装完gdal后,本地install gdal包才能使用 --><!--gdal安装可参考 https://blog.csdn.net/qq_41613913/article/details/135743562 --><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>3.7.3</version></dependency>
样例代码
public static void main(String[] args) {// 注册所有的驱动ogr.RegisterAll();// 为了支持中文路径,请添加下面这句代码gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");// 为了使属性表字段支持中文,请添加下面这句gdal.SetConfigOption("SHAPE_ENCODING", "CP936");String strVectorFile = "D:\\shp\\test.shp";//打第一个文件Driver shpDriver = ogr.GetDriverByName("ESRI Shapefile");DataSource bpxmDataSource = shpDriver.Open(strVectorFile, 0);Layer bpxmLayer = bpxmDataSource.GetLayerByName("test");SpatialReference sr = new SpatialReference();sr.ImportFromEPSG(3857);//打开第二个文件DataSource bpxm2DataSource = shpDriver.CreateDataSource("D:\\shp\\test3857.shp");Layer bpxm2Layer = bpxm2DataSource.CreateLayer("test2", sr);//设置字段FeatureDefn bpxmfeatureDefn = bpxmLayer.GetLayerDefn();int fieldCount = bpxmfeatureDefn.GetFieldCount();for (int i = 0; i < fieldCount; i++) {FieldDefn defn = bpxmfeatureDefn.GetFieldDefn(i);bpxm2Layer.CreateField(defn);}Feature inputFeature = null;while ((inputFeature = bpxmLayer.GetNextFeature()) != null) {Geometry geometry = inputFeature.GetGeometryRef();if (Objects.isNull(geometry)) continue;geometry.TransformTo(sr);Feature outputFeature = new Feature(bpxm2Layer.GetLayerDefn());outputFeature.SetGeometry(geometry); // 设置几何对象到输出Feature中bpxm2Layer.CreateFeature(outputFeature); // 将Feature添加到输出图层中}bpxm2DataSource.delete();bpxmDataSource.delete();shpDriver.delete();}