linux下gdal的搭建
来源:互联网 发布:ted速度慢 知乎 编辑:程序博客网 时间:2024/06/05 12:32
[源码编译]
前期准备:
确认电脑上安装好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/javadocJAVAC=$(JAVA_HOME)/bin/javacJAVA=$(JAVA_HOME)/bin/javaJAR=$(JAVA_HOME)/bin/jarJAVA_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 .solibgdalconstjni.solibgdaljni.solibogrjni.solibosrjni.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中乱码问题解决方案》。
1 0
- linux下gdal的搭建
- linux下gdal的搭建
- Linux下编译java可用的gdal
- Linux下编译GDAL
- Linux下安装gdal
- Linux下编译GDAL
- windows下GDAL环境搭建
- GDAL for Android在linux下交叉编译的问题
- X64平台下GDAL的编译及其上的C++/java开发搭建
- VS2012中GDAL环境变量的搭建
- GDAL库在windows下的编译
- VC++下使用GDAL的经验记录
- 一个下GDAL Release版的网站
- VC++下使用GDAL的经验记录
- Linux下搭建Nginx环境的搭建
- linux下的dns搭建
- Linux 下vsftp的搭建
- Linux下Ecilpse的搭建
- Ajax实现无刷新任务进度条 (webform)
- 2014.04.30[论文学习]色彩及图像基础(三)
- Darwin Streaming Server for Windows 安装
- OpenFlow交换机 之 流表
- 虚拟运营商会如何卖手机?且看JDPhone和余额宝
- linux下gdal的搭建
- 分解因数
- struts2原理剖析
- 物联网15年,盘点国内崛起的智能产业
- Ubuntu 14.04 安装 fcitx(小企鹅) 输入法
- java反射(3)--反射的应用
- 【边玩边学Unity3d】Mesh属性
- 深入理解Java虚拟机读书笔记三
- GDAL在java中乱码问题解决方案