java读取shapefile且用arcgis for js展示

如题,java读取shapefile文件内容,输出到前端,用arcgis for js进行展示。循例一言不合就发图,来个感性认识。
在这里插入图片描述
shapefile是一种空间数据文件。它是美国esri公司制定的一种文件格式。事实上,shapefile通常不会是一个文件,而是一堆名字相同,只是后缀名不同的文件,它们组合在一起,对同一个地理对象进行不同角度的描述,形成一个完整的小空间数据库。所以,有些软件处理shapefile,要求提交的是这些文件的打包,比如zip。
在这里插入图片描述
以上文件负责的功能各有不同:

.shp 存储地理形状和位置信息
.dbf 存储属性信息
.shx 索引文件
.prj 坐标系
.cpg 字符编码,如UTF-8

可见这里面,最重要的是shp文件。java里面,读取shapefile,一般就是用GeoTools。读取方法,网上的教程大同小异。从测试结果看,读取的时候,将.shp文件路径作为参数传递,该方法会自动检查同一个目录下有没有其他相关文件,有的话会一并读出。本来.shp文件存储的只是空间信息,属性数据在dbf中,但geotools会自动读出来,包含在读取结果中。而如果只有单个.shp文件,那结果就只有空间数据。所以刚开始的时候,我搞不懂为什么网上的例子都只将.shp文件路径作为参数传递,还苦苦搜索一个读取全部文件的方法。结果当然就是找不到,因为没有必要。

以上是铺垫知识。那么,要用java读取shapefile文件内容,输出到前端,用arcgis for js进行展示,要经过哪些步骤呢?梳理如下:

1、服务器端(java)用geotools类库读取shapefile,得到GeoJson
java用geotools类库读取shapefile

2、由于前段使用arcgis for js展示,须将GeoJson转为EsriJson

3、输出到前端后,前端用arcgis for js进行展示

这三个步骤,都需要进行详细阐述,留待下回分解,但在开始之前,还需要了解一下铺垫知识:地理坐标系。尤其是步骤2,网上比较少例子。下面有一个ESRI官方测试网址,前端代码可见,但后端读取的代码却找不到。ESRI自己读取shapefile的话,肯定不用通过geotools,所以它没有转换的问题。geojson格式的话,用leaflet等应该可以直接展示,但arcgis for js不行。

测试网址
ESRI官方测试网址,提交一个shapefile的zip包并展示
非arcgis的在线测试网址

参考文章:
ESRI官方
GeoTools——读取shapefile数据
JAVA用geotools读写shape格式文件

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,要读取shapefile zip文件,可以使用GeoTools库来实现。GeoTools是一个开源的地理空间数据处理库,提供了丰富的功能和API来进行地理空间数据的读取和处理。 首先,需要导入GeoTools的相关库文件。可以通过Maven将GeoTools库添加到项目中,具体的依赖信息可以参考GeoTools官方网站。 接下来,需要创建一个ShapefileDataStore对象,用于读取shapefile文件。可以通过如下代码实现: ```java File zipFile = new File("path/to/shapefile.zip"); Map<String, Serializable> params = new HashMap<>(); params.put("url", zipFile.toURI().toURL()); DataStore dataStore = DataStoreFinder.getDataStore(params); ``` 然后,可以使用DataStore对象来获取shapefile文件中的图层信息,并通过FeatureSource对象来获取特征(Feature)。如下所示: ```java String[] typeNames = dataStore.getTypeNames(); String typeName = typeNames[0]; // 获取第一个图层的名称 FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = dataStore.getFeatureSource(typeName); ``` 最后,可以通过FeatureIterator循环遍历shapefile文件中的特征数据,并进行相应的处理。例如,可以获取特征的属性信息、几何信息等。如下所示: ```java try (FeatureIterator<SimpleFeature> iterator = featureSource.getFeatures().features()) { while (iterator.hasNext()) { SimpleFeature feature = iterator.next(); // 获取属性信息 Collection<Property> properties = feature.getProperties(); for (Property property : properties) { String name = property.getName().toString(); Object value = property.getValue(); // 处理属性信息... } // 获取几何信息 Geometry geometry = (Geometry) feature.getDefaultGeometry(); // 处理几何信息... } } ``` 综上所述,以上就是使用Java读取shapefile zip文件的基本步骤。通过使用GeoTools库,可以轻松地读取和处理shapefile文件的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值