坐标投影的抽象类(Coordinate.java)

13 篇文章 0 订阅
7 篇文章 0 订阅
气象上常用的坐标投影,包括 Lambert(兰勃特)Mercator(麦卡托)Stereogram(极射赤面)Polar(极坐标)Linear经纬线性),均从这个Coordinate.java继承。当设置缩放系数为1.0时,各投影的与Micaps1.0重合。
Coordinate.java
001  /*
002 
003     坐标投影抽象类,具体方法由其继承类实现
004 
005        PACKAGE: cma.common.projection
006       FILENAME: Coordinate.java
007       LANGUAGE: Java2 v1.4
008       ORIGINAL: none
009    DESCRIPTION:
010         CREATE: 2007-07-08 13:22:39
011         UPDATE:
012         AUTHOR: 刘泽军 (BJ0773@gmail.com)
013                 广西气象减灾研究所
014                 Guangxi Institude of Meteorology and Disaster-reducing Research(GIMDR)
015  已经开发发继承类有: Lambert.java Mercator.java Stereogram.java Polar.java Linear.java
016  */
017 
018  package  cma.common.projection;
019 
020  import  java.io.*;
021  import  java.awt.*;
022  import  java.awt.geom.*;
023  import  java.util.*;
024  import  java.lang.Math.*;
025 
026  public abstract class  Coordinate  {
027 
028       //投影方式
029       public static  int    LAMBERT     =  1 ;
030       public static  int    MERCATOR    =  2 ;
031       public static  int    BBQ         =  3 ;
032       public static  int    NBQ         =  4 ;
033       public static  int    LINEAR      =  5 ;
034       public static  int    POLAR       =  6 ;
035 
036       //静态常量,地球半径,来源:《大气科学常用公式》,P601,附录
037       public static  double  RADIUS         =  6371.004 ; //地球平均半径,单位:公里(Km)。
038       public static  double  RADIUS_POLAR   =  6356.755 ; //地球两极半径,单位:公里(Km)。
039       public static  double  RADIUS_EQUATOR =  6373.140 ; //地球赤道半径,单位:公里(Km)。
040 
041       //标准经纬度(0.0<=longitude<=360, -90.0<=latitude<=90.0)
042       protected  Point2D.Double    standard; //兰勃特、极射赤面投影用到
043 
044       //中心经纬度(0.0<=longitude<=360, -90.0<=latitude<=90.0),用于定位,不一定是中心
045       protected  Point2D.Double    center;
046 
047       //中心经纬度对应的屏幕坐标
048       protected  Point             place;
049 
050       //偏移
051       protected  Point             offset;
052 
053       //缩放比例(非0正值,经向纬向可以不同)
054       protected  Point2D.Double    scaleXY;
055       //缩放系数
056       protected  double             scale;
057       protected  double             scaleOriginal;
058 
059       public   int  type    = - 1 ;
060 
061  /**
062    * 功能:
063    *      获得标准经纬度
064    * 参数:
065    *      无
066    * 返回值:
067    *      标准经纬度
068    */
069       public  Point2D.Double getStandard () {
070           return ( standard ) ;
071       }
072 
073  /**
074    * 功能:
075    *      获得中心经纬度
076    * 参数:
077    *      无
078    * 返回值:
079    *      中心经纬度
080    */
081       public  Point2D.Double getCenter () {
082           return ( center ) ;
083       }
084 
085  /**
086    * 功能:
087    *      获得中心经纬度对应的屏幕坐标
088    * 参数:
089    *      无
090    * 返回值:
091    *      中心经纬度对应的屏幕坐标
092    */
093       public  Point getPlace () {
094           return ( place ) ;
095       }
096 
097  /**
098    * 功能:
099    *      获得缩放系数
100    * 参数:
101    *      无
102    * 返回值:
103    *      缩放系数
104    */
105       public  double  getScale () {
106           return ( scale ) ;
107       }
108 
109  /**
110    * 功能:
111    *      获得缩放比例
112    * 参数:
113    *      无
114    * 返回值:
115    *      缩放比例
116    */
117       public  Point2D.Double getScaleXY () {
118           return ( scaleXY ) ;
119       }
120 
121  /**
122    * 功能:
123    *      放大
124    * 参数:
125    *      无
126    * 返回值:
127    *      无
128    */
129       public  void  zoomIn () {
130           scale   = scale *  2.0 ;
131       }
132 
133  /**
134    * 功能:
135    *      缩小
136    * 参数:
137    *      无
138    * 返回值:
139    *      无
140    */
141       public  void  zoomOut () {
142           scale   = scale /  2.0 ;
143       }
144 
145  /**
146    * 功能:
147    *      复原
148    * 参数:
149    *      无
150    * 返回值:
151    *      无
152    */
153       public  void  revert () {
154           scale   = scaleOriginal;
155       }
156 
157  /*
158  //======================================================================
159  //  以下为抽象方法定义,具体实现由继承类来完成。
160  //======================================================================
161  */
162 
163  /**
164    * 功能:
165    *      获得屏幕坐标
166    * 参数:
167    *      lon     - 经度
168    *      lat     - 纬度
169    * 返回值:
170    *      屏幕坐标
171    */
172       public abstract  Point getPosition ( double  lon,  double  lat ) ;
173 
174  /**
175    * 功能:
176    *      获得屏幕坐标对应的经纬度
177    * 参数:
178    *      x       - 屏幕水平坐标
179    *      y       - 屏幕垂直坐标
180    * 返回值:
181    *      对应的经纬度
182    */
183       public abstract  Point2D.Double getCoordinate ( int  x,  int  y ) ;
184 
185  /**
186    * 功能:
187    *      获得角度(不同投影含义不同)
188    * 参数:
189    *      lon - 水平坐标
190    *      lat - 垂直坐标
191    * 返回值:
192    *      角度值
193    */
194       //Lambert、Stereogram、Polar类需要重载此方法,Linear、Mercator类直接返回0。
195       public  double  getAngle ( double  lon,  double  lat ) {
196           return ( 0.0 ) ;
197       }
198 
199  /**
200    * 功能:
201    *      画经线、纬线
202    * 参数:
203    *      g       - 图形设备
204    *      f       - 字体
205    *      c       - 画线颜色
206    *      inc_lon - 经线间隔
207    *      inc_lat - 纬线间隔
208    * 返回值:
209    *      无
210    */
211       public abstract  void  drawGridLine ( Graphics2D g, Font f, Color c,  int  inc_lon,  int  inc_lat ) ;
212 
213  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值