GeoTools——新建shapefile文件

本文详细介绍了如何使用GeoTools库在Java中创建Shapefile文件,包括服务端处理、数据返回和客户端显示的步骤。文章提供了两种创建Shapefile的方法,并展示了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、引言

二、代码操作

1、服务端

2、返回数据

3、客户端

三、第二种新建shp方法

四、总结


 

 

一、引言

 

本文讲解了如何读取shp数据,如何新建shp数据,并将新建的shp数据返回到客户端进行显示。

 

 

二、代码操作

 

1、服务端

list对象是为了最后将新建的shp数据返回,pointgbk数据是源文件,pointgbkbuffer是新建文件。

    @RequestMapping("/buffer")
    @ResponseBody
    public Object buffer()
    {
        List<Map<String,Object>>list=new ArrayList<>();
        long start = System.currentTimeMillis();

        String shpfile = this.getClass().getResource("/").getFile()+"file/pointgbk.shp";
        String buffile = this.getClass().getResource("/").getFile()+"file/pointgbkbuffer.shp";

        try{
            //读取shp文件
            File file = new File(shpfile);
            ShapefileDataStore shpDataStore = null;
            shpDataStore = new ShapefileDataStore(file.toURL());
            //设置编码
            Charset charset = Charset.forName("GBK");
            shpDataStore.setCharset(charset);
            String typeName = shpDataStore.getTypeNames()[0];
            SimpleFeatureSource featureSource = null;
            featureSource =  shpDataStore.getFeatureSource (typeName);
            SimpleFeatureCollection result = featureSource.getFeatures();
            SimpleFeatureIterator itertor = result.features();

            //创建shape文件对象
            File fileBuf = new File(buffile);
            Map<String, Serializable> params = new HashMap<String, Serializable>();
            params.put( ShapefileDataStoreFactory.URLP.key, fileBuf.toURI().toURL() );
            ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
            //获取原shp文件字段名
            SimpleFeatureType sft = featureSource.getSchema();
            List<AttributeDescriptor> attrs = sft.getAttributeDescriptors();

            //定义图形信息和属性信息
            SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
            //tb.setCRS(DefaultGeographicCRS.WGS84);
            tb.setName("shapefile");
            for(int i=0;i<attrs.size();i++){
                AttributeDescriptor attr = attrs.get(i);
                String fieldName = attr.getName().toString();
                if(fieldName=="the_geom"){
                    tb.add(fieldName, Polygon.class);
                }
                else{
                    tb.add(fieldName, String.class);
                }
            }
            ds.createSchema(tb.buildFeatureType());
            //设置编码
            ds.setCharset(charset);
            //设置Writer,遍历原feature,添加到新feature
            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());
                //Object temp=feature.getAttribute("the_geom");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值