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