小马看GIS--Shapefile文件解析(一)

本文由Shapefile文件介绍和Shapefile文件解析(文件读取、文件写入)构成。转载请注明出处。

1.Shapefile文件介绍         shapefile是一种基于文件方式存储GIS数据的文件格式,是GIS中比较通用的一种数据格式。至少由.shp,.dbf,.shx三个文件组成:

  • .shp--储存地理要素的几何关系的文件
  • .shx--储存图形要素的几何索引的文件
  • .dbf--储存要素属性信息的dBase文件

            有时候还会出现一下文件:

  • .shn--当执行类似选择“主题之主题”,“空间连接”等操作,或者对一个主题(属性表)的shape字段创建过一个索引,就会出现这个文件
  • .ain和.aih--储存地理要素主体属性表或 其他表格的活动字段的属性索引信息的文件。当之行过“表格链接(link)操作,这两个文件就会出现。

    2.Shapefile文件解析

     (1)文件读取

  •  

    public static void main(String[] args) {
    	try {
    		// 第一步:我们需要给出连接Shapefile文件的参数
    		// 并且把这些参数信息组织到一个Map实例中
    		URL url = new File("您的shapefile文件,以.shp结尾").toURI().toURL();
    		Map params = new HashMap();
    		params.put("url", url);
    		// 还可以加入其他参数,这里以最简单的形式给出示例。
    		// 第二步:根据刚才参数的信息,打开一个连接到Shapefile文件的数据源
    		DataStore dataStore = DataStoreFinder.getDataStore(params);
    		// 从dataStore中获取Shapefile类型名称。
    		// Shapefile文件名称和Shapefile类型名称通常是一样的。
    		// 此处dataStore现在是基于Shapefile创建的, 所以TypeName就是Shapefile文件名称。
    		String typeName = dataStore.getTypeNames()[0];
    		System.out.println("::::typeName is " + typeName);
    		// 第三步:根据Shapefile类型名称,从dataStore中获取
     
     
      
      的一个对象
    		FeatureSource featureSource = dataStore.getFeatureSource(typeName);
    		FeatureCollection featureCollection = featureSource.getFeatures();
    		// 该FeatureCollection类的实例中存放着0...N个
      
      
       
       的对象。
    		FeatureIterator features = featureCollection.features();
    		while (features.hasNext()) {
    			// 对Layer核心的操作都是针对的是要素的操作。所以,这里为我们提供了要素。
    			Feature feature = features.next();
    			// 我们将Gis看成是一组基于数据的服务,而数据的基础是要素(Feature)。
    			// 所谓要素简单的说就是一个独立的对象,在地图中可能表现为一个多边形的建筑物,
    			// 在数据库中即一个独立的条目。
    			// 要素具有两个必要的组成部分,几何信息和属性信息。
    			// 我们这里每一要素(Feature)类的对象中存放着
    			// 一个几何信息(Geometry)类的对象,和许多属性信息(attributes)。
    			Geometry defaultGeometry = feature.getDefaultGeometry();
    			System.out.println("defaultGeometry:::::>>>>>:"
    					+ defaultGeometry.toString());
    		}
    		// 我们也可以获得要素类型。
    		// 何谓要素类型?相同的几何类型、属性类型的组合成为要素类型.
    		// 要素类型相同的要素可以被存放在一个数据源中,而一个数据源只能拥有一个要素类型。
    		// 因此,可以用要素类型来描述一组属性相似的要素。
    		FeatureType featureType = featureSource.getSchema();
    		// 打印普通要素
    		for (int i = 0; i < featureType.getAttributeCount(); i++) {
    			AttributeType attributeType = featureType.getAttributeType(i);
    			if (!(attributeType instanceof GeometryAttributeType)) {
    				System.out.print(attributeType.getType().getName() + " ");
    			}
    		}
    		// 打印几何要素
    		for (int i = 0; i < featureType.getAttributeCount(); i++) {
    			AttributeType at = featureType.getAttributeType(i);
    			if (at instanceof GeometryAttributeType) {
    				System.out.print(at.getName() + " ");
    			}
    		}
    		// 打印前10个要素信息
    		Iterator iterator = featureCollection.iterator();
    		try {
    			for (int count = 0; iterator.hasNext(); count++) {
    				Feature feature = (Feature) iterator.next();
    				System.out.print(feature.getID() + " ");
    				for (int i = 0; i < feature.getNumberOfAttributes(); i++) {
    					Object attribute = feature.getAttribute(i);
    					if (!(attribute instanceof Geometry)) {
    						System.out.print(attribute + " ");
    					}
    				}
    				System.out.println();
    				if (count == 10)
    					break;
    			}
    		} finally {
    			featureCollection.close(iterator);
    		}
    		// 最后打印每个Gemetry对象的WKT表示
    		iterator = featureCollection.iterator();
    		try {
    			for (int count = 0; iterator.hasNext(); count++) {
    				Feature feature = (Feature) iterator.next();
    				System.out.print(feature.getID() + " ");
    				System.out.println(feature.getDefaultGeometry());
    				System.out.println();
    				// if (count== 10) break;
    			}
    		} finally {
    			featureCollection.close(iterator);
    		}
    	} catch (Exception e) {
    		System.out.println("Ops! Something went wrong :-(");
    		e.printStackTrace();
    	}
    	System.exit(0);
    }
       
       
    
      
      
     
     
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
GIS shape文件之中国数据库 SHAPEFILE_OF_CHINA ..................\Lambert ..................\.......\chinamap.mxd ..................\.......\hillshade_10k ..................\.......\.............\dblbnd.adf ..................\.......\.............\hdr.adf ..................\.......\.............\metadata.xml ..................\.......\.............\prj.adf ..................\.......\.............\sta.adf ..................\.......\.............\vat.adf ..................\.......\.............\w001001.adf ..................\.......\.............\w001001x.adf ..................\.......\hillshade_10k.aux ..................\.......\hillshade_10k.rrd ..................\.......\info ..................\.......\....\arc.dir ..................\.......\....\arc0000.dat ..................\.......\....\arc0000.nit ..................\.......\....\arc0001.dat ..................\.......\....\arc0001.nit ..................\.......\....\arc0002.dat ..................\.......\....\arc0002.nit ..................\.......\....\arc0002r.001 ..................\.......\中国县界.dbf ..................\.......\中国县界.prj ..................\.......\中国县界.sbn ..................\.......\中国县界.sbx ..................\.......\中国县界.shp ..................\.......\中国县界.shx ..................\.......\中国地州界.dbf ..................\.......\中国地州界.prj ..................\.......\中国地州界.sbn ..................\.......\中国地州界.sbx ..................\.......\中国地州界.shp ..................\.......\中国地州界.shx ..................\.......\中国湖泊.dbf ..................\.......\中国湖泊.prj ..................\.......\中国湖泊.sbn ..................\.......\中国湖泊.sbx ..................\.......\中国湖泊.shp ..................\.......\中国湖泊.shp.xml ..................\.......\中国湖泊.shx ..................\.......\主要公路.dbf ..................\.......\主要公路.prj ..................\.......\主要公路.sbn ..................\.......\主要公路.sbx ..................\.......\主要公路.shp ..................\.......\主要公路.shx ..................\.......\主要河流.dbf ..................\.......\主要河流.prj ..................\.......\主要河流.sbn ..................\.......\主要河流.sbx ..................\.......\主要河流.shp ..................\.......\主要河流.shx ..................\.......\主要铁路.dbf ..................\.......\主要铁路.prj ..................\.......\主要铁路.sbn ..................\.......\主要铁路.sbx ..................\.......\主要铁路.shp ..................\.......\主要铁路.shx ..................\.......\全国县级统计数据.dbf ..................\.......\全国县级统计数据.prj ..................\.......\全国县级统计数据.sbn ..................\.......\全国县级统计数据.sbx ..................\.......\全国县级统计数据.shp ..................\.......\全国县级统计数据.shp.xml ..................\.......\全国县级统计数据.shx ..................\.......\县城驻地.dbf ..................\.......\县城驻地.prj ..................\.......\县城驻地.sbn ..................\.......\县城驻地.sbx ..................\.......\县城驻地.shp ..................\.......\县城驻地.shx ..................\.......\国界线.dbf ..................\.......\国界线.prj ..................\.......\国界线.sbn ..................\.......\国界线.sbx ..................\.......\国界线.shp ..................\.......\国界线.shp.xml ..................\.......\国界线.shx ..................\.......\地级城市驻地.dbf ..................\.......\地级城市驻地.prj ..................\.......\地级城市驻地.sbn ..................\.......\地级城市驻地.sbx ..................\.......\地级城市驻地.shp ..................\.......\地级城市驻地.shx ..................\.......\省会城市.dbf ..................\.......\省会城市.prj ..................\.......\省会城市.sbn ..................\.......\省会城市.sbx ..................\.......\省会城市.shp ..................\.......\省会城市.shx ..................\.......\省级行政区.dbf ..................\.......\省级行政区.prj ..................\.......\省级行政区.sbn ..................\.......\省级行政区.sbx ..................\.......\省级行政区.shp ..................\.......\省级行政区.shx ..................\.......\线状县界.dbf ..................\.......\线状县界.prj
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值