Java环境下GDAL / OGR环境配置与入门

C#环境下GDAL / OGR环境配置与入门 本程序在C#环境下使用GDAL类库完成了Shapefile的读取和属性更新的操作,这只是对于GDAL很简单的一个尝试,GDAL的功能十分强大,有待于继续学习。 本程序还存在一些问题有待完善 1. 没有图形界面加载 2. 汉字乱码问题有待解决 阅读详情

0.概述

先放一个图标:
GDAL/OGR
在尝试在C#环境下使用OGR之后,由于可参考的代码太少,并且C#环境下没办法构建可视化界面,并且C#会乱码。所以转向Java平台了,用Java开打GDAL和OGR的人比较多,网上代码也多,相对来说效率就更高一些了。
刚接触的时候用的还是Eclipse,还没用过IDEA,所以这篇文章也是基于Eclipse的,但是实际上两者差不多。下面是程序运行的情况,本示例仅打开Shapefile文件,关于界面显示,用到了GeoTools,后面学了之后介绍。
在这里插入图片描述

1.环境配置

关于环境配置网上的教程太多了,但是他们有一个共同的特点,就是过于条理性不足,并且对每一步的解释不够清晰,这篇文章我把步骤分为以下三个部分,希望能更容易被理解。
在进行下面的步骤之前,请确定自己已经配置了Java环境,并且Java的环境变量已经配置完毕。

1.1 开发环境下载

所需要下载的文件就只有一个,打开这个网站,找一个合适的版本下载即可 GDAL下载地址 ,我下载的是下图的版本,也可以选择其他版本,大差不差。
在这里插入图片描述
打开下载的压缩包,可以看到下面的文件
在这里插入图片描述
打开bin目录,众所周知,bin下面就是关键的文件了,一会这个目录要加到环境变量里面
在这里插入图片描述
打开gdal目录,这个时候就可以看到Java目录了,里面有两个文件,是用来配置Java工程的,1.3里面会用到
在这里插入图片描述
在这里插入图片描述
把这些文件解压到任意一个目录下面,之后就可以开始环境变量的配置了。

1.2 环境变量配置

网上关于环境配置的方法,大都是把刚下载文件里面的dll文件一股脑的放到Java目录下面,这样有个好处,就是十分方便,但是我感觉这样会一定程度的污染到Java环境,并且当自己不像再用GDAL的时候,想要把他的组件删掉,是一件很麻烦的事情。
从原理上面来说,直接把dll文件所在目录放到环境变量里面也是可以的,并且这个方法看起来更加符合逻辑。
因此具体做法是这样的
①右键桌面计算机,点击属性

②点击打开界面中右侧的高级系统设计
在这里插入图片描述
③点击环境变量按钮
在这里插入图片描述
④找到path,点击编辑
在这里插入图片描述
⑤点击新建按钮,把刚才下载文件解压目录的对文件夹加载进去,实际上不需要把这五个都加进去,但是为了避免以后再加,这次就索性全部添加进去。
在这里插入图片描述
⑥之后一路点确定,就完成环境变量配置了,下面创建一个Java工程,在Java里面进行一些配置。

1.3java工程配置

1.3.1新建Java工程

新建工程不多说了,直接New一个空的项目就行
在这里插入图片描述

1.3.2添加GDAL的jar文件并构建

新建一个lib文件夹,然后把1.1里面最后一张图片的后缀为jar的文件放进去
在这里插入图片描述=>在这里插入图片描述
之后右键这个gdal.jar,点击Build Path,把它添加到没模型构建起里面。
在这里插入图片描述

1.3.3 添加一个dll文件到工程

环境配置的最后一步,就是把gdalalljni.dll文件放到java的根目录下面,具体原理我也不知道,总之放就行了
在这里插入图片描述=>在这里插入图片描述
到这里环境变量配置工作就完成了,要使用GDAL,需要把组件在java文件开头引用一下

import org.gdal.ogr.*;
import org.gdal.gdal.*;

然后使用前把这两个东西注册一下

import org.gdal.ogr.*;
import org.gdal.gdal.*;

下面就可以开始使用了。

2.程序开发

2.1 界面搭建

java的swing界面虽然看起来美观度有些欠缺,但是用起来还是没什么问题的,下面搭建一个简单的界面,详细说明放在代码注释里面,界面上面的功能并没有全部实现,只需要关注打开Shapefile这一个功能即可:

//创建一个类,继承JFrame,实现ActionListener接口
public class Plugin_PostGIS extends JFrame implements ActionListener{
	//注册一些公共组件,这其中包括了菜单栏按钮,表格,地图等等
	JMenuItem openshapefile;
	JMenuItem gdb;
	JMenuItem mdb;
	JMenuItem ConnectPostgres;
	JMenuItem discardPostgres;
	JMenuItem New;
	JMenuItem Delet;
	JMenuItem Import;
	JMenuItem Select;
	JMapPane mapPane;
	JTable table;
    MapLayerTable maptable;
    ArcDataToPostgre myArcDataToPostgre;
    Quickstart a;
    Postgis_OGR pPostgis_OGR;
    JComboBox filecombox = new JComboBox();
    JComboBox datacombox = new JComboBox();
    JButton jb2;
    JButton jb1;
    //注册GDAL
	public Plugin_PostGIS() {
		org.gdal.gdal.gdal.AllRegister();
		org.gdal.ogr.ogr.RegisterAll();
		// TODO Auto-generated method stub
		Init();
	}
	private static Map DBMAP = new HashMap<String, Object>() {
        {
            put("dbtype", "postgis");
            put("host", "localhost");
            put("port", 5432);
            put("schema", "public");
            put("database", "little_c_sharp");
            put("user", "postgres");
            put("passwd", "107530");

        }
    };
	public void Init() {
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		Dimension dm = Toolkit.getDefaultToolkit().getScreenSize();
		this.setBounds(dm.width/2-300, dm.height/2-300, 700, 700);
		this.setLayout(new BorderLayout());
		
		//菜单栏目
		JMenuBar menuBar = new JMenuBar();
		JMenu menufile = new JMenu("File");
		JMenu menudatabase = new JMenu("Database");
		openshapefile = new JMenuItem("打开OpenShapefile文件");
		gdb = new JMenuItem("打开gdb数据库");
		mdb = new JMenuItem("打开mdb数据库");
		

		ConnectPostgres = new JMenuItem("连接Postgres");
		discardPostgres = new JMenuItem("断开Postgres");
		New = new JMenuItem("新建数据表");
		Delet = new JMenuItem("删除数据表");
		Import = new JMenuItem("导入当前数据");
		Select = new JMenuItem("查询数据");
		
		openshapefile.addActionListener(this);
		Import.addActionListener(this);
		ConnectPostgres.addActionListener(this);
		discardPostgres.addActionListener(this);
			
		menuBar.add(menufile);
		menuBar.add(menudatabase);
		menufile.add(openshapefile);
		menufile.add(gdb);
		menufile.add(mdb);
		menudatabase.add(ConnectPostgres);
		menudatabase.add(discardPostgres);
		menudatabase.add(New);
		menudatabase.add(Delet);
		menudatabase.add(Import);
		menudatabase.add(Select);
		
		
		//地图容器

        mapPane = new JMapPane();
        mapPane.setBackground(Color.WHITE);
        mapPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        
        //属性表
        table=new JTable();
        JScrollPane tablepanel=new JScrollPane(table);
        //maptable=new MapLayerTable(mapPane);
        //左侧容器
        
        
        
        
        JPanel leftJPanel=new JPanel();
        leftJPanel.setLayout(new BorderLayout());
        JPanel lefttopJPanel=new JPanel();
        JPanel leftbuttonJPanel=new JPanel();
        
        jb1=new JButton("显示");
        jb2=new JButton("读取");
        jb2.addActionListener(this);
        
        leftJPanel.add(lefttopJPanel,BorderLayout.NORTH);
        leftJPanel.add(leftbuttonJPanel,BorderLayout.SOUTH);
        
        lefttopJPanel.setLayout(new BorderLayout());
        leftbuttonJPanel.setLayout(new BorderLayout());
        
        lefttopJPanel.add(jb1,BorderLayout.CENTER);
        lefttopJPanel.add(filecombox,BorderLayout.NORTH);
        
        leftbuttonJPanel.add(jb2,BorderLayout.CENTER);
        leftbuttonJPanel.add(datacombox,BorderLayout.NORTH);
        
        
        
        
        JPanel top = new JPanel();
        top.setLayout(new BorderLayout());
        top.add(mapPane,BorderLayout.CENTER);
        top.add(leftJPanel,BorderLayout.WEST);
        
        SetComposeSize(dm,tablepanel,top,mapPane,leftJPanel,lefttopJPanel,leftbuttonJPanel);
        
        //添加控件到主界面
		this.setJMenuBar(menuBar);
		this.add(top,BorderLayout.CENTER);
		this.add(tablepanel,BorderLayout.SOUTH);
	}
	
	public void SetComposeSize(Dimension dm,JScrollPane jp,JPanel t,JMapPane jm,JPanel l,JPanel lt,JPanel jb) {
		jp.setSize(dm.width,(int)(dm.height*0.3));
		t.setSize(dm.width,(int)(dm.height*0.7));
		Dimension dtd=l.getSize();
		
		jm.setSize((int)(dtd.width*0.8),(int)(dtd.height));
        l.setSize((int)(dtd.width*0.2),(int)(dtd.height));
        Dimension ld=l.getSize();
        lt.setSize(ld.width,(int)(ld.height*0.5));
        jb.setSize(ld.width,(int)(ld.height*0.5));
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==openshapefile) {
			JFileChooser chooser=new JFileChooser();
			int returnvalue =chooser.showOpenDialog(this);
			if(returnvalue==JFileChooser.APPROVE_OPTION) {
				//File f = chooser.getSelectedFile();
				File f = new File("E:/CodeStudy/CsharpConPG/SHp/四省.shp");
				if(a==null) {
					a = new Quickstart();
				}
				String[] columnameStrings = a.openfileCol(f.getAbsolutePath());
		        String[][] data = a.openfile(f.getAbsolutePath());
		        
		        DefaultTableModel model;
		        model = new DefaultTableModel(data, columnameStrings);
		        table.setModel(model);
		        
				this.mapPane.setMapContent(a.getMapContent(f));
			}
		}
		else if(e.getSource()==ConnectPostgres) {
			if(a==null) {
				a = new Quickstart();
			}
			pPostgis_OGR=new Postgis_OGR("PG:dbname=little_c_sharp host=localhost port=5432 user=postgres password=107530");
			myArcDataToPostgre = new ArcDataToPostgre(this.DBMAP);
			List<String> names = pPostgis_OGR.getLayerNames();
			for (int i = 0; i < names.size(); i++) {
				this.datacombox.addItem(names.get(i));
			}
		}
		else if(e.getSource()==Import) {
			myArcDataToPostgre.importGdbToDatabaseSingal(a.currentDataSource.GetLayer(0), null);
		}
		else if(e.getSource()==discardPostgres) {
			myArcDataToPostgre.disconnectdatabase();
		}
		else if(e.getSource()==jb2) {
			Layer nowLayer = pPostgis_OGR.getLayerByname(datacombox.getSelectedItem().toString());
			String filepathString = pPostgis_OGR.LayerToGeoJson(nowLayer);
			File geojsonFile = new File(filepathString);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			String[] columnameStrings = a.openfileCol(nowLayer);
	        String[][] data = a.openfile(nowLayer);
	        
	        DefaultTableModel model;
	        model = new DefaultTableModel(data, columnameStrings);
	        table.setModel(model);
	        this.mapPane.setMapContent(a.getMapContent(geojsonFile));
	        
			//this.mapPane.setMapContent(a.getMapContent(f));
		}
	}
	
}

2.2功能实现

下面是两个方法,主要是获取属性表的表头和数据,表头用一个数组表示,数据用一个二维数组表示,代码解释放在注释里面,这些数据主要用来创建DefaultTableModel用来作为JTable的数据源。

//这个函数用来获取表头
    public static String[] openfileCol(String filename) {
    //打开shapefile
		DataSource ds = ogr.Open(filename,1);
		currentDataSource=ds;
		for (int i=0;i< ds.GetLayerCount(); i++)
        {
            org.gdal.ogr.Layer layer = ds.GetLayerByIndex(i);
            //获取表头信息
            FeatureDefn pFeatureDefn = layer.GetLayerDefn();
    		String[] outst = new String[pFeatureDefn.GetFieldCount()];
    		//遍历表头,存储到outst里面用于返回
            for (int j = 0; j < pFeatureDefn.GetFieldCount(); j++)
            {
                FieldDefn fie = pFeatureDefn.GetFieldDefn(j);
                outst[j]=fie.GetName();
                //MessageBox.Show(pFeatureDefn.GetFieldDefn(j).GetNameRef().ToString());
                //MessageBox.Show(pFeatureDefn.GetFieldDefn(j).GetTypeName().ToString());
            }
    		return outst;
        }
		return null;
    }
//这个函数用来获取属性表里面的数据,输入shapefile文件名,返回存储了数据的二维数组
	public static String[][] openfile(String filename) {
		DataSource ds = ogr.Open(filename,1);
		currentDataSource=ds;
		String outst = "";
		for (int i=0;i< ds.GetLayerCount(); i++)
        {
            org.gdal.ogr.Layer layer = ds.GetLayerByIndex(i);
            FeatureDefn pFeatureDefn = layer.GetLayerDefn();
            String[][] dataut =new String[(int)layer.GetFeatureCount()][pFeatureDefn.GetFieldCount()];
            for (int j = 0; j < layer.GetFeatureCount(1); j++)
            {
            	//获取一个要素
                Feature feature = layer.GetFeature(j);
                //遍历各个要素的属性,存储到数组里面
                for(int k=0;k< pFeatureDefn.GetFieldCount(); k++)
                {
                	dataut[j][k] = feature.GetFieldAsString(k);
                }
                outst+="\n";
            }
            return dataut;
        }
		return null;
	}
JAVA使用GDAL入门指南 如果你打开了这篇博客,那么你肯定和我当初一样的苦逼。 话不多说,分析下我学习gdal的一丢丢心得。 1.你要知道什么GDAL,它是干什么的。 gdal到底是什么呢,嘿嘿相信你已经百度过了。。。。 ** 2.Java集成gdal 2.1 下载Java版本的gdal在千万文件大军找到我们需要的文件GDAL\bin\gdal\java 一个jar包四个DLL文件,这是Java依赖GDAL的核心文件 2... 阅读详情

相关推荐

gdal for java 从安装到各种案例demo实现

java+GDAL 0、环境配置 下载GDAL: ​ 下载地址:GISInternals Support Site ​ 建议使用最新版本(支持FileGDB) 本地部署: 解压后将GDAL的bin文件夹下所有的dll(不包括bin目录下的文件夹)和bin/gdal/java下的dll文件拷贝到jdk安装路径的bin目录下 将\bin\gdal\plugins-external内的ogr_FileGDB.dll拷贝到\bin\gdal\plugins下 将GDAL的bin目录添加到Pat

qq_42522024的博客 1万+

基于Java和GDAL实现的GeoJSON数据读取与入库实践

本文将重点讲解在Java中如何调用GDAL进行GeoJSON矢量数据处理,首先使用QGIS工具展示待处理的地名GeoJSON数据,然后介绍在PostGIS空间数据库中创建空间表,最后介绍基于Java语言调用GDAL将GeoJSON进行空间数据入库。

夜郎King的博客 1万+

GDAL/ORG之Python获取与安装

GDAL(Geospatial Data Abstraction Library)是一个的开源栅格空间数据读取/转换库。其中还有一系列命令行工具来进行数据转换和处理。       而ORG项目是GDAL的一个分支,功能与GDAL类似,但其提供对矢量数据的支持。 也就是说,可以用ORG的库来读取、处理shapefile等矢量数据(如果想显示shapefile,还需要用其他工具)。      这里

sunny2038的专栏 2万+

Java集成gdal 处理解析tiff和shp数据

也复制到 java/bin java/jre/java,并且放入项目里面。可以按照类型复制,然后复制到你的 java jDK 文件夹下。不知道 java 的文件夹位置,可以通过这个查找。这个是因为你电脑是 win64 位才选择哦~

qq_62773260的博客 2032

初识GDAL与实战

初识GDAL GDAL(Geospatial Data Abstraction Library),是一个用于矢量和栅格格式数据之间的转换器。由开源地理空间基金会在 X/MIT 风格的开源许可下发布。作为一个库,它为所有支持的格式向调用应用程序提供单个栅格抽象数据模型和单个矢量抽象数据模型。它还带有各种有用的命令行实用程序,用于数据转换和处理。该新闻页面描述了2021年10月GDAL / OGR 3.3.3版本。 GIS的基础设施-GDAL 个人认为,GDAL可以称为GIS的基础设施 ,为什么这么说呢?

wongbynn的博客 1050

JAVA版本GDAL安装使用教程(详细步骤)

GDAL由加拿大航天代理局开发,采用MIT/X开源协议,由Open Source Geospatial Foundation维护。它通过抽象数据模型统一支持多种地理数据格式,包括栅格数据(如GeoTIFF、JPEG2000、HDF)和矢量数据(如Shapefile、GeoJSON)。其跨平台性支持Windows、Linux、macOS等操作系统,并提供了Python、C/C++、Java等多种语言接口。

猿小白的博客 1457

【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)

前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。 GDA

KingWang@whu的博客 3922

GDAL/OGR在C#中的应用与实践

地理信息系统(GIS)作为信息科学的一个分支,它的核心是地理空间数据的处理与分析。为了高效地进行这些任务,需要一套强大的编程库。在众多的库中,GDAL/OGR因其跨平台、开源的特点脱颖而出,成为了GIS领域不可或缺的工具。本文将介绍GDAL/OGR库的概况,并探讨其在地理信息系统中的应用。GDAL/OGR库是由开源社区维护的一套强大的数据格式转换和处理工具,它提供了一系列用于读取和写入GIS数据的命令行工具和API。

weixin_35734408的博客 1050

GDAL从源码到JAVA应用(Windows环境)

GDAL从源码到JAVA应用(Windows环境) Java中的GDAL/OGR   本文讲述内容提纲: 1、 GDAL/OGR项目相关介绍 2、 GDAL/OGR 在C++环境中的编译(VS2013环境) 3、 GDAL/OGR 在Java环境中的编译 4、 Java版本的GDAL/OGR的环境配置说明(绝对详细) 5、 应用案例 6、 注:与百度上的其他相关GDAL/OGR应

lw19910913的博客 2177

C#中GDAL/OGR数据读取与处理实战教程

简介:GDAL和OGR是开源的地理空间数据处理库,分别擅长处理栅格数据和矢量数据。它们被广泛应用于GIS领域,并由OSGeo维护。本教程项目展示了如何在C#中利用绑定库调用GDAL/OGR的功能来读取和处理地理空间数据,涵盖了数据读取、信息显示、坐标转换、数据渲染、文件I/O操作和异常处理等关键操作。它提供了一个实践案例,帮助开发者掌握在.NET环境下的地理空间数据操作技术。

weixin_42234168的博客 1329

数值计算方法 matlab用二分法或简单迭代法求_快速求解方程的根——二分法与牛顿迭代法

今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论,今天和大家聊点有用的东西。我们都知道,工业上的很多问题经过抽象和建模之后,本质还是数学问题。而说到数学问题就离不开方程,在数学上我们可以用各种推算、公式,但是有没有想过在计算机领域我们如何解一个比较复杂的方程?如果之前没有想过,那你可能得想一想,因为以后很有可能会在面试题当中遇到。二分法我们要介绍的第一个方法是二分法。说到二...

weixin_39945915的博客 1304

gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)

前言:对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data AbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。GDAL官网编译的d...

weixin_39990819的博客 412

STM32实战:滑模观测器与PLL锁相环融合的FOC无感控制精解

本文深入解析了STM32平台下结合滑模观测器(SMO)与PLL锁相环的无感FOC控制技术。通过实战案例详细介绍了PLL锁相环在消除SMO高频抖振、提升角度跟踪精度方面的关键作用,并分享了工程调参技巧、C语言实现细节及系统联调方法,为电机控制开发者提供了一套完整的解决方案。

weixin_30838873的博客 190

OfficeIMO JavaScript指南:如何在浏览器与Node中流式导出XLSX与PDF

OfficeIMO JavaScript(npm 包 `@evotecit/officeimo`)是一套零运行时依赖的 TypeScript 文档库,帮助你在现代浏览器、Web Worker 与 Node.js 中**流式导出 XLSX、CSV 与分页 PDF 表格**。它不引入任何第三方文档引擎,用同一套 `Column` 列定义同时驱动三种格式,并原生支持 `WritableStream` 逐

gitblog_00547的博客 1092

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 1015

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 536

gdal java shp_【GDAL/OGR】利用GDAL/OGR讀取shp文件並轉換為json文件(Java版)

前言:對於GIS開發者來說,GDAL/OGR是最熟悉不過的開源GIS庫了,GDAL(Geospatial Data AbstractionLibrary)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。OGR是GDAL項目的一個分支,功能與GDAL類似,只不過它提供對矢量數據的支持。編譯的dll文件下載...

weixin_28740399的博客 213

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 344

GDAL环境配置

最近项目中需要解析shp和cad图形数据,想到用gdal的开源库来实现。GDAL/OGR库提供了对栅格和矢量数据的支持。 官网下载对应的dll和jar文件:https://www.gisinternals.com/release.php 下载后,解压,打开bin目录,里面有很多的dll gdal/java目录下有一个dll和一个jar文件 为了方便将bin目录下的dll和gdal/java目录下的dll统一复制到,jdk的安装路径,bin目录下。因为jdk已经配置了环境变量...

gis_zhouda的博客 2504

28、数字电路测试与半导体内存测试全解析

本文全面解析了数字电路中的顺序电路测试生成方法与半导体内存测试技术。内容涵盖顺序电路中的故障检测、多重观察测试、可驱动性分析、伪组合电路测试及初始化问题,并深入探讨了内存技术发展、故障模型、测试流程与未来趋势。重点介绍了DRAM、SRAM等主流内存类型的特点,以及制造和使用过程中面临的永久性与非永久性故障挑战,提出了基于故障模型的高效测试策略与优化方案。

go5gopher的博客 122

内模控制(IMC)——理论、应用与实践

内模控制方法的核心思想是利用被控对象的数学模型(即内模)构建控制器,使得控制器可以“预知”被控系统的动态响应,从而在控制输入中提前补偿模型的固有特性和扰动影响。常见的内模控制结构中,将系统分为无延迟部分和扰动部分,并利用内部模型预测输出值,再通过反馈回路进行误差修正。utuimctufbtutui​mctuf​bt其中,uimctu_imc(t)ui​mct为内模预测得到的预补偿控制量,ufbtu_fb(t)uf​bt。

闲人编程的博客 2632

java gdal postgresql_使用GDAL/OGR操作Postgresql数据库

GDAL(Geospatial Data AbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。本文将使用GDAL/OGR库读写Postgresql数据库中的表,代码执行环境在ubuntu12.04,直接上代码#include "/usr/include/gdal/o...

weixin_29191761的博客 862

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GDAL/OGR Java本地库资源包

GDAL/OGR Java本地库资源包 去发现同类优质开源项目:https://gitcode.com/ 此压缩文件release-1911-x64-gdal-3-0-2-mapserver-7-4-2.zip包含了适用于Windows环境,经过JAVA编译后所需的本地库文件。具体包含以下文件: gdalconstjni.dll gdaljni.dll ogrjni.dll osrjni.dll...

gitblog_06717的博客 306

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java使用GDAL的环境配置

下载GDAL库,根据网上的教程下载了gdal库所需资源,我下载的是64版本:release-1911-x64-gdal-3-0-4-mapserver-7-4-3 下载地址:http://www.gisinternals.com/release.php F:\ruanjian\GDAL\release-1911-x64-gdal-3-0-4-mapserver-7-4-3\bin 解压,之后...

qq_40820382的博客 1800
上一篇: C#环境下GDAL / OGR环境配置与入门
下一篇: PyTorch深度学习图像分类--猫狗大战
Matrix_CS
博客等级 码龄7年 27粉丝 13原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matrix_CS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值