GeoTools获取shp文件地理座标系、投影、字段信息和座标geometry数据

创建maven工程,加载gt-shapefile依赖包。注意,仓库应该放在依赖后面才能把包都加载完。

1. pom.xml文件

<?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>org.example</groupId>
    <artifactId>untitled</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <geotools.version>23-SNAPSHOT</geotools.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-shapefile</artifactId>
            <version>${geotools.version}</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>maven2-repository.dev.java.net</id>
            <name>Java.net repository</name>
            <url>http://download.java.net/maven/2</url>
        </repository>
        <repository>
            <id>osgeo</id>
            <name>Open Source Geospatial Foundation Repository</name>
            <url>http://download.osgeo.org/webdav/geotools/</url>
        </repository>
        <repository>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>boundless</id>
            <name>Boundless Maven Repository</name>
            <url>http://repo.boundlessgeo.com/main</url>
        </repository>
    </repositories>

</project>

2. 创建获取shp要素信息Java文件

package cn.com.geotool;

import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.opengis.feature.GeometryAttribute;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.type.GeometryType;
import org.opengis.feature.type.Name;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

/**
 * @ClassName GetShpMsg
 * @Author FengMinhui
 * @Date 2020/4/23
 * @Description TODO
 * @Version 1.0
 */
public class GetShpMsg {

    public static void main(String[] args) throws IOException {
        String pathName = "D:\\GeoToolsTestData\\locations.shp";
        File file = new File(pathName);

        // 读取到数据存储中
        FileDataStore dataStore = FileDataStoreFinder.getDataStore(file);
        // 获取特征资源
        SimpleFeatureSource simpleFeatureSource = dataStore.getFeatureSource();
        // 要素集合
        SimpleFeatureCollection  simpleFeatureCollection = simpleFeatureSource.getFeatures();

        // 要素数量
        int featureSize = simpleFeatureCollection.size();
        // 获取要素迭代器
        SimpleFeatureIterator featureIterator = simpleFeatureCollection.features();
        if(featureIterator.hasNext()){
            // 要素对象
            SimpleFeature feature = featureIterator.next();
            // 要素属性信息,名称,值,类型
            List<Property> propertyList = (List<Property>) feature.getValue();
            for(Property property : propertyList){
              System.out.println("属性名称:" + property.getName());
              System.out.println("属性值:" + property.getValue());
              System.out.println("属性类型:" + property.getType());
              System.out.println();
            }

            // 要素属性信息
            List<Object> featureAttributes = feature.getAttributes();

            // 要素geometry的类型和座标,如点,线,面及其组成的座标
            Object geometryText = feature.getDefaultGeometry();

            // geometry属性
            GeometryAttribute geometryAttribute = feature.getDefaultGeometryProperty();
            // 获取座标参考系信息
            CoordinateReferenceSystem coordinateReferenceSystem = geometryAttribute.getDescriptor().getCoordinateReferenceSystem();

            // geometry类型
            GeometryType geometryType = geometryAttribute.getType();
            // geometry类型名称
            Name name = geometryType.getName();

            System.out.println("要素数量:"+ featureSize);
            System.out.println("要素属性:" + featureAttributes);
            System.out.println("要素geometry位置信息:" + geometryText);
            System.out.println("要素geometry类型名称:" + name);
            System.out.println("shp文件使用的座标参考系:\n" + coordinateReferenceSystem);

        }

    }
}

3.输出结果

属性名称:the_geom
属性值:POINT (11.116667 46.066667)
属性类型:GeometryTypeImpl Point<Point>

属性名称:Name
属性值:Trento
属性类型:AttributeTypeImpl Name<String>
restrictions=[ length([.]) <= 15 ]

属性名称:number
属性值:140
属性类型:AttributeTypeImpl number<Integer>
restrictions=[ length([.]) <= 9 ]

要素数量:15
要素属性:[POINT (11.116667 46.066667), Trento, 140]
要素geometry位置信息:POINT (11.116667 46.066667)
要素geometry类型名称:Point
shp文件使用的座标参考系:
GEOGCS["WGS84(DD)", 
  DATUM["WGS84", 
    SPHEROID["WGS84", 6378137.0, 298.257223563]], 
  PRIMEM["Greenwich", 0.0], 
  UNIT["degree", 0.017453292519943295], 
  AXIS["Geodetic longitude", EAST], 
  AXIS["Geodetic latitude", NORTH]]

4. locations.shp文件截图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章