100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java使用geotools读取shp文件

java使用geotools读取shp文件

时间:2019-12-06 00:49:38

相关推荐

java使用geotools读取shp文件

java使用geotools读取shp文件

测试shp文件引入geotools包压缩包文件处理shp文件相关信息的读取运行结果

GeoTools是一个开源的Java GIS工具包,可利用它来开发符合标准的地理信息系统。GeoTools提供了OGC(Open Geospatial Consortium)规范的一个实现来作为他们的开发。

一份完整的shp文件应该至少具备这三个文件:dbf(存储矢量数据的属性信息)、shp(存储矢量数据的空间信息的)、shx(保留要素几何学特征的索引文件)。

下面直接具体解析的代码

测试shp文件

引入geotools包

<!-- 解析shp文件 --><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools.version}</version></dependency><!-- Apache工具类 --><dependency><artifactId>commons-io</artifactId><groupId>commons-io</groupId><version>2.0.1</version></dependency>

压缩包文件处理

@PostMapping("/uploadShpAndGetInfo")public void uploadShpAndGetInfo(@RequestParam MultipartFile multipartFile) throws Exception {String fileName = multipartFile.getOriginalFilename();if (CharSequenceUtil.isNotBlank(fileName)) {String fileType = fileName.split("[.]")[1];if (!fileType.endsWith("zip")) {// 不是以.shp结尾的文件log.error("上传的文件格式只能是.shp文件和.zip压缩包!");} else {//临时保存路径String filename = multipartFile.getOriginalFilename();String shpFileTempUrl = "D:/tmp";String path = shpFileTempUrl + StrUtil.SLASH + filename;//目录是否存在 不存在就创建if (!FileUtil.exist(shpFileTempUrl)) {FileUtil.mkdir(shpFileTempUrl);}//创建文件File file = FileUtil.file(path);if(fileType.endsWith("zip")){//解压File unzip = ZipUtil.unzip(multipartFile.getInputStream(), file, CharsetUtil.CHARSET_GBK);//获取以.shp结尾的文件List<File> shp = FileUtil.loopFiles(unzip, pathname -> pathname.getName().endsWith("shp"));//循环获取shp文件信息for (File shpFile : shp) {FileShapeReaderUtil.getShapeFile(shpFile);}}}} else {log.error("文件不能为空!");}}

shp文件相关信息的读取

public static void getShapeFile(File file) throws Exception {Map<String, Object> map = new HashMap<>(1);map.put("url", file.toURI().toURL());DataStore dataStore = DataStoreFinder.getDataStore(map);//字符转码,防止中文乱码ShapefileDataStore shpStore = (ShapefileDataStore) dataStore;shpStore.setCharset(StandardCharsets.UTF_8);//获取shp文件坐标系SimpleFeatureSource source = shpStore.getFeatureSource();SimpleFeatureType schema = source.getSchema();Query query = new Query(schema.getTypeName());FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures(query);//获取shp文件所有的地块try (FeatureIterator<SimpleFeature> features = collection.features()) {while (features.hasNext()) {SimpleFeature feature = features.next();String name = feature.getName().toString();log.info("地块名称=【{}】", name);//坐标系的名称ReferenceIdentifier referenceIdentifier = feature.getFeatureType().getCoordinateReferenceSystem().getCoordinateSystem().getName();String code = referenceIdentifier.getCode();log.info("地块坐标系=【{}】", code);//获取shp文件的属性信息Iterator<? extends Property> iterator = feature.getValue().iterator();while (iterator.hasNext()) {Property property = iterator.next();log.info("地块属性名【{}】 地块属性值【{}】", property.getName(), property.getValue());}}}}

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。