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坐标转换(投影转换和仿射变换)的更多相关文章

  1. 说说geotools中坐标转换那点事

    概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...

  2. (十七)WebGIS中距离及面积测量的原理和实现以及坐标转换的简单介绍

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在这一章里我们将讨论基础工具栏中另外两个常用工具:距离测量工 ...

  3. ArcGIS中的坐标系统定义与投影转换【转】

    ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统 ...

  4. 【转】+【举例】ArcGIS中的坐标系统定义与投影转换

    背景知识: UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的.虽然我们仍然将其看作与"高斯-克吕格"相似的坐标系统,但实际上 ...

  5. ArcGIS Engine开发之旅10--空间参考及坐标转换

    原文:ArcGIS Engine开发之旅10--空间参考及坐标转换 空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确 ...

  6. GDAL坐标转换

    一.引言 最近研究了一下GIS.测绘学的坐标转换的问题,感觉大部分资料专业性太强,上来就是一通专业性论述:但感觉对于相关从业者来说,其实不必了解那么多背景知识的:就通过GDAL这个工具,来简单总结下坐 ...

  7. 简析服务端通过geotools导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  8. Cesium中的地形和坐标转换说明

    1 Cesium中的地形 Cesium中的地形系统是一种由流式瓦片数据生成地形mesh的技术,厉害指出在于其可以自动模拟出地面.海洋的三维效果.创建地形图层的方式如下: var terrainProv ...

  9. ArcGIS进行自定义投影转换(重投影)

    这里记录一下使用自定义七参数进行投影转换的过程. 1.主动创建自定义地理(坐标)变换 首先在系统工具箱里面选择创建自定义地理(坐标)变换 在弹出的窗口中输入相关参数即可. 转换方法选择COORDINA ...

随机推荐

  1. sql注入原理与实践

    转自:http://blog.csdn.net/stilling2006/article/details/8526458 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开 ...

  2. bzoj2337 XOR和路径——高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337 异或就一位一位考虑: x为到n的概率,解方程组即可: 考虑了n就各种蜜汁错误,所以索性 ...

  3. ul下的li浮动,如何是ul有li的高度

    此时ul展示的界面为: ①给ul加上一个样式,display:inline-block; <html> <head> <title>float</title& ...

  4. node npm 总结

    是nodejs的软件包管理器,用于node插件管理 npm install <name> [-g] [--save -dev] name:安装模块的名称 -g:全局安装 --save:将保 ...

  5. spring+mybatis下delete和insert返回值-2147482646

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"&g ...

  6. B. Simple Molecules

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  7. Start Developing Mac Apps -- Mac App Store Mac 应用商店

      Mac App Store The information you’ve read so far focused on how to create an app in Xcode. However ...

  8. k8s-调度器、预选策略及优选函数-二十

    一.简介 master上运行着三个最核心的组件,apiserver.scheduler.controller manager.此外,master还依赖于ectd存储节点,最好ectd是有冗余能力的集群 ...

  9. linux中vim常用命令总结

  10. bash 脚本编程七 将命令输出保存到变量中(转载)

    转自:http://blog.csdn.net/csfreebird/article/details/7978699 `符号包含的命令执行完后,可以讲其输出结果保存到变量中 #!/bin/bash v ...