概述:
本文讲述如何在geotools中实现shp数据的缓冲区分析并保存到shp文件中。
效果:
实现代码:
package com.lzugis.geotools; import java.io.File; import java.io.Serializable; import java.nio.charset.Charset; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.geotools.data.FeatureWriter; import org.geotools.data.Transaction; import org.geotools.data.shapefile.ShapefileDataStore; import org.geotools.data.shapefile.ShapefileDataStoreFactory; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Polygon; public class ShapeBuffer { /** * 缓冲区分析 * @param geom * @param distance * @return */ public Geometry calBuffer(Geometry geom, double distance){ return geom.buffer(distance); } public static void main(String[] args){ long start = System.currentTimeMillis(); ShapeBuffer geoR = new ShapeBuffer(); String shpfile = "/Users/lzugis/Documents/chinadata/capital.shp"; String buffile = "/Users/lzugis/Documents/chinadata/capital_buffer.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); 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 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()); Geometry geo = (Geometry)feature.getAttribute("the_geom"); Geometry geoBuffer = geoR.calBuffer(geo, 1.5); featureBuf.setAttribute("the_geom", geoBuffer); } writer.write(); writer.close(); itertor.close(); } catch(Exception e){ e.printStackTrace(); } System.out.println("共耗时"+(System.currentTimeMillis() - start)+"ms"); } }
---------------------------------------------------------------------------------------------------------------
技术博客
CSDN:http://blog.csdn.NET/gisshixisheng
博客园:http://www.cnblogs.com/lzugis/
在线教程
http://edu.csdn.Net/course/detail/799
Github
https://github.com/lzugis/
联系方式
q q:1004740957
e-mail:niujp08@qq.com
公众号:lzugis15
Q Q 群:452117357(webgis)
337469080(Android)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)