赞
踩
目录
Native library load failed.java.lang.UnsatisfiedLinkError: no gdalalljni in java.library.path
最后把先前的gdal解压目录下的另一个dll也复制粘贴到jre\bin里面
最近在做关于tif格式的淹没算法,记录一下。
下载地址:https://www.gisinternals.com/release.php
这里我选择的是1900-x64,自己看一下选取自己合适的。
问题1:Chrome浏览器点击无反应
我的解决办法:使用手机下载,哈哈哈哈哈哈哈哈
然后传到电脑上
3.开始配置
解压-找到bin目录-配置环境变量
新建Java项目,我建的是Dynamic webProject项目-----新建一个文件夹lib,找到我们解压的文件,我的目录
E:\release-1900-x64-gdal-3-2-0-mapserver-7-6-1\bin\gdal\java
把这两个复制粘贴到lib
把gdal.jar右键build path-add to build path(导包基本操作)
然后就可以编码了
package sad;
import org.gdal.gdal.*;
import org.gdal.gdalconst.gdalconstConstants;
import org.gdal.ogr.DataSource;
import org.gdal.ogr.ogr;public class Hello {
public static void main(String[] args) {
//此处换成自己文件的位置的路径
//readGDAL("E:\\xxxxxxx.tif");getElevationFromTif("C:\\xxxx.tif");
}
/**
* 读取tif文件的相关信息
* @param fileName
*/
public static void readGDAL(String fileName) {
gdal.AllRegister();
//读取影像数据
Dataset dataset = gdal.Open(fileName,gdalconstConstants.GA_ReadOnly);
if(dataset == null){
System.err.println("GDALOpen failed - "+gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());
System.exit(1);
}Driver driver = dataset.GetDriver();
System.out.println("Driver:"+driver.getShortName()+"/"+driver.getLongName());//读取影像信息
int xSize = dataset.getRasterXSize();
int ySize = dataset.getRasterYSize();
int bandCount = dataset.GetRasterCount();
System.out.println("size is "+xSize+","+ySize+",光带数:"+bandCount);Band band = dataset.GetRasterBand(1);
int type = band.GetRasterDataType();
//type为1,代表的是Eight bit unsigned integer
System.out.println(type);dataset.delete();
gdal.GDALDestroyDriverManager();
}/**
* shp转换geojson
* @param shpFileName
* @param geojsonFileName
*/
public static void shpToGeojson(String shpFileName,String geojsonFileName) {
// 注册所有的驱动
ogr.RegisterAll();
// 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
// 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING","");
//shp文件所在的位置
//String strVectorFile = "D:\\sichuan\\sichuanPointALL.shp";
//打开数据
DataSource ds = ogr.Open(shpFileName,0);
if (ds == null)
{
System.out.println("打开文件失败!" );
return;
}
System.out.println("打开文件成功!" );
org.gdal.ogr.Driver dv = ogr.GetDriverByName("GeoJSON");
if (dv == null)
{
System.out.println("打开驱动失败!" );
return;
}
System.out.println("打开驱动成功!" );
//输出geojson的位置及文件名
//String geojsonFileName = "D:\\data\\sichuan.geojson";
dv.CopyDataSource(ds, geojsonFileName);
System.out.println("转换成功!");
}
/**
* 获取每个点的高程值
* @param fileName_tif
*/
public static void getElevationFromTif(String fileName_tif) {
gdal.AllRegister();
Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
if (hDataset == null)
{
System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());System.exit(1);
}Driver hDriver = hDataset.GetDriver();
System.out.println("Driver: " + hDriver.getShortName() + "/" + hDriver.getLongName());
int iXSize = hDataset.getRasterXSize();
int iYSize = hDataset.getRasterYSize();
System.out.println("Size is " + iXSize + ", " + iYSize);Band band = hDataset.GetRasterBand(1);
//这里是DEM数据,所以声明一个int数组来存储,如果是其他数据类型,声明相应的类型即可
int buf[] = new int[iXSize];for(int i=0; i<50/*iYSize*/; i++)
{
band.ReadRaster(0, i, iXSize, 1, buf); //读取一行数据// 下面是输出像元值,为了方便,我只输出了左上角 10×10的范围内的数据
for(int j=0; j<50/*iXSize*/; j++){
System.out.print(buf[j] + ", ");
}System.out.println("\n");
}
hDataset.delete();
// 可选
gdal.GDALDestroyDriverManager();}
}
说你这个东西不稳
解决办法:我们下载gdal文件解压后的bin目录所有dll类型文件拷贝到自己JAVA环境的jre目录下的bin目录下(关注一下自己的jre环境变量啊)
找到jre\bin,然后直接粘贴
第一次写这个文章,参考了https://blog.csdn.net/qq_42316200/article/details/103243960
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。