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文件截圖

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