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

来源:互联网 发布:军工加人工智能概念股 编辑:程序博客网 时间:2024/05/22 09:46
气象上常用的坐标投影,包括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 }
原创粉丝点击