记geotools java开发坐标转换之一坑

4 篇文章 0 订阅

       最近接触到了一个关于geotools后端坐标转换的工作,手上想自己动手尝试一下,看着官方文档,一路照做下来,无论是建立Java project还是maven project,一样的代码还是一样的导包还是有问题,起先我以为一定要在maven中写代码,开始是maven的环境配置上出了一点问题,后来环境问题搞了很久才解决,到了后面还是报坐标转换先关的包的异常,于是再仔细地看看官方给的文档,果然是忽略了一个关键点,官方建议移除的八个jar我没移除,对比了移除与不移除的结果,得出了那八个包对坐标转换相关的包有影响。

 

1、eclipse下新建Java工程项目,工程名为coordinatetransform

                                         

                                         

2、新建包,包名也一样

3、新建一个class,name为prj

                                               

 

4、导包--geotools,选择11.0版本

5、移除以下jar包,以免影响下面的坐标转换相关的包

/*
 *  删除以下jar包即可
*   gt-epsg-hsql
    gt-epsg-oracle
    gt-epsg-postgresql
    gt-epsg-wkt
    
    gt-arcsde
    gt-arcsde-common
    gt-jdbc-db2
    gt-jdbc-oracle
 */

libraries添加jar包,工程名右键属性property

在order and export中select all

6、工程项目视图如下

7、上代码

package coordinatetransform;

import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;

import com.vividsolutions.jts.geom.Coordinate;
/*
 *  删除以下jar包即可
*   gt-epsg-hsql
	gt-epsg-oracle
	gt-epsg-postgresql
	gt-epsg-wkt
	
	gt-arcsde
	gt-arcsde-common
	gt-jdbc-db2
	gt-jdbc-oracle
 */
public class prj {
	static String strWKTMercator="PROJCS[\"World_Mercator\","
            + "GEOGCS[\"GCS_WGS_1984\","
            + "DATUM[\"WGS_1984\","
            + "SPHEROID[\"WGS_1984\",6378137,298.257223563]],"
            + "PRIMEM[\"Greenwich\",0],"
            + "UNIT[\"Degree\",0.017453292519943295]],"
            + "PROJECTION[\"Mercator_1SP\"],"
            + "PARAMETER[\"False_Easting\",0],"
            + "PARAMETER[\"False_Northing\",0],"
            + "PARAMETER[\"Central_Meridian\",0],"
            + "PARAMETER[\"latitude_of_origin\",0],"
            + "UNIT[\"Meter\",1]]";
	
	static String strUTM49="PROJCS[\"WGS 84 / UTM zone 49N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32649\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]";

	public static void main(String[] args)  {
		// TODO Auto-generated method stub
		try
		{
			///CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:4326");
	
			//CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857");
	
			//MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS);
	
			//Coordinate coorDst=new Coordinate();
	
			///JTS.transform(new Coordinate(40, 116),coorDst, transform);
			
			CoordinateReferenceSystem crsTarget = CRS.parseWKT(strWKTMercator);
			CoordinateReferenceSystem crsTarget1 = CRS.parseWKT(strUTM49);
			MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, crsTarget);
			MathTransform transform1 = CRS.findMathTransform( crsTarget1,DefaultGeographicCRS.WGS84);
			//String wktPoint = "POINT(100.02715479879 33.462715497945)";			
			Coordinate coorDst=new Coordinate();
			Coordinate coorDst1=new Coordinate();
			
			JTS.transform(new Coordinate(113.367, 23.126), coorDst, transform);
			JTS.transform(new Coordinate(742369.57, 2559443.47), coorDst1, transform1);
			
			System.out.println(coorDst);
			System.out.println(coorDst1);
		}catch(Exception e) {System.out.println(e.toString());}
		
	}
}

8、run as java application console的结果为

(1.2619956712761045E7, 2630487.8566600755, NaN)
(113.36674291511564, 23.126077677299143, NaN)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰小莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值