`
linyang2903
  • 浏览: 9163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GeoTools对PostGis的操作

阅读更多
*
* POSTGEO
*/
package com.geotools.test;

/** *//**
*
* CopyRight (C) All rights reserved.
* <p>
*
* WuHan Inpoint Information Technology Development,Inc.
* <p>
*
* Author sinoly
* <p>
* Project Name: PostGeo
*
* @version 1.0 2006-11-13
*
* <p>
* Base on : JDK1.5
* <p>
*
*/
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;

import org.apache.log4j.Logger;
import org.geotools.data.FeatureReader;
import org.geotools.data.FeatureResults;
import org.geotools.data.FeatureSource;
import org.geotools.data.FeatureStore;
import org.geotools.data.FeatureWriter;
import org.geotools.data.postgis.PostgisDataStore;
import org.geotools.data.postgis.PostgisDataStoreFactory;
import org.geotools.factory.FactoryRegistryException;
import org.geotools.feature.AttributeType;
import org.geotools.feature.AttributeTypeFactory;
import org.geotools.feature.Feature;
import org.geotools.feature.FeatureType;
import org.geotools.feature.FeatureTypeFactory;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import org.geotools.geometry.Geometry;

import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;

public class GetPostgisData {
    private static final Logger LOGGER = Logger.getLogger("org.geotools.postgis");

    static PostgisDataStore pgDatastore;
    static PostgisDataStoreFactory factory=new PostgisDataStoreFactory();
    static FeatureSource fsBC;
    @SuppressWarnings("unchecked")
    private static void ConnPostGis(String dbtype,String URL,int port,String database,
        String user,String password){
        Map params = new HashMap();
        params.put("dbtype", "postgis");
        params.put("host", URL);
        params.put("port", new Integer(port));
        params.put("database", database);
        params.put("user", user);
        params.put("passwd", password);       
        try {
            pgDatastore=(PostgisDataStore) factory.createDataStore( params );
            if(pgDatastore!=null){
                System.out.println("系统连接到位于:"+URL+"的空间数据库"+database+"成功!");
            }else{
                System.out.println("系统连接到位于:"+URL+"的空间数据库"+database+"失败!请检查相关参数");
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("系统连接到位于:"+URL+"的空间数据库"+database+"失败!请检查相关参数");
        }
    }

    //读取指定类型名的地理特征
    public static void getFeatureSource(String sourceName){
        try {
            fsBC = pgDatastore.getFeatureSource(sourceName);
            //System.out.println(fsBC.getFeatures().size());
        } catch (IOException e) {
            e.printStackTrace();
        }       
    }
    //取得POSTGIS中所有的地理图层
    public static void getAllLayers(){
        try {
            String[] typeName = pgDatastore.getTypeNames();
            for(int i=0;i<typeName.length;i++){
                System.out.println(typeName[i]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取图层地理元素属性(Feature Attribute)
    public static void getAttribute(){
        FeatureType ftBC=fsBC.getSchema();
        System.out.println(ftBC.getAttributeCount());
        for (int i = 0; i < ftBC.getAttributeCount(); i++) {
            AttributeType at = ftBC.getAttributeType( i );
            //判断属性类型是否为可分配的几何对象
            if (!Geometry.class.isAssignableFrom(at.getType()))
                System.out.print(at.getType() + "\t");
        }
        System.out.println();
        for (int i = 0; i < ftBC.getAttributeCount(); i++) {
            AttributeType at = ftBC.getAttributeType( i );
            if (!Geometry.class.isAssignableFrom(at.getType()))
                System.out.print(at.getName() + "\t");
        }
    }
   
    //从数据容器中读取所有的特征属性
    @SuppressWarnings("deprecation")
    public static void PostGisReading(){
        try {
            FeatureResults fsRU = fsBC.getFeatures();
            FeatureReader reader = fsRU.reader();
            while (reader.hasNext()) {
                Feature feature;
                try {
                    feature = reader.next();
                    System.out.print(feature.getID() + "\t");
                    for (int i = 0; i < feature.getNumberOfAttributes(); i++) {
                        Object attribute = feature.getAttribute( i );
                        if (!(attribute instanceof Geometry))
                            System.out.print(attribute + "\t");
                    }
                    System.out.println();
                } catch (NoSuchElementException e) {
                    e.printStackTrace();
                } catch (IllegalAttributeException e) {
                    e.printStackTrace();
                }
            }
            reader.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
   
    //添加特征值到新的特征对象中。等同于新建一个postgis数据表并向其中插入数据
    @SuppressWarnings("deprecation")
    public static void createFeatures(){
        try {
            AttributeType geom = AttributeTypeFactory.newAttributeType("the_geom",LineString.class);
            AttributeType name = AttributeTypeFactory.newAttributeType("name",String.class);
            FeatureType ftRoad = FeatureTypeFactory.newFeatureType
                                (new AttributeType[] {geom,name}, "tem_road");
            WKTReader wktReader = new WKTReader();
            try {
                LineString geometry = (LineString) wktReader.read("LINESTRING (0 0, 10 10)");
                String roadName="武络路";
                pgDatastore.createSchema(ftRoad);
                FeatureWriter aWriter = pgDatastore.getFeatureWriter("tem_road",
                        ((FeatureStore) pgDatastore.getFeatureSource("tem_road")).getTransaction());
                /** *//**如有批量导入数据要求,可使用 org.geotools.data.FeatureStore */
                Feature aNewFeature = aWriter.next();
                aNewFeature.setAttribute("the_geom",geometry);
                aNewFeature.setAttribute("name", roadName);
                aWriter.write();
                aWriter.close();
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (IllegalAttributeException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FactoryRegistryException e) {
            e.printStackTrace();
        } catch (SchemaException e) {
            e.printStackTrace();
        }
    }
   
    //添加Feature到已知的图层之中
    public static void insertFeatures(String featurename){
        WKTReader wktReader = new WKTReader();
        try {
            LineString geometry = (LineString) wktReader.read("LINESTRING (10 10, 20 20)");
            String roadName="珞瑜路";
            FeatureSource source = pgDatastore.getFeatureSource(featurename);
            FeatureWriter aWriter = pgDatastore.getFeatureWriterAppend(featurename,((FeatureStore) source).getTransaction());
            /** *//**如有批量导入数据要求,可使用 org.geotools.data.FeatureStore */
            Feature feature = aWriter.next();
            try {
                feature.setAttribute("the_geom",geometry);
                feature.setAttribute("name", roadName);
            } catch (IllegalAttributeException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
            aWriter.write();
            aWriter.close();
        } catch (ParseException e1) {
            // TODO 自动生成 catch 块
            e1.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }

    }
   
    public static void main(String[] args) throws IOException{
        ConnPostGis("","localhost",5432,"navigation","root","to0124@c");
        /**//*读取空间库中所有图层*/
        getAllLayers();
        /**//*读取roads图层的空间库,取得FeatureSource对象,
         * getAttribute()方法用于读取此图层所定义的所有的属性
         * 并通过PostGisReading()方法读取此图层中所有信息*/
        getFeatureSource("roads");
        getAttribute();
        PostGisReading();
        /**//*在空间库中新建一个schema并向表中插入数据*/
        createFeatures();
        /**//*向tem_road图层的空间库中插入一条新的记录*/
        insertFeatures("tem_road");
        /**//*修改空间库记录*/
    }
}
分享到:
评论

相关推荐

    geotools系列2-读取postgis

    本篇文章将深入探讨“geotools系列2-读取postgis”的主题,旨在帮助开发者了解如何使用GeoTools库来有效地操作和读取存储在PostGIS数据库中的地理信息。 PostGIS是PostgreSQL数据库的一个扩展,它为地理空间数据...

    Geotools Java API 开发gis的参考资料

    org.geotools.data.postgis.attributeio org.geotools.data.postgis.collection org.geotools.data.postgis.fidmapper org.geotools.data.postgis.referencing org.geotools.data.property org.geotools.data....

    geotools依赖.rar

    4. **JDBC 驱动**:GeoTools支持多种数据库系统,如PostGIS,MySQL等,需要相应的JDBC驱动来连接和操作这些数据库中的空间数据。 5. **SIS (Spatial Information System)**:由Apache提供的库,为GeoTools提供了元...

    geotools18.4开发离线jar包

    3. **几何对象操作**:GeoTools包含了对点、线、面等基本几何对象的创建、修改和分析功能,能够进行复杂的空间关系判断和几何操作。 4. **地图渲染**:GeoTools可以将地理数据渲染成地图,支持多种输出格式,如PNG...

    geotools18.1依赖jar包

    1. 数据读取与写入:GeoTools支持多种GIS数据格式,如ESRI Shapefile、GeoTIFF、GML、KML、WFS、PostGIS数据库等,能够方便地进行数据导入导出操作。 2. 地图渲染:GeoTools可以将地理数据渲染成地图,支持多种地图...

    geoTools所需jar包

    GeoTools是一个开源的Java库,专门用于处理地理空间数据和执行与GIS(地理信息系统)相关的操作。这个"geoTools所需jar包"包含了经过编译和打包的GeoTools库,使得开发者可以直接在他们的项目中使用,而无需经历繁琐...

    geotools所需jar包合集

    接着,使用`org.geotools.feature.FeatureSource`和`org.geotools.feature.FeatureCollection`来访问和操作特征数据。 在开发过程中,确保正确配置坐标参考系,避免因坐标转换错误导致的问题。同时,注意使用合适的...

    geotools相关jar包

    5. 数据库连接:GeoTools支持与多种关系型数据库(如PostGIS)和NoSQL数据库(如MongoDB)的连接,可以直接查询和操作存储在其中的空间数据。 6. 功能强大的API:GeoTools提供了丰富的API,包括几何对象、投影、...

    geotools学习指南

    GeoTools学习指南 GeoTools是一款功能强大的开源GIS(Geographic Information System)工具包,提供了丰富的API和插件,帮助开发者快速构建GIS应用程序。在本指南中,我们将详细介绍GeoTools的基本概念、库函数、...

    geotools相关jar包集合

    这个压缩包文件“geotools-18.4”包含了`geotools`库的一个特定版本,即18.4,这将对那些需要在项目中使用`geotools`功能的开发者非常有用。 `geotools`库的核心目标是实现OGC(开放地理空间联盟)标准,这些标准...

    geotools 地理编码工具类

    geotools提供的地理编码工具类,不仅能够进行地址转换,还能对这些坐标点进行更高级的空间操作,比如判断点是否位于特定区域内。 在描述中提到,geotools可以用于判断经纬度点是否在特定区域内。这一功能的实现依赖...

    postgis矢量瓦片.zip

    PostGIS不仅能够存储、查询和分析地理位置数据,还支持复杂的地理空间操作,是地理信息系统(GIS)领域的重要工具。"矢量瓦片"则是现代Web地图服务中广泛使用的一种数据分发形式。 矢量瓦片技术将地图数据分割成...

    geotools-26.1-bin.zip

    - **数据支持**:GeoTools支持多种数据格式,如Shapefile、GeoTIFF、GML、KML等,以及多种数据库系统,如PostGIS、Oracle Spatial等。 - **地图渲染**:GeoTools提供了丰富的地图渲染功能,可以将地理数据转化为...

    GeoTools是一个开源的Java库提供地理空间数据工具

    2. 坐标系统转换:GeoTools包含对多种坐标系统的支持,包括UTM、经纬度、国家平面坐标系等,可以方便地进行坐标转换,确保不同来源的数据可以在同一空间参考系下进行操作。 3. 图形渲染:该库提供了丰富的图形绘制...

    geoserver源码和geotools

    5. **Geotools模块**:查看Geoserver如何使用Geotools进行数据处理和空间操作。 **Maven在构建过程中的角色** Maven是一个项目管理工具,负责自动化构建、依赖管理和项目信息管理。在Geoserver项目中,Maven负责...

    geotools工具

    4. **WMS和WFS客户端**:`GeoTools`提供对OGC WMS和WFS的客户端实现,允许应用获取和操作远程GIS服务的数据。 5. **SOS客户端**:对于需要处理传感器数据的应用,`GeoTools`的SOS客户端支持查询和订阅传感器观测...

    geotools-23.0-project

    3. 数据库连接:GeoTools可以连接到多种GIS数据库,如PostGIS、Oracle Spatial、MySQL等,进行数据交互。 4. WMS和WFS服务:GeoTools实现了OGC的Web Map Service (WMS) 和 Web Feature Service (WFS),允许客户端...

    geotools-18.1

    GeoTools 18.1提供了丰富的数据处理工具,包括读取和写入多种矢量和栅格数据格式,如Shapefile、GeoTIFF、PostGIS数据库等。它还支持OGC的SFS(Simple Feature Specification),使得处理几何对象(点、线、多边形...

    geotools-18.1.zip

    3. 数据存储:GeoTools通过JDBC或ODBC接口与关系数据库(如PostgreSQL/PostGIS)连接,支持读写地理空间数据。此外,它还支持GeoPackage和SQLite等轻量级数据库。 4. 地图渲染:GeoTools可以将地理数据转换为地图...

Global site tag (gtag.js) - Google Analytics