linux下gdal的搭建

[源码编译]

前期准备

  1. 确认电脑上安装好g++等开发环境,否则执行

    sudo apt-get install build-essential 

2.  确认电脑上已经安装好svn以便下载最新的源代码,否则执行

 sudo apt-get install subversion

3.  确保proj4的安装

$ curl -O http://download.osgeo.org/proj/proj-4.8.0.tar.gz
$ tar xvfz proj-4.8.0.tar.gz
$ cd proj-4.8.0 $ ./configure
$ make
$ sudo make install
   安装之后的文件在/usr/local下面,其中bin下面存放可执行程序,include存放源代码,lib下存放lib库;同时将/usr/local/lib加入到/etc/ld.so.conf配置文件中,使用ldconfig命令动态装入链接库

4.编译GEOS安装

http://trac.osgeo.org/geos/下载最新版本并编译安装此包

安装过程当中,可能会使用到pcre-8.33.tar.gz,同时 可以下载安装。

5.安装SWIG开发工具

SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。

为支持linux下gdal的java语言开发,安装swig:

tar zxvf   swig-3.0.0.tar.gz

cd  swig-3.0.0

./configure  --prefix /usr

make

make install

编译GDAL

http://download.osgeo.org/gdal/gdal-1.9.2.tar.gz
$ tar xvfz gdal-1.9.2.tar.gz
$ cd gdal-1.9.2 $ ./configure --with-static-proj4=/usr/local --with-java=yes
$ make
$ make install
附上g++下的gdal命令:g++ test.cpp -o test -lgdal

edit gdal-1.9.2/swig/java/java.opt with your JAVA_HOME path:

下一步,编辑 gdal-1.9.2/swig/java/java.opt 配置 JAVA_HOME 路径:

JAVA_HOME = "/usr/lib/jvm/java-6-openjdk-amd64" JAVADOC=$(JAVA_HOME)/bin/javadoc
JAVAC=$(JAVA_HOME)/bin/javac
JAVA=$(JAVA_HOME)/bin/java
JAR=$(JAVA_HOME)/bin/jar
JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux

到此,即可编译它:

$ cd gdal-1.9.2/swig/java/ $ make

拷贝编译好的 .so 文件到一个目录/usr/lib下

$ cd /gdal-1.9.2/swig/java
$ ls | grep .so
libgdalconstjni.so
libgdaljni.so
libogrjni.so
libosrjni.so
$ cp *.so   /usr/lib/

然后ldconfig一下,下一步开始测试。

[java代码测试]

编写Test.java类,

import org.gdal.osr.*;

import org.gdal.ogr.*;

import org.gdal.gdal.*;

import org.gdal.gdalconst.gdalconstConstants;

public class Test{

public static String bytesToHexString(byte[] src){

StringBuilder stringBuilder = new StringBuilder("");

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

}

return stringBuilder.toString();

}

static void ReadVectorFile()

{

String strVectorFile = "/root/projects/无缝中国_地市_M.tab";

// 注册所有的驱动

ogr.RegisterAll();

// 为了支持中文路径,请添加下面这句代码

gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO");

// 为了使属性表字段支持中文,请添加下面这句

gdal.SetConfigOption("SHAPE_ENCODING","");

//打开数据

DataSource ds = ogr.Open(strVectorFile,0);

if (ds == null)

{

System.out.println("打开文件【"+ strVectorFile + "】失败!" );

return;

}

System.out.println("打开文件【"+ strVectorFile + "】成功!" );

// 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个

int iLayerCount = ds.GetLayerCount();

// 获取第一个图层

Layer oLayer = ds.GetLayerByIndex(0);

if (oLayer == null)

{

System.out.println("获取第0个图层失败!\n");

return;

}

// 对图层进行初始化,如果对图层进行了过滤操作,执行这句后,之前的过滤全部清空

oLayer.ResetReading();

// 通过属性表的SQL语句对图层中的要素进行筛选,这部分详细参考SQL查询章节内容

//oLayer.SetAttributeFilter("\"NAME99\"LIKE \"北京市市辖区\"");

// 通过指定的几何对象对图层中的要素进行筛选

//oLayer.SetSpatialFilter();

// 通过指定的四至范围对图层中的要素进行筛选

//oLayer.SetSpatialFilterRect();

// 获取图层中的属性表表头并输出

System.out.println("属性`结构信息:");

FeatureDefn oDefn =oLayer.GetLayerDefn();

int iFieldCount =oDefn.GetFieldCount();

for (int iAttr = 0; iAttr <iFieldCount; iAttr++)

{

FieldDefn oField =oDefn.GetFieldDefn(iAttr);

byte []bts= oField.GetNameRef().getBytes();

String btsR= bytesToHexString(bts);

System.out.print(btsR+" : ");

System.out.println(new String(oField.GetNameRef())+ ": " +

oField.GetFieldTypeName(oField.GetFieldType())+ "(" +oField.GetWidth()+"."+ oField.GetPrecision() + ")");

}

// 输出图层中的要素个数

System.out.println("要素个数 = " + oLayer.GetFeatureCount(0));

Feature oFeature = null;

// 下面开始遍历图层中的要素

while ((oFeature =oLayer.GetNextFeature()) != null)

{

System.out.println("当前处理第" + oFeature.GetFID() + "个:\n属性值:");

// 获取要素中的属性表内容

for (int iField = 0; iField< iFieldCount; iField++)

{

FieldDefn oFieldDefn= oDefn.GetFieldDefn(iField);

int type =oFieldDefn.GetFieldType();

switch (type)

{

case ogr.OFTString:

try {

System.out.print(new String(oFeature.GetFieldAsString(iField))+ "\t");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

break;

case ogr.OFTReal:

System.out.print(oFeature.GetFieldAsDouble(iField)+ "\t");

break;

case ogr.OFTInteger:

System.out.print(oFeature.GetFieldAsInteger(iField)+ "\t");

break;

default:

System.out.print(oFeature.GetFieldAsString(iField)+ "\t");

break;

}

}

System.out.println();

// 获取要素中的几何体

Geometry oGeometry =oFeature.GetGeometryRef();

//

}

System.out.println("数据集关闭!");

}

public static void main(String args[]){

ReadVectorFile();

}

}

结果出现了乱码,说明JNI方面的问题存在,解决方案,见本人的另一篇文章《GDAL在java中乱码问题解决方案》。

linux下gdal的搭建,码迷,mamicode.com

时间: 2024-12-21 17:33:24

linux下gdal的搭建的相关文章

linux下vsftp服务搭建

实验拓扑: Linux Client -----RHEL5.9(vmnet1)----------(vmnet1) Win7 Client 实验一:测试默认安装vsftpd的结果 匿名用户与本地用户都可以登录 匿名用户登录到/var/ftp,只能下载不能上传 本地用户登录到本地用户的家目录,可以上传和下载 [[email protected] ~]# rpm -q vsftpd  //检查软件包是否安装 package vsftpd is not installed [[email protec

linux 下 svn 服务器搭建与配置

Subversion是一个自由,开源的版本控制系统,可以记录每一次文件和目录的修改情况.这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节. linux 下 svn的搭建 首先安装 subversion yum  install -y subversion 使用rpm -qa subversion 查看是否安装完成 安装完成后进行配置 首先在home 下建立svn的数据目录和密码认证目录 说明: svndata 目录用于存放项目目录,svnpassw 目录存放密码及认证文件 在svn

linux下oracle11G DG搭建(四):后续验证操作

环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 主库下 $ tail -f /u01/app/oracle/diag/rdbms/bjdb/TestDB12/trace/alert_TestDB12.log 对于DG,一定要打开告警日志. 备库下 $ tail -f/u01/app/oracle/diag/rdbms

linux下apache服务搭建

实验拓扑:                          Linux Client -----RHEL5.9(vmnet1)----------(vmnet1)                          Win7 Client 实验一:查看默认HTTP配置     找到默认红帽欢迎页面 (/etc/httpd/conf/httpd.conf ---->Include ----> /etc/httpd/conf.d  ----> welcome.conf  ----> /

linux下DHCP服务搭建

实验环境 RHEL5.9 dhcp服务器 RHEL5.9 LINUX客户端 win7    windows客户端 实验前提: 1,服务器与客户机需要在同一个网段 2,dhcp需要有固定IP 实验步骤: 服务端操作步骤: 1,设置IP cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0    //设备名 BOOTPROTO=static    //静态IP HWADDR=00:0C:29:DB:02:CE ONBOOT=yes  //

linux下nsf服务搭建

实验环境 RHEL5.9两台 实验一: 将/root 共享给192.168.10.20,可写.同步,允许客户机以root权限访问 服务端配置: [[email protected] ~]# rpm -qa |grep nfs  //检查软件包是否安装 nfs-utils-lib-1.0.8-7.9.el5 nfs-utils-1.0.9-66.el5 [[email protected] ~]# rpm -qa |grep portmap portmap-4.0-65.2.2.1 [[email

linux下samba服务搭建

实验拓扑:Linux Client-----RHEL5.9(vmnet1)----------(vmnet1)Win7 Client 实验一:Samba匿名共享工作组为Tarena将目录 /usr/src 共享给所有人共享名设为 tools允许所有人访问.无需密码验证访问权限为只读 1.安装软件包[[email protected] ~]# rpm -q samba-client samba samba-commonpackage samba-client is not installedpac

Linux下DNS服务器搭建详解

 Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. 下面对DNS的工作流程及原理进行简要说明 DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts:若无结果,则client查看本地的DNS缓存服务器:若无结果,则查找所属域的首选DNS服务器:若此时本地首选DN

Linux下apache+php搭建配置记录

linux下apache+php搭建配置记录 第1章  环境说明 1.1 系统说明 CentOS 6.4 1.2 软件说明 httpd-2.4.2.tar.gz apr-util-1.4.1.tar.gz apr-1.4.6.tar.gz pcre-8.13.tar.gz php-5.4.3.tar.bz2 libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz 第2章  Apache搭建说明 2.1 安装依赖包 yum install make openldap