- 浏览: 5162799 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
这个程序是根据网上找到的VC代码改写而成的Delphi库单元,经验算,比较准确,支持西安80及北京54。
本人原创,转载请保留本人信息。http://wallimn.iteye.com
代码及使用方法如下(javaeye的博客代码高亮竟然不支持delphi,抗议):
unit Translate;
{
经纬度坐标与高斯-克吕格投影坐标的互算。
时间:2009-05-11
博客:http://wallimn.iteye.com
转载请保留此信息
}
interface
uses Math;
type
TTranslate = class(TObject)
protected
a,f,e2,e12:double;
A1,A2,A3,A4:double;
private
L0:double; // 中央子午线经度
public
procedure BL2xy(B,L :double; var x,y :double);
procedure xy2BL(x,y :double; var B,L :double);
procedure SetL0(dL0:double);
end;
TTranslate_Krasovsky = class(TTranslate)
public
constructor Create;
end;
TTranslate_IUGG1975=class(TTranslate)
public
constructor Create;
end;
function Dms2Rad( Dms:double) : double ;
function Rad2Dms( Rad:double) : double ;
implementation
{
将度、分、秒形式转化成弧度
}
function Dms2Rad( Dms:double) : double ;
var
Degree,Miniute,Second:Double;
Rad:Double;
Sign:Integer;
begin
if(Dms >= 0) then
Sign := 1
else
Sign := -1;
Dms := abs(Dms);
Degree := floor(Dms);
Miniute := floor(Dms * 100) mod 100;
Second := floor(Dms * 10000) mod 100;
Rad := Sign * (Degree + Miniute / 60.0 + Second / 3600.0) * PI / 180.0;
result:= Rad;
end;
{
将弧度转换成度、分、秒表示形式;
转换的结果是度,
}
function Rad2Dms( Rad:double) : double ;
var
Degree, Miniute, Second:double;
Sign:integer;
begin
if(Rad >= 0) then
Sign := 1
else
Sign := -1;
Rad := abs(Rad * 180.0 / PI);
Degree := floor(Rad);
Miniute := floor(Rad * 60) mod 60;
Second := floor(Rad * 3600) mod 60;
Result := Sign * (Degree + Miniute / 100.0 + Second / 10000.0);
//Result:=Rad * 180/PI;
end;
{ TTranslate }
{
B,L 为以度为单位的纬度及经度
x,y 为转换结果,即投影坐标,其中y不带带号
时间:2009-05-11
博客:http://wallimn.iteye.com
}
procedure TTranslate.BL2xy(B, L: double; var x, y: double);
var
XX, N, t, t2, m, m2, ng2:double;
sinB, cosB:double;
begin
B:= B*PI/180.0;
L:= L*PI/180.0;
XX := A1 * B * 180.0 / PI + A2 * sin(2 * B) + A3 * sin(4 * B) + A4 * sin(6 * B);
sinB := sin(B);
cosB := cos(B);
t := tan(B);
t2 := t * t;
N := a / sqrt(1 - e2 * sinB * sinB);
m := cosB * (L - L0);
m2 := m * m;
ng2 := cosB * cosB * e2 / (1 - e2);
//x,y的计算公式见孔祥元等主编武汉大学出版社2002年出版的《控制测量学》
x := XX + N * t * ((0.5 + ((5 - t2 + 9 * ng2 + 4 * ng2 * ng2) / 24.0 + (61 -
58 * t2 + t2 * t2) * m2 / 720.0) * m2) * m2);
y := N * m * ( 1 + m2 * ( (1 - t2 + ng2) / 6.0 + m2 * ( 5 - 18 * t2 + t2 * t2
+ 14 * ng2 - 58 * ng2 * t2 ) / 120.0));
y := y + 500000;
end;
{
设置中央子午线的经度,以度为单位
}
procedure TTranslate.SetL0(dL0: double);
begin
//L0:= Dms2Rad(dL0);
L0:=dL0*PI/180.0;
end;
{
x,y 投影坐标,其中y不带带号
B,L 为转换结果,以度为单位的纬度及经度
时间:2009-05-11
博客:http://wallimn.iteye.com
}
procedure TTranslate.xy2BL(x, y: double; var B, L: double);
var
sinB, cosB, t, t2, N ,ng2, V, yN:double;
preB0, B0:double;
eta:double;
begin
y := y- 500000;
B0 := x / A1;
repeat
begin
preB0 := B0;
B0 := B0 * PI / 180.0;
B0 := (x - (A2 * sin(2 * B0) + A3 * sin(4 * B0) + A4 * sin(6 * B0))) / A1;
eta := abs(B0 - preB0);
end
until(eta <= 0.000000001);
B0 := B0 * PI / 180.0;
B := Rad2Dms(B0);
sinB := sin(B0);
cosB := cos(B0);
t := tan(B0);
t2 := t * t;
N := a / sqrt(1 - e2 * sinB * sinB);
ng2 := cosB * cosB * e2 / (1 - e2);
V := sqrt(1 + ng2);
yN := y / N;
B := B0 - (yN * yN - (5 + 3 * t2 + ng2 - 9 * ng2 * t2) * yN * yN * yN * yN /
12.0 + (61 + 90 * t2 + 45 * t2 * t2) * yN * yN * yN * yN * yN * yN / 360.0)
* V * V * t / 2;
L := L0 + (yN - (1 + 2 * t2 + ng2) * yN * yN * yN / 6.0 + (5 + 28 * t2 + 24
* t2 * t2 + 6 * ng2 + 8 * ng2 * t2) * yN * yN * yN * yN * yN / 120.0) / cosB;
//B:=Rad2Dms(B);
//L:=Rad2Dms(L);
B:=B*180.0/PI;
L:=L*180.0/PI;
end;
{ TTranslate_Krasovsky }
constructor TTranslate_Krasovsky.Create;
begin
a := 6378245;
f := 298.3;
e2 := 1 - ((f - 1) / f) * ((f - 1) / f);
e12 := (f / (f - 1)) * (f / (f - 1)) - 1;
A1 := 111134.8611;
A2 := -16036.4803;
A3 := 16.8281;
A4 := -0.0220;
end;
{ TTranslate_IUGG1975 }
constructor TTranslate_IUGG1975.Create;
begin
a := 6378140;
f := 298.257;
e2 := 1 - ((f - 1) / f) * ((f - 1) / f);
e12 := (f / (f - 1)) * (f / (f - 1)) - 1;
A1 := 111133.0047; //这几个A是什么意思?
A2 := -16038.5282;
A3 := 16.8326;
A4 := -0.0220;
end;
{
引用此库单元,具体使用方法如下:
procedure TFrmMain.Button1Click(Sender: TObject);
var
t:TTranslate;
L,B:Double;
begin
t :=TTranslate_IUGG1975.create;
t.SetL0(111);
t.xy2BL(strToFloat(edtX.text),strToFloat(edtY.text),L,B);
showmessage('L='+FloatToStr(L)+' B='+FloatToStr(B));
//运行结果:L=20,B=109.15
end;
}
end.
注:我的网络硬盘(http://wallimn.ys168.com)上放了这个转换工具,需要的请自行下载
本人原创,转载请保留本人信息。http://wallimn.iteye.com
代码及使用方法如下(javaeye的博客代码高亮竟然不支持delphi,抗议):
unit Translate;
{
经纬度坐标与高斯-克吕格投影坐标的互算。
时间:2009-05-11
博客:http://wallimn.iteye.com
转载请保留此信息
}
interface
uses Math;
type
TTranslate = class(TObject)
protected
a,f,e2,e12:double;
A1,A2,A3,A4:double;
private
L0:double; // 中央子午线经度
public
procedure BL2xy(B,L :double; var x,y :double);
procedure xy2BL(x,y :double; var B,L :double);
procedure SetL0(dL0:double);
end;
TTranslate_Krasovsky = class(TTranslate)
public
constructor Create;
end;
TTranslate_IUGG1975=class(TTranslate)
public
constructor Create;
end;
function Dms2Rad( Dms:double) : double ;
function Rad2Dms( Rad:double) : double ;
implementation
{
将度、分、秒形式转化成弧度
}
function Dms2Rad( Dms:double) : double ;
var
Degree,Miniute,Second:Double;
Rad:Double;
Sign:Integer;
begin
if(Dms >= 0) then
Sign := 1
else
Sign := -1;
Dms := abs(Dms);
Degree := floor(Dms);
Miniute := floor(Dms * 100) mod 100;
Second := floor(Dms * 10000) mod 100;
Rad := Sign * (Degree + Miniute / 60.0 + Second / 3600.0) * PI / 180.0;
result:= Rad;
end;
{
将弧度转换成度、分、秒表示形式;
转换的结果是度,
}
function Rad2Dms( Rad:double) : double ;
var
Degree, Miniute, Second:double;
Sign:integer;
begin
if(Rad >= 0) then
Sign := 1
else
Sign := -1;
Rad := abs(Rad * 180.0 / PI);
Degree := floor(Rad);
Miniute := floor(Rad * 60) mod 60;
Second := floor(Rad * 3600) mod 60;
Result := Sign * (Degree + Miniute / 100.0 + Second / 10000.0);
//Result:=Rad * 180/PI;
end;
{ TTranslate }
{
B,L 为以度为单位的纬度及经度
x,y 为转换结果,即投影坐标,其中y不带带号
时间:2009-05-11
博客:http://wallimn.iteye.com
}
procedure TTranslate.BL2xy(B, L: double; var x, y: double);
var
XX, N, t, t2, m, m2, ng2:double;
sinB, cosB:double;
begin
B:= B*PI/180.0;
L:= L*PI/180.0;
XX := A1 * B * 180.0 / PI + A2 * sin(2 * B) + A3 * sin(4 * B) + A4 * sin(6 * B);
sinB := sin(B);
cosB := cos(B);
t := tan(B);
t2 := t * t;
N := a / sqrt(1 - e2 * sinB * sinB);
m := cosB * (L - L0);
m2 := m * m;
ng2 := cosB * cosB * e2 / (1 - e2);
//x,y的计算公式见孔祥元等主编武汉大学出版社2002年出版的《控制测量学》
x := XX + N * t * ((0.5 + ((5 - t2 + 9 * ng2 + 4 * ng2 * ng2) / 24.0 + (61 -
58 * t2 + t2 * t2) * m2 / 720.0) * m2) * m2);
y := N * m * ( 1 + m2 * ( (1 - t2 + ng2) / 6.0 + m2 * ( 5 - 18 * t2 + t2 * t2
+ 14 * ng2 - 58 * ng2 * t2 ) / 120.0));
y := y + 500000;
end;
{
设置中央子午线的经度,以度为单位
}
procedure TTranslate.SetL0(dL0: double);
begin
//L0:= Dms2Rad(dL0);
L0:=dL0*PI/180.0;
end;
{
x,y 投影坐标,其中y不带带号
B,L 为转换结果,以度为单位的纬度及经度
时间:2009-05-11
博客:http://wallimn.iteye.com
}
procedure TTranslate.xy2BL(x, y: double; var B, L: double);
var
sinB, cosB, t, t2, N ,ng2, V, yN:double;
preB0, B0:double;
eta:double;
begin
y := y- 500000;
B0 := x / A1;
repeat
begin
preB0 := B0;
B0 := B0 * PI / 180.0;
B0 := (x - (A2 * sin(2 * B0) + A3 * sin(4 * B0) + A4 * sin(6 * B0))) / A1;
eta := abs(B0 - preB0);
end
until(eta <= 0.000000001);
B0 := B0 * PI / 180.0;
B := Rad2Dms(B0);
sinB := sin(B0);
cosB := cos(B0);
t := tan(B0);
t2 := t * t;
N := a / sqrt(1 - e2 * sinB * sinB);
ng2 := cosB * cosB * e2 / (1 - e2);
V := sqrt(1 + ng2);
yN := y / N;
B := B0 - (yN * yN - (5 + 3 * t2 + ng2 - 9 * ng2 * t2) * yN * yN * yN * yN /
12.0 + (61 + 90 * t2 + 45 * t2 * t2) * yN * yN * yN * yN * yN * yN / 360.0)
* V * V * t / 2;
L := L0 + (yN - (1 + 2 * t2 + ng2) * yN * yN * yN / 6.0 + (5 + 28 * t2 + 24
* t2 * t2 + 6 * ng2 + 8 * ng2 * t2) * yN * yN * yN * yN * yN / 120.0) / cosB;
//B:=Rad2Dms(B);
//L:=Rad2Dms(L);
B:=B*180.0/PI;
L:=L*180.0/PI;
end;
{ TTranslate_Krasovsky }
constructor TTranslate_Krasovsky.Create;
begin
a := 6378245;
f := 298.3;
e2 := 1 - ((f - 1) / f) * ((f - 1) / f);
e12 := (f / (f - 1)) * (f / (f - 1)) - 1;
A1 := 111134.8611;
A2 := -16036.4803;
A3 := 16.8281;
A4 := -0.0220;
end;
{ TTranslate_IUGG1975 }
constructor TTranslate_IUGG1975.Create;
begin
a := 6378140;
f := 298.257;
e2 := 1 - ((f - 1) / f) * ((f - 1) / f);
e12 := (f / (f - 1)) * (f / (f - 1)) - 1;
A1 := 111133.0047; //这几个A是什么意思?
A2 := -16038.5282;
A3 := 16.8326;
A4 := -0.0220;
end;
{
引用此库单元,具体使用方法如下:
procedure TFrmMain.Button1Click(Sender: TObject);
var
t:TTranslate;
L,B:Double;
begin
t :=TTranslate_IUGG1975.create;
t.SetL0(111);
t.xy2BL(strToFloat(edtX.text),strToFloat(edtY.text),L,B);
showmessage('L='+FloatToStr(L)+' B='+FloatToStr(B));
//运行结果:L=20,B=109.15
end;
}
end.
注:我的网络硬盘(http://wallimn.ys168.com)上放了这个转换工具,需要的请自行下载
发表评论
-
Delphi中编程实现TWebBrowser查找及上一个、下一个功能
2016-08-18 13:58 1357代码比较简单,全部内容如下: //1:向下搜索;-1:向上 ... -
OLEDB的Excel的IMEX和HDR是什么意思
2013-11-23 21:15 2124转自:http://blog.csdn.net/baple/a ... -
c#获取应用程序目录
2013-10-23 22:35 1732string str1 =Process.GetCurrent ... -
Visual C# 方案 -> 文本操作快捷键
2013-10-07 22:34 2062转自:http://technet.microsoft.com ... -
Visual Studio 2005快捷键大全
2013-10-07 22:29 1646转自:http://www.cnblogs.com/mekon ... -
C#正则表达式测试小工具
2013-10-04 18:51 4782C#的正则表达式使用比较方便,但复杂的正则表达式还是需要测 ... -
C#正则表达式语法规则详解
2013-10-04 17:26 4044正则表达式通常包含字 ... -
C# WINFORM 捕获全局异常
2013-10-01 11:56 3040using System; using System.Coll ... -
Visual C# 中XML注释的使用(含注释在开发时显示换行)
2013-10-01 11:54 2468在C#智能注释时,常常希望它能在开发时显示为换行,使得提示更加 ... -
DevExpress汉化(WinForm)
2013-09-19 17:27 8292/* *隔壁老王原创,2013-09-21,转载请保留本人信息 ... -
VC中的CImage类
2011-04-17 22:19 8942今天查找如何实现 ... -
VC旋转图片
2011-04-16 16:45 3774转自:http://hi.baidu.com/sweetpig ... -
VC多线程编程(转)
2010-12-22 21:11 3201原文地址:http://www.cnblo ... -
Manifest的问题
2010-05-11 10:08 2306原始连接:http://www.zming ... -
Asp.Net中Word,Excel等office com组件操作权限的问题
2010-05-06 13:57 10204近日在打开原来写的一 ... -
如何注销windows server2003 服务器中的远程连接
2009-12-14 01:29 3809碰到超过远程连接数而无法连接服务器,可以采用如下方法解决 ... -
访问WebBrowser控件中的HTML源码
2009-12-11 22:13 4123为了实现在自己的程序中显示HTML文档,我们一般采用IE(In ... -
Makefile详解(3/3)
2009-12-01 12:32 1545一、函数库文件的成员 一个函数库文件由多个文件组成。你可以以 ... -
Makefile详解(2/3)
2009-12-01 12:29 2225八、目标变量 前面我们所讲的在Makefile中定义的变量都 ... -
Makefile详解(1/3)
2009-12-01 12:27 2187原文地址:http://blog.csdn ...
相关推荐
高斯坐标系统是一种在中国广泛使用的投影方法,它将地球表面的经纬度转换为二维平面坐标,分为多个六度带,每个带内使用不同的参数进行转换。 高斯正反算是指高斯投影坐标到经纬度的转换过程,以及经纬度到高斯坐标...
4. **高斯-克吕格公式**:使用特定的数学公式将经纬度转换为高斯平面坐标。公式包括中央子午线的投影长度因子、赤道的投影长度因子以及偏移量的计算。 5. **反转换**:如果你已经有一个平面坐标,并想要找到对应的...
- 转换模块:执行高斯坐标到经纬度或经纬度到高斯坐标的转换,使用上述的数学公式。 - 输出模块:显示或保存转换后的结果。 在分析和使用这个Visual Basic源码时,确保理解每个函数和变量的作用,以及它们如何协同...
高斯坐标到经纬度转换**: - 反向执行上述步骤,从X、Y坐标反解出经度和纬度,这通常涉及到非线性方程组的求解。 **3. 经纬度到UTM坐标转换**: - 同样先确定UTM带号,然后应用横轴墨卡托投影公式,包括地球半径...
1. 将经纬度转换为大地坐标:通过使用大地坐标系的参数,如长半轴和扁平率,计算出对应的X和Y坐标。 2. 高斯投影:利用高斯-克吕格投影公式,将大地坐标转换为平面直角坐标,保持比例尺尽可能一致。 3. 带号和偏移...
本文将深入探讨三种不同基准面下的高斯坐标与经纬度坐标之间的转换方法。高斯坐标系统是一种用于平面坐标表示的数学体系,通常用于大地测量和地图制作,而经纬度坐标则是地球表面位置的标准表示方式,基于球面或椭...
- **墨卡托投影**:一种常用的等角投影方法,可以将经纬度转换为直角坐标。它保持了角度的准确性,但会产生面积变形。 - **UTM(Universal Transverse Mercator)投影**:全球分为60个带,每个带使用单独的墨卡托...
本篇文章将详细讲解"54坐标转80坐标"以及"经纬度与高斯坐标间的转换"这两个核心知识点。 首先,我们要理解54坐标系统和80坐标系统。在中国,54坐标系统指的是1954年北京坐标系,它是基于苏联1942年普尔科沃大地坐标...
这里提到的"高斯坐标转换,高斯坐标转换经纬度,Visual Basic源码"是指使用Visual Basic编程语言实现的一种程序,用于进行这种坐标转换。下面我们将深入探讨高斯坐标转换的概念、其重要性以及如何使用Visual Basic进行...
Delphi编制的一个简单的经纬度和高斯坐标系之间变换程序。实现了6度分带和3度分带的变换,操作模式以文件作为输入输出,文件格式竖排,各列内容可从打开对话框中自行选择。右键的快捷菜单中还有一些附加功能可为你...
总的来说,高斯坐标转换是一个复杂但重要的地理信息处理过程,通过Visual Basic这样的编程语言,我们可以实现自动化的转换算法,提高效率并减少人为错误。理解和掌握这个过程有助于我们在GIS项目中更好地处理和分析...
在IT领域,坐标转换与经纬度转换是GIS(地理信息系统)和导航系统中的核心概念。这些转换对于确保地理数据的准确性和一致性至关重要。下面将详细解释这些知识点。 首先,坐标转换涉及不同坐标系之间的变换。在空间...
WCS-84坐标系的X,Y,Z与经纬度之间的相互转换
经纬度坐标及高斯坐标的转换代码 在GIS( Geographic Information System,地理信息系统)中,经纬度坐标和高斯坐标是两种常用的坐标系。经纬度坐标系是以地球表面的经度和纬度为坐标轴的二维坐标系,而高斯坐标系...
在"经纬度坐标和xy坐标转换程序"中,可能包含了这些转换的算法和代码实现,可以帮助用户快速便捷地完成坐标间的转换。 在实际应用中,这些转换程序对于GIS数据处理、地图制作、定位服务等领域具有重要意义。比如,...
本文将详细讨论“C语言版经纬度与高斯投影相互转换函数”,这是一组用于在不同坐标系之间进行转换的实用程序。我们将深入探讨C语言实现、高斯投影以及与北斗(BDS)和全球定位系统(GPS)坐标的关系。 首先,让我们...
在本例中,这个名为"MyGeocoordTranstorm"的DLL可能包含了平面坐标到经纬度,以及经纬度到平面坐标的转换算法。 转换过程涉及选择合适的椭球体模型,如北京54、西安80、WGS84和National2000。这些椭球体是地球几何...
转换工具的核心功能就是将大地坐标的经纬度转换为高斯坐标,反之亦然。这个过程涉及到投影变换,其中最常见的是高斯-克吕格投影。在3度带或6度带的划分下,每个带内采用不同的投影公式,确保了在该带内投影误差较小...
这个转换过程涉及到“高斯坐标正反算”,即从高斯平面坐标到大地经纬度的转换,以及从大地经纬度到高斯平面坐标的转换。下面我们将详细探讨这些概念。 首先,高斯投影是由德国数学家卡尔·弗里德里希·高斯提出的,...