Shapefile文件Word文档下载推荐.docx
《Shapefile文件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Shapefile文件Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
![Shapefile文件Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/27/75e03240-fd78-4036-afc4-46293e8cbe10/75e03240-fd78-4036-afc4-46293e8cbe101.gif)
publicstaticvoidmain(String[]args){
try{
//第一步:
我们需要给出连接Shapefile文件的参数
//并且把这些参数信息组织到一个Map实例中
URLurl=newFile("
您的shapefile文件,以.shp结尾"
).toURI().toURL();
Mapparams=newHashMap();
params.put("
url"
url);
//还可以加入其他参数,这里以最简单的形式给出示例。
//第二步:
根据刚才参数的信息,打开一个连接到Shapefile文件的数据源
DataStoredataStore=DataStoreFinder.getDataStore(params);
//从dataStore中获取Shapefile类型名称。
//Shapefile文件名称和Shapefile类型名称通常是一样的。
//此处dataStore现在是基于Shapefile创建的,所以TypeName就是Shapefile文件名称。
StringtypeName=dataStore.getTypeNames()[0];
System.out.println("
:
typeNameis"
+typeName);
//第三步:
根据Shapefile类型名称,从dataStore中获取的一个对象
FeatureSourcefeatureSource=dataStore.getFeatureSource(typeName);
FeatureCollectionfeatureCollection=featureSource.getFeatures();
//该FeatureCollection类的实例中存放着0...N个的对象。
FeatureIteratorfeatures=featureCollection.features();
while(features.hasNext()){
//对Layer核心的操作都是针对的是要素的操作。
所以,这里为我们提供了要素。
Featurefeature=features.next();
//我们将Gis看成是一组基于数据的服务,而数据的基础是要素(Feature)。
//所谓要素简单的说就是一个独立的对象,在地图中可能表现为一个多边形的建筑物,
//在数据库中即一个独立的条目。
//要素具有两个必要的组成部分,几何信息和属性信息。
//我们这里每一要素(Feature)类的对象中存放着
//一个几何信息(Geometry)类的对象,和许多属性信息(attributes)。
GeometrydefaultGeometry=feature.getDefaultGeometry();
defaultGeometry:
>
"
+defaultGeometry.toString());
}
//我们也可以获得要素类型。
//何谓要素类型?
相同的几何类型、属性类型的组合成为要素类型.
//要素类型相同的要素可以被存放在一个数据源中,而一个数据源只能拥有一个要素类型。
//因此,可以用要素类型来描述一组属性相似的要素。
FeatureTypefeatureType=featureSource.getSchema();
//打印普通要素
for(inti=0;
i<
featureType.getAttributeCount();
i++){
AttributeTypeattributeType=featureType.getAttributeType(i);
if(!
(attributeTypeinstanceofGeometryAttributeType)){
System.out.print(attributeType.getType().getName()+"
"
);
//打印几何要素
AttributeTypeat=featureType.getAttributeType(i);
if(atinstanceofGeometryAttributeType){
System.out.print(at.getName()+"
//打印前10个要素信息
Iteratoriterator=featureCollection.iterator();
for(intcount=0;
iterator.hasNext();
count++){
Featurefeature=(Feature)iterator.next();
System.out.print(feature.getID()+"
feature.getNumberOfAttributes();
Objectattribute=feature.getAttribute(i);
(attributeinstanceofGeometry)){
System.out.print(attribute+"
System.out.println();
if(count==10)
break;
}finally{
featureCollection.close(iterator);
//最后打印每个Gemetry对象的WKT表示
iterator=featureCollection.iterator();
System.out.println(feature.getDefaultGeometry());
//if(count==10)break;
}catch(Exceptione){
Ops!
Somethingwentwrong
e.printStackTrace();
System.exit(0);
}
(2)Shapefile文件写入
publicstaticvoidmain(String[]args)throwsException{
//第一步:
创建基于Shapefile的数据源。
DataStoreshape=createShapeFile(”example”);
//创建FeatureCollection对象
FeatureCollectionfeatures=createFeatures(shape.getSchema(”example”));
//生成Shapefile文件
writeToShapefile(shape,features);
publicstaticDataStorecreateShapeFile(Stringname){
try{
//创建数据源仓库
FileDataStoreFactorySpifactory=newIndexedShapefileDataStoreFactory();
//创建你要创建的Shapefile文件
Filefile=newFile(”f:
/shp/”+name+“.shp”);
if(!
file.exists()){
file.createNewFile();
//我们需要给出连接Shapefile文件的参数
//并且把这些参数信息组织到一个Map实例中
//注意:
使用file.toURI().toURL()的原因是因为jdk中不赞成使用file.toURL()
Mapmap=Collections.singletonMap(”url”,file.toURI()
.toURL());
//创建一个基于以上参数信息的Shapefile数据源对象
ShapefileDataStoremyData=(ShapefileDataStore)factory
.createDataStore(map);
//标明Shapefile文件中存储的数据的类型是什么:
MultiLineString
//Shapefile可以存储以下数据:
//Point,MultiPoint,MultiLineString,MultiPolygon
FeatureTypefeatureType=DataUtilities.createType(name,
“geom:
MultiLineString”);
//也可以存储其他的数据,比如:
geom:
MultiLineString,FieldName:
java.lang.Integer
//通过’,'
将他们分开。
//创建Shapefile文件
myData.createSchema(featureType);
//标明数据源使用的什么坐标参考系统
myData.forceSchemaCRS(CRS.decode(”EPSG:
4326″));
returnmyData;
}catch(FactoryExceptionfe){
fe.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(SchemaExceptionse){
se.printStackTrace();
returnnull;
publicstaticFeatureCollectioncreateFeatures(FeatureTypefeatureType){
FeatureCollectioncollection=FeatureCollections.newCollection();
GeometryFactorygf=newGeometryFactory();
Coordinatecoord1=newCoordinate(10,10);
Coordinatecoord2=newCoordinate(100,100);
Coordinate[]coords=newCoordinate[2];
coords[0]=coord1;
coords[1]=coord2;
LineStringline=gf.createLineString(coords);
LineString[]lines=newLineString[1];
lines[0]=line;
MultiLineStringmulti=gf.createMultiLineString(lines);
collection.add(featureType.create(newObject[]{multi}));
returncollection;
}catch(IllegalAttributeExceptioniae){
iae.printStackTrace();
publicstaticvoidwriteToShapefile(DataStoredata,
FeatureCollectioncollection){
DefaultTransactiontransaction=null;
FeatureStorestore=null;
String[]featureNames=data.getTypeNames();
StringfeatureName=featureNames[0];
//创建默认的事务对象
transaction=newDefaultTransaction();
//同时标明数据源使用的要素名称,通常Shapefile文件名称和Shapefile类型名称通常是一样的。
store=(FeatureStore)data.getFeatureSource(featureName);
//关联默认事务和数据源
store.setTransaction(transaction);
//增加要素信息到数据源
store.addFeatures(collection);
//提交
mit();
//关闭
transaction.close();
//回滚
transaction.rollback();
}catch(IOExceptione1){
e1.printStackTrace();
ShapeFile格式说明
1、Shape技术描述
一个完整的ESRI的shape文件包括一个主文件,一个索引文件,和一个dBASE表文件。
主文件是一个直接存取,变记录长度文件,其中每个记录描述一个由其顶点列表组成的shape。
在索引文件中,每条记录是在主文件中对应记录距离主文件头部的偏移量。
dBASE中记录的是对应主文件中记录的属性记录,每条主文件记录对应dBASE中的一条属性记录。
几何对象和属性间的一一对应关系是基于记录编号的。
在dBASE文件中的属性记录必须和主文件中的记录保持相同的顺序。
1.1命名习惯
所有文件名都遵循8.3命名习惯。
主文件,索引文件和dBASE文件有相同的前缀。
前缀必须是由字符或数字(a-Z,0-9)开始,后跟0到7个字符(a-Z,0-9,_,)主文件的后缀是.shp,索引文件的后缀是.shx,dBASE表的后缀是.dbf。
在对文件名敏感的操作系统中,文件名中的所有字母都是小写的。
例子:
主文件:
counties.shp
索引文件:
counties.shx
dBASE表:
ounties.dbf
1.2数字类型
Shape格式文件存储整数型和双精度型数据,本文档的余下部分将涉及到以下类型:
整数:
有符号32位整数(4字节)
双精度:
有符号64位IEEE双精度浮点数(8字节)
浮点数必须是数字值。
负无穷,正无穷和无效数字(NaN)在shape文件中是不合法的。
然而,shape文件支持“没有数据”这样的概念,但是目前只用于带有measure值的情况。
所谓Measure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。
某些小于-1038被shape文件读取程序用来表示为“没有数据”的值。
下面的第一节描述shape文件的总体结构和组织。
第二节描述shape文件支持的每种shape类型的记录内容。
2、主文件的组织
主文件(.shp)由固定长度的文件头和后面变长的记录组成。
每个变长记录是由固定长度的记录头和紧接着的变长记录内容组成。
图1是主文件的结构。
图1主文件的结构
文件头
记录头
记录内容
。
字节序
Shape文件中所有的内容可以被分为两种类型:
⏹与数据相关的:
●主文件记录内容
●主文件头的数据描述域(Shape类型,边界盒等)
⏹与文件管理相关的:
●文件和记录长度
●记录偏移量等
在主文件的文件头和记录内容中的描述域中的整型和双精度浮点数据是按照littleendian(PC或Intel)的字节顺序形式组织的。
组成文件的其余部分和文件管理的整数和双精度浮点数是bigendian(Sun或Motorola)字节顺序。
2.1主文件头
主文件头100字节长。
表1描述了文件头中数据的字节位置,值,类型和字节顺序。
在此表中,位置是相对于文件头的。
表1主文件头的描述
位置
字段
值
类型
字节顺序
Byte0
FileCode(文件代码)
9994
Integer
Big
Byte4
Unused
Byte8
Byte12
Byte16
Byte20
Byte24
FileLength(文件长度)
FileLength
Byte28
Version
1000
Little
Byte32
ShapeType
Byte36
BoundingBox
Xmin
Double
Byte44
Ymin
Byte52
Xmax
Byte60
Ymax
Byte68*
Zmin
Byte76*
Zmax
Byte84*
Mmin
Byte92*
Mmax
*是未被使用的域,值为0.0,如果没有measure值或Z轴。
文件长度的值指的是16位字的个数,即文件的字节长度除以2(包括组成文件头的50个16位字)。
在shape文件中的所有非空shape必须是同一种shape类型。
Shape类型的值如下:
Shape类型
NullShape
1
Point
3
PolyLine
5
Polygon
8
MultiPoint
11
PointZ
13
PolyLineZ
15
PolygonZ
18
MultiPointZ
21
PointM
23
PolyLineM
25
PolygonM
28
MultiPointM
31
MultiPatch