zoukankan      html  css  js  c++  java
  • 基于GeoTools做GeoJson,PostGIS,Shapefile的转换

    github:https://github.com/yieryi/geotools4postgis/
    下面的geojson导入postgis,shp导入postgis,postgis导出shp,postgis导出geojson已经封装好在GitHub上。maven里导入对应的jar(复制pom相应代码),复制PostgisUtility.java和PostgisDataStore.java文件,就可以按照app.java里的方式调用这两个类文件里封装完的四个方法。这四个方法代码如下: 
    validateshp,validategeojson方法为验证路径有效性,可不调用或者自己判断,否则java可能会报文件路径异常 
    转载请说明来源。shp文件导入到postgis数据库中

       public static boolean importShp(String shppath, String tablename) throws IOException {
            if (!validateShp(shppath, true)) return false;
            DataStore pgDatastore = postgisDataStore.getInstance();
            ShapefileDataStore shapefileDataStore = null;
            shapefileDataStore = new ShapefileDataStore(new File(shppath).toURI().toURL());
            shapefileDataStore.setCharset(Charset.forName("utf-8"));
            FeatureSource featureSource = shapefileDataStore.getFeatureSource();
            FeatureCollection featureCollection = featureSource.getFeatures();
            SimpleFeatureType shpfeaturetype = shapefileDataStore.getSchema();
            SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
            typeBuilder.init(shpfeaturetype);
            typeBuilder.setName(tablename);
            SimpleFeatureType newtype = typeBuilder.buildFeatureType();
            pgDatastore.createSchema(newtype);
            logger.info("
    postgis创建数据表成功");
     
            FeatureIterator iterator = featureCollection.features();
            FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = pgDatastore.getFeatureWriterAppend(tablename, Transaction.AUTO_COMMIT);        while (iterator.hasNext()) {
                Feature feature = iterator.next();
                SimpleFeature simpleFeature = featureWriter.next();
                Collection<Property> properties = feature.getProperties();
                Iterator<Property> propertyIterator = properties.iterator();
                while (propertyIterator.hasNext()) {
                    Property property = propertyIterator.next();
                    simpleFeature.setAttribute(property.getName().toString(), property.getValue());
                }
                featureWriter.write();
            }
            iterator.close();
            featureWriter.close();
            shapefileDataStore.dispose();
            pgDatastore.dispose();
            logger.info("
    shp导入postgis成功");
            return true;
        }

    把geojson格式数据导入到postgsi,存储坐标和所有属性

    public static boolean importGeojson(String geojsonpath, String tablename) throws IOException {
            if (!validateGeojson(geojsonpath, true)) return false;
            DataStore pgDatastore = postgisDataStore.getInstance();
            FeatureJSON featureJSON = new FeatureJSON();
            FeatureCollection featureCollection = featureJSON.readFeatureCollection(new FileInputStream(geojsonpath));
            SimpleFeatureType geojsontype = (SimpleFeatureType) featureCollection.getSchema();
            SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
            typeBuilder.init(geojsontype);
            typeBuilder.setName(tablename);
            SimpleFeatureType newtype = typeBuilder.buildFeatureType();
            pgDatastore.createSchema(newtype);
     
            FeatureIterator iterator = featureCollection.features();
            FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = pgDatastore.getFeatureWriterAppend(tablename, Transaction.AUTO_COMMIT);        while (iterator.hasNext()) {
                Feature feature = iterator.next();
                SimpleFeature simpleFeature = featureWriter.next();
                Collection<Property> properties = feature.getProperties();
                Iterator<Property> propertyIterator = properties.iterator();
                while (propertyIterator.hasNext()) {
                    Property property = propertyIterator.next();
                    simpleFeature.setAttribute(property.getName().toString(), property.getValue());
                }
                featureWriter.write();
            }
            iterator.close();
            featureWriter.close();
            pgDatastore.dispose();
            return true;
        }

    导出postgis数据库中的指定矢量表为shp文件

    public static boolean exportShp(String tablename, String shpPath) throws IOException, FactoryException {
            DataStore pgDatastore = postgisDataStore.getInstance();
            FeatureSource featureSource = pgDatastore.getFeatureSource(tablename);
            FeatureCollection featureCollection = featureSource.getFeatures();
            FeatureIterator<SimpleFeature> iterator = featureCollection.features();
            SimpleFeatureType pgfeaturetype = pgDatastore.getSchema(tablename);
            File file = new File(shpPath);
     
            if (!validateShp(shpPath, false)) return false;
     
            Map<String, Serializable> params = new HashMap<String, Serializable>();
            params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
            ShapefileDataStore shpDataStore = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
            String srid = pgfeaturetype.getGeometryDescriptor().getUserData().get("nativeSRID").toString();
            SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
            typeBuilder.init(pgfeaturetype);
            if (!srid.equals("0")) {
                CoordinateReferenceSystem crs = CRS.decode("EPSG:" + srid, true);
                typeBuilder.setCRS(crs);
            }
            pgfeaturetype = typeBuilder.buildFeatureType();
            shpDataStore.setCharset(Charset.forName("utf-8"));
            shpDataStore.createSchema(pgfeaturetype);
     
            FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = shpDataStore.getFeatureWriter(shpDataStore.getTypeNames()[0], AUTO_COMMIT);
     
            while (iterator.hasNext()) {
                Feature feature = iterator.next();
                SimpleFeature simpleFeature = featureWriter.next();
                Collection<Property> properties = feature.getProperties();
                Iterator<Property> propertyIterator = properties.iterator();
     
                while (propertyIterator.hasNext()) {
                    Property property = propertyIterator.next();
                    if (geomfield(property.getName().toString())) {
                        simpleFeature.setAttribute("the_geom", property.getValue());
                        continue;
                    }
                    simpleFeature.setAttribute(property.getName().toString(), property.getValue());
                }
                featureWriter.write();
            }
            iterator.close();
            featureWriter.close();
            pgDatastore.dispose();
            return true;
        }

    导出postgis数据库中的指定矢量表为geojson文件

    public static boolean exportGeojson(String tablename, String geojsonPath) throws IOException, FactoryException {
            DataStore pgDatastore = postgisDataStore.getInstance();
            FeatureSource featureSource = pgDatastore.getFeatureSource(tablename);
            FeatureCollection featureCollection = featureSource.getFeatures();
            FeatureJSON featureJSON = new FeatureJSON();
            File file = new File(geojsonPath);
            if (!file.exists()) {
                file.createNewFile();
            }
            OutputStream outputStream = new FileOutputStream(file, false);
            featureJSON.writeFeatureCollection(featureCollection, outputStream);
            pgDatastore.dispose();
            return true;
        }
  • 相关阅读:
    AVL Trees & Huffman Tree
    线索二叉树
    w10 端口转发
    springboot 注解属性配置
    java 性能分析工具
    JAVA
    ffmpeg ffplay播放延时大问题:播放延时参数设置
    springboot jodconverter openoffice 实现 office 文件 在线预览
    oracle 字符串 正则表达式 拆分,排序,合并
    润乾填报-(自定义)自动计算
  • 原文地址:https://www.cnblogs.com/lishanyang/p/15194719.html
Copyright © 2011-2022 走看看