GeoTools应用:提取Shape文件坐标系信息(4)


一、环境准备

装配GeoTools有两种方式,一种是配置maven工程的pom文件(配置方式参考官网),另一种是下载geotools的jar包到本地导入依赖。我采用的是下载jar的方式,下载路径:https://sourceforge.net/projects/geotools/files/

二、实现功能

本章要描述的功能是如何从shape文件中读取坐标系信息。shape文件并不是一个文件而是一堆文件,坐标系信息存储在*.prj文件中。

这是一个文本文件,可以用记事本打开。文件中存储的是WKT格式的坐标系信息。

三、样例代码

1、读取坐标系信息的接口

package com.elon.shape;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;

/**
 * Shape文件操作公共类。
 * @author elon
 * @version 2018年6月24日
 */
public class ShapeUtils {

    /**
     * 获取Shape文件的坐标系信息。
     * 
     * @param shpFilePath shp文件路径
     * @return 坐标系的WKT形式
     */
    public static String getCoordinateSystemWKT(String shpFilePath) {

        ShapefileDataStore dataStore = buildDataStore(shpFilePath);

        try {
            return dataStore.getSchema().getCoordinateReferenceSystem().toWKT();
        } catch (UnsupportedOperationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            dataStore.dispose();
        }
        return "";
    }

    /**
     * 构建ShapeDataStore对象。
     * @param shpFilePath shape文件路径。
     * @return
     */
    public static ShapefileDataStore buildDataStore(String shpFilePath) {
        ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
        try {
            ShapefileDataStore dataStore = (ShapefileDataStore) factory
                    .createDataStore(new File(shpFilePath).toURI().toURL());
            if (dataStore != null) {
                dataStore.setCharset(Charset.forName("UTF-8"));
            }
            return dataStore;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

2、读取坐标系打印

package com.elon;

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

import com.elon.model.ShapeFieldInfo;
import com.elon.model.gismodel.GisMultiPolygon;
import com.elon.shape.ShapeUtils;

public class StartupGeoTools {
    public static void main(String[] args) {

        String workSpacePath = System.getProperty("user.dir");
        String shpFilePath = workSpacePath + File.separator + "shape/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp";

        String wkt = ShapeUtils.getCoordinateSystemWKT(shpFilePath);
        System.out.println("WKT:" + wkt);

        System.out.println("Start GeoTools success!");
    }
}

四、坐标系简要说明

GEOGCS["GCS_WGS_1984", 
  DATUM["D_WGS_1984", 
    SPHEROID["WGS_1984", 6378137.0, 298.257223563]], 
  PRIMEM["Greenwich", 0.0], 
  UNIT["degree", 0.017453292519943295], 
  AXIS["Longitude", EAST], 
  AXIS["Latitude", NORTH]]

上面是打印出的坐标,GEOGCS表示这个是地址坐标系。如果是PROJCS则表示是平面投影坐标系。关于WKT的详细解释参考维基百科:https://en.wikipedia.org/wiki/Well-known_text

转载自:https://blog.csdn.net/ylforever/article/details/80841858

You may also like...