美文网首页Java技术分享
JAVA用geotools读取shape格式文件

JAVA用geotools读取shape格式文件

作者: 墨迹嘿嘿 | 来源:发表于2019-12-31 23:30 被阅读0次
    首发.png

    Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。

    其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件

    .shp— 图形格式,用于保存元素的几何实体。
    .shx— 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。
    .dbf— 属性数据格式,以dBase IV的数据表格式存储每个几何形状的属性数据。

    POM文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.herbert.geotool</groupId>
        <artifactId>geo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-shapefile</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-opengis</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-data</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-api</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-main</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-metadata</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-referencing</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-geojson</artifactId>
                <version>19.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.json.simple</groupId>
                <artifactId>json-simple</artifactId>
                <version>1.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool</artifactId>
                <version>1.5.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
            </dependency>
    
            <dependency>
                <groupId>com.vividsolutions</groupId>
                <artifactId>jts</artifactId>
                <version>1.13</version>
            </dependency>
        </dependencies>
    
    </project>
    

    具体操作代码

    package com.herbert.geotoool.util;
    
    import org.geotools.data.shapefile.ShapefileDataStore;
    import org.geotools.data.simple.SimpleFeatureIterator;
    import org.geotools.data.simple.SimpleFeatureSource;
    import org.geotools.geojson.feature.FeatureJSON;
    import org.opengis.feature.simple.SimpleFeature;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.StringWriter;
    import java.nio.charset.Charset;
    
    /**
     * @author :Herbert
     * @date :Created in 2019/12/26 17:01
     * @description:
     * @modified By:
     * @version: $
     */
    
    public class ShapeModel {
    
    
        public static void main(String[] args) throws IOException {
            long start = System.currentTimeMillis();
    
            String SHAPE_FILE = "F:\\MapData\\gisMap\\xian\\街道界线.shp"; // ShapeFile全路径
    
            // 使用GeoTools读取ShapeFile文件
            File shapeFile = new File(SHAPE_FILE);
            ShapefileDataStore store = new ShapefileDataStore(shapeFile.toURI().toURL());
            //设置编码
            Charset charset = Charset.forName("GBK");
            store.setCharset(charset);
            SimpleFeatureSource sfSource = store.getFeatureSource();
            SimpleFeatureIterator sfIter = sfSource.getFeatures().features();
            // 从ShapeFile文件中遍历每一个Feature,然后将Feature转为GeoJSON字符串
            while (sfIter.hasNext()) {
                SimpleFeature feature = (SimpleFeature) sfIter.next();
                // Feature转GeoJSON
                FeatureJSON fjson = new FeatureJSON();
                StringWriter writer = new StringWriter();
                fjson.writeFeature(feature, writer);
                String sjson = writer.toString();
                System.out.println("sjson===== >>>> "  + sjson);
            }
            System.out.println("数据导入完成,共耗时"+(System.currentTimeMillis() - start)+"ms");
        }
    }
    

    后台输出数据

    {
      "type": "Feature",
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
          [
            [
              [87.6031, 43.8363],
              [87.6035, 43.8364],
              [87.6036, 43.8364],
              [87.6039, 43.8365],
              [87.6041, 43.8365],
              [87.6043, 43.8365],
              [87.6046, 43.8366],
              [87.605, 43.8367]
            ]
          ]
        ]
      }
    }
    
    摘星族.jpg

    相关文章

      网友评论

        本文标题:JAVA用geotools读取shape格式文件

        本文链接:https://www.haomeiwen.com/subject/kdtwoctx.html