java使用geotools解析矢量数据kml、geojson、shp文件

编程入门 行业动态 更新时间:2024-10-23 11:18:05

java使用geotools解析<a href=https://www.elefans.com/category/jswz/34/1769140.html style=矢量数据kml、geojson、shp文件"/>

java使用geotools解析矢量数据kml、geojson、shp文件

geotools解析kml、geojson

  • geotools环境准备
  • 公共获取属性方法
  • 解析kml
  • 解析geojson
  • 解析shp

geotools环境准备

这里使用的是maven引用geotools包,引用geotools包需要添加maven仓库,pom.xml文件如下:

<properties><!-- geotools版本 --><geotools-version>28.2</geotools-version>
</properties><!-- geotools-->
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools-version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>${geotools-version}</version>
</dependency><!-- geotools-geojson核心包 -->
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson-core</artifactId><version>${geotools-version}</version>
</dependency>
<dependency><groupId>org.geotools.xsd</groupId><artifactId>gt-xsd-kml</artifactId><version>${geotools-version}</version>
</dependency><!-- geotools仓库-->
<repositories><repository><id>osgeo</id><name>Open Source Geospatial Foundation Repository</name><url>/</url></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>/</url></repository>
</repositories>

公共获取属性方法

@Slf4j
public class AnalysisUtil {public static void readProperty(SimpleFeature simpleFeature) {Collection<Property> properties = simpleFeature.getProperties();Iterator<Property> iterator = properties.iterator();int index = 0;while (iterator.hasNext()) {Property property = iterator.next();//kml拿到属性值会有自带的9个属性if (index++ > 8) {log.info("GeoJSONReader解析geojson -->> 属性名:【{}】,属性值:【{}】,属性类型:【{}】", property.getName().toString(),property.getValue(), property.getType().getBinding());}}Object defaultGeometry = simpleFeature.getDefaultGeometry();//wkt格式geometryGeometry geometry = (Geometry) defaultGeometry;log.info("wkt格式geometry:{}", geometry);}
}

解析kml

KML(Keyhole Markup Language,Keyhole 标记语言)是一种基于XML 的标记语言,利用XML 语法格式描述地理空间数据(如点、线、面、多边形和模型等)。

public class AnalysisKml {public static void main(String[] args) {String fileUrl = "D:\\workspace\\vector\\vector\\KML.kml";try (FileInputStream fileInputStream = new FileInputStream(fileUrl)) {PullParser parser = new PullParser(new KMLConfiguration(), fileInputStream, SimpleFeature.class);SimpleFeature simpleFeature = (SimpleFeature) parser.parse();//kml文件声明了坐标系才能获取到,没声明获取就是nullCoordinateReferenceSystem coordinateReferenceSystem = simpleFeature.getFeatureType().getCoordinateReferenceSystem();log.info("解析kml获取坐标系:{}", coordinateReferenceSystem);readKml(simpleFeature, parser);} catch (XMLStreamException | IOException | SAXException e) {throw new UtilException(e.getMessage());}}//递归方式获取每个地块信息public static void readKml(SimpleFeature simpleFeature, PullParser parser) throws XMLStreamException, IOException,SAXException {//读取属性AnalysisUtil.readProperty(simpleFeature);//获取下一个simpleFeaturewhile (simpleFeature != null && simpleFeature.getDefaultGeometry() != null) {simpleFeature = (SimpleFeature) parser.parse();readKml(simpleFeature, parser);}}
}

解析geojson

GeoJSON 是一种用于编码各种地理数据结构的格式。
GeoJSON 支持以下几何类型:Point、LineString、Polygon、MultiPoint、MultiLineString 和 MultiPolygon。 具有附加属性的几何对象是特征对象。 要素集包含在FeatureCollection 对象中。

下面介绍2种解析geojson的方法:

  1. org.geotools.data.geojson.GeoJSONReader解析给geojson,但是它不会读取坐标系,所以不管什么坐标系的geojson文件读出来都是默认的坐标系WGS84.
  2. org.geotools.geojson.feature.FeatureJSON解析geojson可以读到文件对应的坐标系。
@Slf4j
public class GeoJsonAnalysis {public static void main(String[] args) {String fileUrl = "D:\\workspace\\vector\\vector\\福田路网geojson.geojson";geoJSONReader(fileUrl);featureJson(fileUrl);}public static void featureJson(String fileUrl) {// 指定GeometryJSON构造器,15位小数FeatureJSON featureJson = new FeatureJSON(new GeometryJSON(15));try {FeatureCollection featureCollection = featureJson.readFeatureCollection(new FileInputStream(fileUrl));//获取坐标系CoordinateReferenceSystem coordinateReferenceSystem =featureCollection.getSchema().getCoordinateReferenceSystem();log.info("解析geojson获取坐标系:{}", coordinateReferenceSystem);FeatureIterator featureIterator = featureCollection.features();while (featureIterator.hasNext()) {SimpleFeature simpleFeature = (SimpleFeature) featureIterator.next();AnalysisUtil.readProperty(simpleFeature);}} catch (IOException e) {e.printStackTrace();}}public static void geoJSONReader(String fileUrl) {GeoJSONReader reader = null;try {reader = new GeoJSONReader(new FileInputStream(fileUrl));SimpleFeatureCollection featureCollection = reader.getFeatures();//创建图层数据迭代器FeatureIterator<SimpleFeature> simpleFeatureFeatureIterator = featureCollection.features();while (simpleFeatureFeatureIterator.hasNext()) {AnalysisUtil.readProperty(simpleFeatureFeatureIterator.next());}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}

解析shp

shp文件解析请看往期文章:geotoolsu解析shp文件

更多推荐

java使用geotools解析矢量数据kml、geojson、shp文件

本文发布于:2023-11-15 07:57:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1596295.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:矢量   文件   数据   geotools   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!