GeoTools坐标转换(投影转换和仿射变换)
GeoTools是在java下的gis开源软件,以下介绍坐标转换的两种方法:投影转换和仿射变换
- 投影转换
这里以xian80经纬度坐标转xian80,3度分带 111中央经线平面坐标为例
转换函数如下:
Point pointXian80 = projectTransform(lon, lat, "EPSG:4610", "EPSG:2382");
/**
* 投影转换, lon=经度,lat=纬度,ESPG格式(例):EPSG:4610
*/
public static Point projectTransform(double lon, double lat,
String epsgSource, String epsgTarget) throws FactoryException,
MismatchedDimensionException, TransformException {
// 原始坐标点
// PS:通常逻辑上理解经度应该是横坐标x,纬度是y,可是这里经度要填到y,纬度x,否则会报错
Point sourcePoint = JtsHelper.createPoint(lat, lon); // 定义转换前和转换后的投影,可以用ESPG或者wkt
// "PROJCS[\"Xian_1980_3_Degree_GK_CM_111E\",GEOGCS[\"GCS_Xian_1980\",DATUM[\"D_Xian_1980\",SPHEROID[\"Xian_1980\",6378140.0,298.257]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",500000.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",111.0],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0]]";
// CoordinateReferenceSystem mercatroCRS = CRS.parseWKT(strWKTMercator);
CoordinateReferenceSystem crsSource = CRS.decode(epsgSource);
CoordinateReferenceSystem crsTarget = CRS.decode(epsgTarget);
// 投影转换
MathTransform transform = CRS.findMathTransform(crsSource, crsTarget);
Point pointTarget = (Point) JTS.transform(sourcePoint, transform); return pointTarget;
}
关于定义坐标系的说明,GeoTools中定义坐标系有两种方法,一是坐标系的wkt,二是ESPG
坐标系的wkt可以从arcgis的prj文件中过去,用记事本打开prj文件,里面的内容就是该坐标系的wkt格式内容,例如:PROJCS[\"Xian_1980_3_Degree_GK_CM_111E\",GEOGCS[\"GCS_Xian_1980\",DATUM[\"D_Xian_1980\",SPHEROID[\"Xian_1980\",6378140.0,298.257]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",500000.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",111.0],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0]]
获取到wkt后,可以通过 CoordinateReferenceSystem mercatroCRS = CRS.parseWKT(strWKTMercator); 获取到坐标系对象
另一种方法是ESPG,意思是每一个坐标系都有一个ESPG标准的号码,查询坐标系的ESPG可通过以下网站 http://spatialreference.org/
PS:当转换的两种坐标系的datum不同,会报错Bursa-Wolf parameters,暂时未解决
- 仿射变换
代码如下:
首先是输入三组参考点,前三个是转换前,后三个是转换后
最后结果是pointReuslt
// 参考点坐标
Coordinate s1 = new Coordinate(429275.549, 2801455.153);
Coordinate s2 = new Coordinate(428110.626, 2792148.620);
Coordinate s3 = new Coordinate(428966.479, 2800016.622); Coordinate t1 = new Coordinate(4628.339, 801349.338);
Coordinate t2 = new Coordinate(3515.906, 792036.308);
Coordinate t3 = new Coordinate(4327.381, 799909.069);
// 建立仿射变换对象
AffineTransformationBuilder afb = new AffineTransformationBuilder(s1,
s2, s3, t1, t2, t3);
AffineTransformation atf = afb.getTransformation(); Point pointReuslt = JtsHelper.createPoint(x,y); // 坐标转换
pointReuslt.apply(atf);
GeoTools坐标转换(投影转换和仿射变换)的更多相关文章
- 说说geotools中坐标转换那点事
概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...
- (十七)WebGIS中距离及面积测量的原理和实现以及坐标转换的简单介绍
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在这一章里我们将讨论基础工具栏中另外两个常用工具:距离测量工 ...
- ArcGIS中的坐标系统定义与投影转换【转】
ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统 ...
- 【转】+【举例】ArcGIS中的坐标系统定义与投影转换
背景知识: UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的.虽然我们仍然将其看作与"高斯-克吕格"相似的坐标系统,但实际上 ...
- ArcGIS Engine开发之旅10--空间参考及坐标转换
原文:ArcGIS Engine开发之旅10--空间参考及坐标转换 空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确 ...
- GDAL坐标转换
一.引言 最近研究了一下GIS.测绘学的坐标转换的问题,感觉大部分资料专业性太强,上来就是一通专业性论述:但感觉对于相关从业者来说,其实不必了解那么多背景知识的:就通过GDAL这个工具,来简单总结下坐 ...
- 简析服务端通过geotools导入SHP至PG的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...
- Cesium中的地形和坐标转换说明
1 Cesium中的地形 Cesium中的地形系统是一种由流式瓦片数据生成地形mesh的技术,厉害指出在于其可以自动模拟出地面.海洋的三维效果.创建地形图层的方式如下: var terrainProv ...
- ArcGIS进行自定义投影转换(重投影)
这里记录一下使用自定义七参数进行投影转换的过程. 1.主动创建自定义地理(坐标)变换 首先在系统工具箱里面选择创建自定义地理(坐标)变换 在弹出的窗口中输入相关参数即可. 转换方法选择COORDINA ...
随机推荐
- ReactNative Android 研究
先从ReactRootView入手吧,它是一个FrameLayout mReactRootView.startReactApplication 这的start其实是会等到inital onMeasur ...
- POJ2243 Knight Moves —— A*算法
题目链接:http://poj.org/problem?id=2243 Knight Moves Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- HDU1241 Oil Deposits —— DFS求连通块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...
- Redis持久化(RDB和AOF)
什么是Redis持久化 什么是Redis持久化,就是将内存数据保存到硬盘. Redis 持久化存储 (AOF 与 RDB 两种模式) RDB持久化 RDB 是以二进制文件,是在某个时间 点将数据写入一 ...
- JavaScript实现Map、Reduce和Filter
1. [代码][JavaScript]代码 <script type="text/javascript">// 函数式编程:// 描述我们要做什么,而不是我们如 ...
- 并不对劲的bzoj5415:loj2718:uoj393:p4768:[NOI2018]归程
题目大意 \(n\)(\(n\leq2*10^5\))个点,\(m\)(\(m\leq4*10^5\))条边的图,每条边有海拔\(a_i(a_i\leq10^9)\).长度\(l_i(l_i\leq1 ...
- 【Cocos2dx】新建场景、场景的切换、设置启动场景与菜单的新建
这是Cocos2dx最简单的部分.主要是体现对场景的操作,其实这东西就是Flash的舞台,安卓的Activity,WIN32窗体程序的Framework窗体,网页的body,反正就是对那个容纳各种东西 ...
- 酷版移动端iframe改变src,重新加载页面问题探究
最近在酷版上我要做一个内嵌别人的网页的在线服务页面,于是必须用到iframe,以前我以为移动端不支持iframe呢,原来这样都可以....(呵呵,长见识了!我还是只菜鸟) 直接入正题,说说我遇到的困难 ...
- 【旧文章搬运】无Device的驱动如何通信
原文发表于百度空间,2009-07-14========================================================================== 标准的驱动 ...
- Win7系统打开服务管理界面的几种方法汇总
转自:https://www.jb51.net/os/windows/318465.html Win7服务管理包含了计算机操作系统和应用程序提供的所有服务,但是这么多服务并非总是用户所需的.比如打印机 ...