mysql 存储矢量数据_空间矢量数据(.shp文件)之JAVA操作

本文介绍了如何使用Java读取和写入ESRI的Shape文件。Shape文件由主文件、索引文件和dBASE表构成,常用于GIS领域。作者提供了一个简单的Java实现,包括读取Shape文件和DBF文件的示例代码,以及如何处理文件配置和数据插入。
摘要由CSDN通过智能技术生成

Shape文件由ESRI开发。一个ESRI(Environmental Systems Research Institute)的shape文件包含一个主文件,一个索引文件,和一个dBASE表。

当中主文件的后缀就是.shp。

Shape文件已经是一种开源的文件格式。官方早在2006年就出版了对应的白皮书,对整个文件的读写进行了具体的说明,这样也使得Shape文件应用的更加广泛。本人在移动GIS开发的过程中,借机对.shp文件进行了研究,并简单实现了通过JAVA语言对.shp文件的读写操作功能。

================================================ 我是分隔线==============================================

1、Shape文件

ESRI 的shape 文件由一个主文件、一个索引文件和一个dBASE 表构成。主文件是一个可变记录长度的随机文件。文件里的每一个记录描写叙述一个包括多个顶点的shape。在索引文件里,每一个记录内容包括着与主文件里记录相相应的从主文件開始处的偏移量。

dBASE

表中包括着与每一个要素相相应的一条要素属性记录。

几何数据与属性的一一相应关系是基于记录号来相应的。dBASE 文件里属性记录的顺序必须与主文件里的记录顺序同样。

2、java实现shape文件的读取

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.database.Cursor;

import android.os.Environment;

import android.widget.Toast;

public class ReadShapeFile_DAL {

//分别用于存放shp文件和dbs文件。要求一一相应

private List g_shpFileName;

private List g_dbfFileName;

private List g_shpAndDbfFiles;

private Activity g_at;

private String SDPATH;//离线矢量文件存储路径

public ReadShapeFile_DAL()

{

}

public void SetSDPath(String _path)

{

SDPATH=_path;

}

/**

* 推断机器中是否有存储卡

* @return

*/

private static boolean haveSDCARD() {

String status = Environment.getExternalStorageState();

if (status.equals(Environment.MEDIA_MOUNTED))

{

return true;

}

else

{

return false;

}

}

//读取文件夹中的.shp和.dbf文件

public boolean ListFile(Activity _at)

{

boolean flag=false;

g_at=_at;

g_shpFileName=new ArrayList();

g_dbfFileName=new ArrayList();

g_shpAndDbfFiles=new ArrayList();

if(haveSDCARD()){

//得到当前外部存储设备的文件夹( /SDCARD )

SDPATH = Environment.getExternalStorageDirectory() + "/LandMonitoringCollectionSystem";

}else{

//手机中文件放置路径

SDPATH = "/data/data/featuredata";

}

try

{

File dirs = new File(SDPATH);

File [] filenames=dirs.listFiles();

if(filenames.length==0)

{

return flag;

}

else

{

for(int i =0;i

{

File file = filenames[i];

if(file.isFile())

{

if(file.getName().endsWith(".shp"))

{

g_shpFileName.add(file);

}

else

{

if(file.getName().endsWith(".dbf"))

{

g_dbfFileName.add(file);

}

}

}

}

}

//推断矢量文件是否存在

if(g_shpFileName.size()<1)

{

Toast.makeText(g_at, "数据读取失败,请确定离线数据存在",Toast.LENGTH_SHORT).show();

return false;

}

else

{

g_shpAndDbfFiles=fileConfig(g_shpFileName,g_dbfFileName);

}

if(shpDataInsert())

return true;

}

catch(Exception e)

{

e.printStackTrace();

g_shpAndDbfFiles=new ArrayList();

Toast.makeText(g_at,"数据读取失败,请确定离线数据存储的文件夹正确",Toast.LENGTH_SHORT).show();

}

return flag;

}

private boolean shpDataInsert()

{

boolean flag=true;

DataTableManagement g_myTableExcute=new DataTableManagement(g_at);

//在此删除全部的矢量数据表

String selectsql = "select * from sqlite_master";

g_myTableExcute = new DataTableManagement(g_at);

Cursor cs = g_myTableExcute.excuteCursorTable(selectsql);

while(cs.moveToNext())

{

String tableName = cs.ge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值