gdal geometry java_GDAL 的java调用问题总结

文章主要是对http://blog.csdn.net/liminlu0314/article/details/8395622该博文的一些问题的总结

首先,想用java编写GDAL的人不一定想从源码上编译GDAL,只是想用GDAL比较成熟的类库,所以编译环节其实可以省略,直接下载编译好的java版GDAL,例如下载地址:http://download.csdn.net/detail/liminlu0314/5016578,这个库的上传者与文章作者同一个人,是GDAL方面的大牛

其次,gdal.jar是需要导入工程的,但是其他的由jni生成的的dll,其实并不是添加jar引用,因为dll并不是jar包,会报不是zip的错误,我们只需要把几个dll文件放在工程根目录即可。如下图,用IntelliJ IDEA创建的工程,导入dll,注意,除了java文件夹里文件名带jni的dll,其中别忘了还得把GDAL\bin里的gdal19.dll拷过来,不然会报找不到类库的错误。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

再次,参看http://blog.csdn.net/liminlu0314/article/details/8828907这篇文章,其中读写代码都有一些错误,

以下指出一些错误,对于一些newFeature等单词没拆分的错误就不一一列举了,只是对能想起来的标红以下

package gdal_test;

import org.gdal.gdal.gdal;

import org.gdal.ogr.DataSource;

import org.gdal.ogr.Feature;

import org.gdal.ogr.FeatureDefn;

import org.gdal.ogr.FieldDefn;

import org.gdal.ogr.Geometry;

import org.gdal.ogr.Layer;

import org.gdal.ogr.ogr;

public class MyTest {

public static void main(String[] args) {

//ReadVectorFile();

WriteVectorFile();

}

static void ReadVectorFile()

{

String strVectorFile = "D:\\s57polygon.shp";

// 注册所有的驱动

ogr.RegisterAll();

// 为了支持中文路径,请添加下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Java 调用 GDAL 库将 DXF 格式转换为 JSON 格式,可以参考以下步骤: 1. 安装 GDAL 库:可参考 GDAL 官方文档进行安装。 2. 使用 Java 调用 GDAL 库:在 Java 中可以使用 JNA 或 JNI 调用 GDAL 库,这里以 JNA 为例介绍。 3. 代码示例: ```java import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Pointer; public interface GdalLibrary extends Library { GdalLibrary INSTANCE = Native.load("gdal", GdalLibrary.class); Pointer GDALCreate(char[] pszDriverName, int nXSize, int nYSize, int nBands, int eBandType, String[] options); void GDALClose(Pointer dataset); int OGRRegisterAll(); Pointer OGRSFDriverRegistrar_getRegistrar(); void OGRRegisterAll(); Pointer OGRSFDriverRegistrar_getDriverByName(Pointer registrar, String name); Pointer OGR_Dr_CreateDataSource(Pointer driver, String name, String[] options); Pointer OGR_DS_CreateLayer(Pointer datasource, String name, Pointer spatialRef, int geometryType, String[] options); void OGR_Fld_Create(Pointer layer, Pointer fieldDefn, int approxOK); Pointer OGR_FldDefn_New(String name, int type); void OGR_Fld_Destroy(Pointer fieldDefn); void OGR_L_CreateField(Pointer layer, Pointer fieldDefn, int approxOK); void OGR_L_SetSpatialFilter(Pointer layer, Pointer geometry); void OGR_L_SetAttributeFilter(Pointer layer, String filter); Pointer OGR_G_CreateGeometry(int type); void OGR_G_DestroyGeometry(Pointer geometry); void OGR_G_AddPoint(Pointer geometry, double x, double y, double z); void OGR_G_AddGeometry(Pointer geometry, Pointer geometry2); String OGR_G_ExportToJson(Pointer geometry); void CPLFree(Pointer pointer); } public static void dxf2json(String dxfPath, String jsonPath, String srs) { String[] args = new String[] { "-f", "GeoJSON", jsonPath, dxfPath }; GdalLibrary.INSTANCE.OGRRegisterAll(); Pointer hDriver = GdalLibrary.INSTANCE.OGRSFDriverRegistrar_getDriverByName( GdalLibrary.INSTANCE.OGRSFDriverRegistrar_getRegistrar(), "DXF"); Pointer hDataSource = GdalLibrary.INSTANCE.OGR_Dr_CreateDataSource(hDriver, dxfPath, null); Pointer hLayer = GdalLibrary.INSTANCE.OGR_DS_CreateLayer(hDataSource, "layer", null, 1, null); GdalLibrary.INSTANCE.OGR_L_CreateField(hLayer, GdalLibrary.INSTANCE.OGR_FldDefn_New("Id", 0), 1); Pointer hSpatialRef = null; if (StringUtils.isNotEmpty(srs)) { hSpatialRef = GdalLibrary.INSTANCE.OSRNewSpatialReference(null); GdalLibrary.INSTANCE.OSRSetFromUserInput(hSpatialRef, srs); GdalLibrary.INSTANCE.OGR_L_SetSpatialFilter(hLayer, hSpatialRef); } int argc = args.length; String[] argv = new String[argc]; for (int i = 0; i < argc; i++) { argv[i] = args[i]; } Pointer hArgv = GdalLibrary.INSTANCE.CPLStringListToargv(argc, argv); Pointer hDstDS = GdalLibrary.INSTANCE.GDALCreate("GeoJSON", 0, 0, 0, 0, null); GdalLibrary.INSTANCE.GDALVectorTranslate(hDstDS, hArgv, null); GdalLibrary.INSTANCE.GDALClose(hDstDS); if (hSpatialRef != null) { GdalLibrary.INSTANCE.OSRDestroySpatialReference(hSpatialRef); } GdalLibrary.INSTANCE.OGR_Fld_Destroy(GdalLibrary.INSTANCE.OGR_L_GetLayerDefn(hLayer).getFieldDefn(0)); GdalLibrary.INSTANCE.OGR_DS_Destroy(hDataSource); } ``` 其中,dxfPath 为输入的 DXF 文件路径,jsonPath 为输出的 JSON 文件路径,srs 为坐标系信息,可以根据需要自行设置。 这里使用了 GDALOGR API,具体使用方法可以参考 GDAL 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值