• GeoTools应用-DATA


    转自:http://blog.csdn.net/cdl2008sky/article/details/7266785

    一、Geotools The Open Source Java GIS Toolkit

    http://geotools.org/   Geotools官方网站
    http://docs.geotools.org/latest/javadocs/  Geotools API在线文档
    http://docs.codehaus.org/display/GEOTDOC/Home Geotools用户指南
    http://repo.opengeo.org                      Geotools的maven仓库地址
    http://download.osgeo.org/webdav/geotools/      maven仓库地址

    POM.xml配置

    [html] view plaincopy
     
    1. <repositories>  
    2.     <repository>  
    3.         <id>osgeo</id>  
    4.         <name>Open Source Geospatial Foundation Repository</name>  
    5.         <url>http://download.osgeo.org/webdav/geotools/</url>  
    6.     </repository>  
    7.     <repository>  
    8.         <snapshots>  
    9.             <enabled>true</enabled>  
    10.         </snapshots>  
    11.         <id>opengeo</id>  
    12.         <name>OpenGeo Maven Repository</name>  
    13.         <url>http://repo.opengeo.org</url>  
    14.     </repository>  
    15. </repositories>  

    eg:取到gt-main.jar的依赖关系

    [html] view plaincopy
     
    1. <dependency>  
    2.     <groupId>org.geotools</groupId>  
    3.     <artifactId>gt-main</artifactId>  
    4.     <version>8.4</version>  
    5. </dependency>  

    二、OpenGIS 软件架构

    org.geotools.data
    包负责地理数据的读写(如:ShavefileReader用于读取shpfile数据),org.geotools.geometry
    包负责提供对JTs的调用接口,以将地理数据封装成JTS中定义的几何对象(Geometry),
    org.geotools.feature包负责封装空间几何要素对象(Feature),对应于地图中一个实体,
    包含:空间数据(Geometry)、属性数据(Aitribute)、参考坐标系(Refereneedsystem)、
    最小外包矩形(EnveloPe)等属性,是Gls操作的核心数据模型。

    Geotools 读取shp 数据格式的例子:

    [java] view plaincopy
     
    1. /** 
    2.  * 读取shap格式的文件 
    3.  *  
    4.  * @param path 
    5.  */  
    6. public void readSHP(String path) {  
    7.     ShapefileDataStore shpDataStore = null;  
    8.     try {  
    9.         shpDataStore = new ShapefileDataStore(new File(path).toURI()  
    10.                 .toURL());  
    11.         shpDataStore.setStringCharset(Charset.forName("GBK"));  
    12.         // 文件名称  
    13.         String typeName = shpDataStore.getTypeNames()[0];  
    14.         FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = null;  
    15.         featureSource = (FeatureSource<SimpleFeatureType, SimpleFeature>) shpDataStore  
    16.                 .getFeatureSource(typeName);  
    17.         FeatureCollection<SimpleFeatureType, SimpleFeature> result = featureSource  
    18.                 .getFeatures();  
    19.         SimpleFeatureType schema = result.getSchema(); // schema  
    20.         List<AttributeDescriptor> columns = schema  
    21.                 .getAttributeDescriptors();  
    22.         FeatureIterator<SimpleFeature> itertor = result.features();  
    23.         /* 
    24.          * 或者使用 FeatureReader FeatureReader reader = 
    25.          * DataUtilities.reader(result); while(reader.hasNext()){ 
    26.          * SimpleFeature feature = (SimpleFeature) reader.next(); } 
    27.          */  
    28.         while (itertor.hasNext()) {  
    29.             SimpleFeature feature = itertor.next();  
    30.             for (AttributeDescriptor attributeDes : columns) {  
    31.                 String attributeName = attributeDes.getName().toString();// attribute  
    32.                 if (attributeName.equals("the_geom"))  
    33.                     continue;  
    34.                 feature.getAttribute(attributeName); // attributeValue  
    35.             }  
    36.             Geometry g = (Geometry) feature.getDefaultGeometry();// Geometry  
    37.         }  
    38.         itertor.close();  
    39.     } catch (MalformedURLException e) {  
    40.         e.printStackTrace();  
    41.     } catch (IOException e) {  
    42.         e.printStackTrace();  
    43.     }  
    44. }  
    [java] view plaincopy
     
    1. /** 
    2.  * 读取dbf格式的文件,只存储属性值,不存储空间值 
    3.  *  
    4.  * @param path 
    5.  */  
    6. public void readDBF(String path) {  
    7.     DbaseFileReader reader = null;  
    8.     try {  
    9.         reader = new DbaseFileReader(new ShpFiles(path), false,  
    10.                 Charset.forName("GBK"));  
    11.         DbaseFileHeader header = reader.getHeader();  
    12.         int numFields = header.getNumFields();  
    13.         for (int i = 0; i < numFields; i++) {  
    14.             header.getFieldName(i);  
    15.             header.getFieldType(i);// 'C','N'  
    16.             header.getFieldLength(i);  
    17.         }  
    18.   
    19.         // 迭代读取记录  
    20.         while (reader.hasNext()) {  
    21.             try {  
    22.                 Object[] entry = reader.readEntry();  
    23.                 for (int i = 0; i < numFields; i++) {  
    24.                     String title = header.getFieldName(i);  
    25.                     Object value = entry[i];  
    26.                     String name = title.toString(); // column  
    27.                     String info = value.toString(); // value  
    28.                 }  
    29.             } catch (Exception e) {  
    30.                 e.printStackTrace();  
    31.             }  
    32.         }  
    33.     } catch (Exception ex) {  
    34.         ex.printStackTrace();  
    35.     } finally {  
    36.         if (reader != null) {  
    37.             // 关闭  
    38.             try {  
    39.                 reader.close();  
    40.             } catch (Exception e) {  
    41.             }  
    42.         }  
    43.     }  
    44. }  

    输出一个shp文件

    [java] view plaincopy
     
    1. /** 
    2.  * 创建shp文件 
    3.  *  
    4.  * @param outPath 
    5.  */  
    6. public void createShp(String outPath) {  
    7.     try {  
    8.         // 定义属性  
    9.         final SimpleFeatureType TYPE = DataUtilities.createType("Location",  
    10.                 "location:Point," + "NAME:String," + "INFO:String,"  
    11.                         + "OWNER:String");  
    12.         FeatureCollection<SimpleFeatureType, SimpleFeature> collection = FeatureCollections.newCollection();  
    13.         GeometryFactory geometryFactory = new GeometryFactory();  
    14.         SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);  
    15.         double latitude = Double.parseDouble("116.123456789");  
    16.         double longitude = Double.parseDouble("39.120001");  
    17.         String NAME = "运通110路";  
    18.         String INFO = "白班车,学生票有效";  
    19.         String OWNER = "001";  
    20.         //创建坐标  
    21.         Point point = geometryFactory.createPoint(new Coordinate(longitude,latitude));  
    22.         //创建属性值  
    23.         Object[] obj = {point, NAME, INFO, OWNER };  
    24.         //构造一个Feature  
    25.         SimpleFeature feature = featureBuilder.buildFeature(null, obj);  
    26.         //添加到集合  
    27.         collection.add(feature);  
    28.         // shap文件的输出路径  
    29.         File newFile = new File(outPath);  
    30.         Map<String, Serializable> params = new HashMap<String, Serializable>();  
    31.         params.put("url", (Serializable) newFile.toURI().toURL());  
    32.         params.put("create spatial index", (Serializable) Boolean.TRUE);  
    33.         ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();  
    34.         ShapefileDataStore newDataStore = (ShapefileDataStore) dataStoreFactory  
    35.                 .createNewDataStore(params);  
    36.         newDataStore.createSchema(TYPE);  
    37.         newDataStore.setStringCharset(Charset.forName("GBK"));  
    38.         newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);  
    39.         String typeName = newDataStore.getTypeNames()[0];  
    40.         ShapefileFeatureLocking featureSource = (ShapefileFeatureLocking) newDataStore  
    41.                 .getFeatureSource(typeName);  
    42.         // 创建一个事务  
    43.         Transaction transaction = new DefaultTransaction("create");  
    44.         featureSource.setTransaction(transaction);  
    45.         try {  
    46.             featureSource.addFeatures(collection);  
    47.             // 提交事务  
    48.             transaction.commit();  
    49.         } catch (Exception problem) {  
    50.             problem.printStackTrace();  
    51.             transaction.rollback();  
    52.         } finally {  
    53.             transaction.close();  
    54.         }  
    55.     } catch (Exception e) {  
    56.         e.printStackTrace();  
    57.     }  
    58. }  


    org.geotools.data.DataUtilities
    a facade classes which can help simplify common data wrangling chores  简化繁琐的通用数据
    (1)、定义属性
    FeatureType TYPE = DataUtilities.createType("Location",
    "location:Point," + "NAME:String," + "INFO:String,"+ "OWNER:String");

    (2) DataUtilities.schema
    You can use this method to quickly get a representation of a FeatureType  返回FeatureType的schema
    //返回schema
    DataUtilities.spec(featureType))

    (3) DataUtilities.collection   Feature数组转换为Feature集合
    DataUtilities has helper methods to turn almost anything into a FeatureCollection
    Feature[] array; 
    ....
    return DataUtilties.collection( array );

    (4) DataUtilities.reader 格式化
    convert a perfectly good collection to  FeatureReader format.
    FeatureCollection collection;
    FeatureReader reader = DataUtilities.reader( collection );

    附:shp 格式文件介绍
    Shapefile file extensions
    .shp—The main file that stores the feature geometry. Required.
    .shx—The index file that stores the index of the feature geometry. Required.
    .dbf—The dBASE table that stores the attribute information of features. Required.There is a one-to-one relationship between geometry and attributes, which is based on record number.
    .prj—The file that stores the coordinate system information. Used by ArcGIS.

    DBF文件中的数据类型FieldType
    代码 数据类型 允许输入的数据
    B  二进制型 各种字符。
    C  字符型   各种字符。
    D  日期型   用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。
    G  (Generalor OLE)    各种字符。
    N   数值型(Numeric)    - . 0 1 2 3 4 5 6 7 8 9
    L   逻辑型(Logical)? Y y N n T t F f (? 表示没有初始化)。
    M   (Memo)   各种字符。

  • 相关阅读:
    第四章——不定积分必记公式
    高等数学思维导图——4.一元函数积分学【不定积分+定积分】
    算法很美(三)
    第三章——微分中值定理与导数必记公式
    详解洛必达法则
    高等数学思维导图——3.微分中值定理与导数的应用
    Python课程笔记(二)
    第二章——导数与微分必记公式
    高等数学思维导图——2.导数与微分
    第二章.给客户所需之物
  • 原文地址:https://www.cnblogs.com/cugwx/p/3719282.html
Copyright © 2020-2023  润新知