我国采用6度分带和3度分带:
1∶2.5万及1∶5万的地形图采用6度分带投影,即经差为6度;从零度子午线开始,自西向东每个经差6度为一投影带,全球共分60个带,用1,2,3,4,5,……60表示.即东经0~6度为第一带,其中央经线的经度为东经3度;东经6~12度为第二带,其中央经线的经度为9度。
1∶1万的地形图、大比例尺工程测量图采用3度分带;从东经1.5度的经线开始,每隔3度为一带,用1,2,3,……120表示,全球共划分120个投影带,即东经1.5~ 4.5度为第1带,其中央经线的经度为东经3度;东经4.5~7.5度为第2带,其中央经线的经度为东经6度。
当地中央经线经度的计算:
六度带中央经线经度的计算:
当地中央经线经度=6°×当地带号-3°,例如:地形图上的横坐标为20345,其所处的六度带的中央经线经度为:6°×20-3°=117°(适用于1∶2.5万和1∶5万地形图)。
三度带中央经线经度的计算:
中央经线经度=3°×当地带号(适用于1∶1万地形图)。
例如y:40532562.035 x:3244054.735;表示带号为40,对应带中央经线为120度,
该点真实坐标为(120.335194,29.313418).
该平面坐标上的点距离赤道距离x为3244.054735公里;
距离中央经线的距离为532.562035-500=32.562035公里;(避免出现在中央经线左侧的数据,其投影数据为负值,数据被统一加上500公里,因此实际计算离中央经线距离时应当减去)
也有给过来点数据不带有带号,则需要根据属性信息去判断坐标点位置,进而计算出带号。
上图中,没有带号,根据属性信息查到对应点位置为东阳市,其经度大约位于120.2,判断出带号。
浙江界于东经118°01'-123°10',北纬27°02'-31°11'之间
120对应为120/3=40带,包含120-1.5~120+1.5 ==>118.5-121.5。
相应的,39带中央经线为117,包含115.5-118.5;
41带中央经线为123,包含121.5-124.5.
39、40、41三个3度分带包含了浙江范围。
除了浙西部分区域(衢州西部)、浙东部分区域(宁波东部、台州东部、舟山群岛)外,浙江大部分范围处于40带
矢量数据在arcgis中的转换方法参考:arcgis坐标转换与投影变换
单独或批量坐标点转换工具:链接:https://pan.baidu.com/s/1JmiHBQTnZTMZWyv_hjwwUQ 密码:puuj
来源参考:http://www.pc6.com/softview/SoftView_104394.html
转换代码
package io.github.lxqjss;
public class testCoordinateTransform {
public static void main(String[] args) {
gsjs(3244054.735,40532562.035);
System.out.println("end---");
}
public static void gsjs(double X ,double Y){
double x,y,L0 = 0,B,L;
x = X;
y = Y;
double p=206264.80625;
for (int i = 1; Y/i >=10; i = i * 10)//对Y坐标处理并求出中央子午线经度
{
y = Y - (int)(Y / i) * i-500000;
L0 =120;//中央经线,请完善代码去计算,这里处理浙江东阳的数据,偷懒直接指定了
}
//按6°带克氏椭球反算
double bt = x / 6367558.4969*p;
double BT = x / 6367558.4969;
double c3=Math.cos(BT)*Math.cos(BT);
double c4=Math.sin(BT)*Math.cos(BT);
double Bf=(bt+(50221746+(293622+(2350+22*c3)*c3)*c3)*c4*Math.pow(10,-10)*p)/p;
double c5=Math.pow(Math.cos(Bf),2);
double c6=Math.sin(Bf)*Math.cos(Bf);
double Nf=6399698.902-(21562.267-(108.973-0.612*c5)*c5)*c5;
double Z=y/(Nf*Math.cos(Bf));
double b2 = (0.5 + 0.003369 * c5) * c6;
double b3 = 0.333333 - (0.166667 - 0.001123 * c5) * c5;
double b4 = 0.25 + (0.16161 + 0.00562 * c5) * c5;
double b5=0.2-(0.1667-0.0088*c5)*c5;
double z2=Math.pow(Z,2);
B = (Bf*p - (1 - (b4 - 0.12 *z2) * z2) * z2 * b2 * p)/3600.0;
L = L0+((1 - (b3 - b5 * z2) * z2) * Z * p)/3600.0;
System.out.println("纬度:"+B+" 经度:"+L+" 中央子午线:"+L0);
}
}