• Geotools创建Feature的两种方式


    我们在操作矢量数据的无法避免的是与Feature打交道,在这里介绍两种关于Feature的创建方式,玩了那么久的GIS开发,无论哪种GIS二次开发,始终在模仿人在使用软件操作数据的流程,在学习的GIS开发的时候,首先应该明白,这个功能如果利用GIS商业软件,会有那些流程顺序,按照这个思路,很快就能掌握你所用开发的SDK包中,用那些类完成此任务再加上api事倍功半。

    一、SimpleFeatureBuilder方式创建

        	//创建GeometryFactory工厂
        	GeometryFactory geometryFactory = new GeometryFactory();
        	SimpleFeatureCollection collection =null;
        	//获取类型
        	SimpleFeatureType TYPE = featureSource.getSchema();
        	System.out.println(TYPE);
            //创建要素集合
            List<SimpleFeature> features = new ArrayList<>();
            //创建要素模板
            SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);
            //创建要素并添加道集合
            double latitude = Double.parseDouble("39.9");
            double longitude = Double.parseDouble("116.3");
            String name ="beijing";
            int number = Integer.parseInt("16");
            //创建一个点geometry
            Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));
            //添加的数据一定按照SimpleFeatureType给的字段顺序进行赋值
            //添加name属性
            featureBuilder.add(name);
            //添加number属性
            featureBuilder.add(number);
            //添加geometry属性
            featureBuilder.add(point);
            //构建要素
            SimpleFeature feature = featureBuilder.buildFeature(null);
    

    Note:featureBuilder添加的数据一定按照SimpleFeatureType给的字段顺序进行赋值!!!!!!!!!!
    二、getFeatureWriter方式创建

                SimpleFeatureSource featureSource = null;
                //根据图层名称来获取要素的source
                featureSource = shpDataStore.getFeatureSource (typeName);
    	        //根据参数创建shape存储空间
    	        ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
    	        SimpleFeatureType sft = featureSource.getSchema();
    	        //创建要素模板
                SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
                //设置坐标系
                tb.setCRS(DefaultGeographicCRS.WGS84);            
                tb.setName("shapefile");
                            //创建
                ds.createSchema(tb.buildFeatureType());
                //设置编码
                ds.setCharset(charset);
                 
                //设置Writer,并设置为自动提交
                FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT);
                 //循环写入要素
                while (itertor.hasNext())
                {
                	//获取要写入的要素
                    SimpleFeature feature = itertor.next();
                    //将要写入位置
                    SimpleFeature featureBuf = writer.next();
                    //设置写入要素所有属性
                    featureBuf.setAttributes(feature.getAttributes());
                    //获取the_geom属性的值
                    Geometry geo =(Geometry) feature.getAttribute("the_geom");
                    Geometry geoBuffer = geoR.calBuffer(geo, 0.1);
                    System.out.println(geoBuffer);
                    //重新覆盖the_geom属性的值,这里的geoBuffer必须为Geometry类型
                    featureBuf.setAttribute("the_geom", geoBuffer);
                } 
                //将所有数据写入
                writer.write();
                //关闭写入流
                writer.close();
                itertor.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
    

    总结:
    两种都差不多,个人感觉第二种方式创建更为灵活一点,关于第一种必须保证写入字段的Value的顺序,第二种是采用Key,value方式更为保险安全,第一种可读性更为好点。

  • 相关阅读:
    pymongo 常用方法
    字典判断是否具备 key
    flask中的request和常用属性方法
    zipfile 解压,py3 win下中文乱码
    远程登录mongo
    eval
    二分查找
    快速排序
    Python3解leetcode Single Number
    Python3解leetcode Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752281.html
Copyright © 2020-2023  润新知