0;a--)for(b=200;b>0;b--);}//voidlcd_delay(ucharms)//{//ucharj;//while(ms--){//for(j=0;j//{;}/" />

pcf8591AD转换程序

pcf8591AD转换程序
pcf8591AD转换程序

/*代做毕业设计全手工不重复安全过关写论文或者做板子电路设计单片机软件编程PLC控制扣扣9.1.4.0.7.8.0.9.9*/

#include"delay.h"

void delay(uchar x)

{

uchar a,b;

for(a=x;a>0;a--)

for(b=200;b>0;b--);

}

//void lcd_delay(uchar ms)

//{

// uchar j;

// while(ms--){

// for(j=0;j<250;j++)

// {;}

// }

//}

void delay1()

{ ; ;}

//void delay3(uint q)

//{

// uint e;

// for(e=0;e

//}

#include"display.h"

#include"delay.h"

//#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

//sbit LATCH1=P2^6;//定义锁存使能端口段锁存

//sbit LATCH2=P2^7;// 位锁存

bit Read_flag;

uchar code table_dula[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

uchar code table_wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

uchar tempdata[8]; //存储显示值的全局变量

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void display(uchar firstbit,uchar lenth)

{

static uchar i=0;

DataPort=0; //清空数据,防止有交替重影

dula=1; //段锁存

dula=0;

DataPort=table_wela[i+firstbit]; //取位码

wela=1; //位锁存

wela=0;

DataPort=tempdata[i]; //取显示数据,段码

dula=1; //段锁存

dula=0;

i++;

if(i==lenth)

i=0;

}

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void timer0_init(void)

{

TMOD=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH0=(65536-2000)/256; //重新赋值2ms

TL0=(65536-2000)%256;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

void timer0(void) interrupt 1

{

uint j;

TH0=(65536-2000)/256; //重新赋值2ms

TL0=(65536-2000)%256;

display(0,6); // 在定时器中断中扫描相当于在主函数中

j++;

if(j==50) //大致100ms

{

j=0;

Read_flag=1; //读标志位置1

}

}

#ifndef __DISPLAY_H__

#define __DISPLAY_H__

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

sbit dula=P2^6;//定义锁存使能端口段锁存

sbit wela=P2^7;// 位锁存

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void display(uchar firstbit,uchar lenth);

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void timer0_init(void);

#endif

#include "i2c.h"

#include "delay.h"

void i2c_start()

{

scl=1;

delay1();

sda=1;

delay1();

sda=0;

delay1();

}

void i2c_stop()

{

sda=0;

delay1();

scl=1;

delay1();

sda=1;

delay1();

}

void i2c_ack()

{

uchar i;

scl=1;

delay1();

while((sda==1)&&(i<250)) i++;

scl=0;

delay1();

}

void i2c_nack()

{

scl=1;

delay1();

sda=1;

scl=0;

delay1();

}

void i2c_write_byte(uchar date) {

uchar i,temp;

temp=date;

for(i=0;i<8;i++)

{

temp=temp<<1;

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

}

scl=0;

delay1();

sda=1;

delay1();

}

uchar i2c_read_byte()

{

uchar i,temp=0;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i<8;i++)

{

temp=temp<<1;

scl=1;

delay1();

temp=temp|sda;

scl=0;

delay1();

}

return (temp);

}

#ifndef __I2C_H__

#define __I2C_H__

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit scl=P2^1;

sbit sda=P2^0;

void i2c_start();

void i2c_stop();

void i2c_ack();

void i2c_nack();

void i2c_write_byte(uchar);

uchar i2c_read_byte();//

#endif

/***********************************************************

名称:PCF8591 ADC

时间:2014年8月5日10:36:33 WRITE BY:KENGKENG

程序功能:

AD/DA转换

***********************************************************/

#include

#include "i2c.h"

#include "delay.h"

#include "display.h"

extern bit Read_flag;

extern uchar tempdata[8];

//只需要对数组声明具体数值不做声明

extern uchar code table_dula[];//={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

//extern uchar code table_wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//

uchar readADC(uchar ch1);

//void WriteDAC(uchar dat)

void main()

{

uchar i,num=0;

timer0_init();

delay(10);

while(1)

{

if(Read_flag)

{

Read_flag=0;

for(i=0;i<5;i++)

num=readADC(0);

num=num*10*5/256;

tempdata[0]=table_dula[num/10]|0x80;

tempdata[1]=table_dula[num%10];

for(i=0;i<5;i++)

num=readADC(1);

num=num*10*5/256;

tempdata[4]=table_dula[num/10]|0x80;

tempdata[5]=table_dula[num%10];

}

}

}

uchar readADC(uchar ch1) //ADC 可移动到i2c.c文件中{

uchar val;

i2c_start();

i2c_write_byte(0x90);

i2c_ack();

i2c_write_byte(ch1);

i2c_ack();

i2c_start();

i2c_write_byte(0x90+1);

i2c_ack();

val=i2c_read_byte();

i2c_nack();

i2c_stop();

return(val);

}

/*void WriteDAC(uchar dat) //DAC

{

i2c_start();

i2c_write_byte(0x90);

i2c_ack();

i2c_write_byte(0x40);

i2c_ack();

i2c_write_byte(dat);

i2c_nack();

i2c_stop();

} */

坐标转换工具说明书-1208

§10.2坐标转换工具 HGO 数据处理软件包提供了坐标转换程序,可以进行地方坐标与WGS-84坐标的相互转换,同时具备参数求解功能。 下面对这个工具进行介绍: 10.2.1概述 首先,介绍一下常见的三种坐标表示方法:经纬度和椭球高(BLH),空间直角坐标(XYZ),平面坐标和水准高程(xyh/NEU)。注意:椭球高是一个几何量,而水准高是一个物理量。 我们通常说的WGS-84坐标是经纬度和椭球这一种,北京54坐标是平面坐标和水准高程这一种,实质是有平面基准和高程基准组成的。 此外,再注意一下坐标转换的严密性问题,在同一个椭球里的纯几何转换都是严密的(BLH<->XYZ),而在不同的基准之间的转换是不严密的。举个例子,在WGS-84坐标和北京54坐标之间是不存在一套转换参数可以全国通用的,因为前者是一个地心坐标系,后者是一个参心坐标系。高程转换是由几何高向物理高转换。因此在每个地方必须用椭球进行局部拟合,通常用7参数模型来拟合。 那么,两个椭球间的坐标转换应该是怎样的呢?一般而言比较严密的是用七参数法(或称布尔莎模型),即X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化K。要求得七参数就需要在一个地区需要3个以上的已知点(7个参数至少7个方程可解,所以需要三个点列出9个方程),如果区域范围不大、最远点间的距离不大于30Km(经验值)的情况可以用三参数,即X平移,Y平移,Z平移,而将X旋转,Y旋转,Z旋转,尺度变化K视为0,所以三参数只是七参数的一种特例。 七参数模型的实质是用一个局部椭球去拟合地方坐标系的形态;所以转换后获得的地方椭球高就是水准高。当然我们也可以把平面和高程两个方向分别进行拟合。例如平面用四参数模型拟合,高程方向则用二次曲面等模型来拟合。这样分开处理的模式相对七参数模型自由度更高。但是由于四参数模型参数较少,表达能力较弱,通常只用于小区域坐标转换。 综上所述,从实用的角度出发,坐标转换程序提供了两种转换策略供给客户选择使用: 1.七参数模型,一步得到地方平面和水准数据。 2.四参数加高程拟合模型,分两步得到地方平面和水准数据。 由于各厂家的模型和流程定义可能是不一样的,这里就我们公司的转换流程描述如下:七参数的转换过程是这样的:

阳历转化成农历法

阳历转化成农历法

————————————————————————————————作者:————————————————————————————————日期:

c++中怎样将阳历转化成农历 已关闭20[ 标签:c++, 阳历, 农历 ] 小^鱼、2011-05-03 11:06 推荐答案 一、原理篇 1.公历转换农历的算法 公历(Gregorian Calendar)与农历(Chinese Lunar Calendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的。 比较常用并且比较简单的公历转换农历算法就是查表方法。首先要保存公历农历的转换信息:以任何一年作为起点,把从这一年起若干年的农历信息保存起来(在我的C++类中,是从1900年作为起点的。选择一个起始点的思想十分重要,在下面的干支纪法和二十四节气中也体现到了)。回想一下,我们平时是怎样来转换公历农历的呢?是查阅历书,历书中有每一天的公历农历,直接一查就可以了。那么我们可不可以也这样做呢?当然可以,但是这样做要收录每一天的信息,工作量就会很大,所以我们要简化这些信息。如何简化呢? 要保存一年的信息,其实只要两个信息就可以了:(1)农历每个月的大小;(2)今年是否有闰月,闰几月以及闰月的大小。用一个整数来保存这些信息就足够了。具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉了12位,再用低四位来表示闰月的月份,没有闰月记为0。比如说,2000年的信息数据是0x0c960,转化成二进制就是1100100101100000,表示的含义是1、2、5、8、10、11月大,其余月小,低四位为0说明没有闰月。2001年的农历信息数据是0x0d954,其中的4表示该年闰4月,月份大小信息就是0x0d95,具体的就是1、2、4、5、8、10、12月大,其余月小。这样就可以用一个数组来保存这些信息。在我的C++类中是用m_lunarInfo这个数组来保存这些信息的。 下面就是公历转换成农历的具体算法: (1)计算所求时间到起始年正月初一的天数。 (2)从起始年份开始,减去每一月的天数,一直到剩余天数没有下一个月多为止。此时,m_lunarInfo的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月。如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月月份数后面一个月,则这个月就是闰月。剩余的天数就是农历日。(具体实现时有所改进。) 2.利于泰勒公式巧算星期 在应用数学中有一个计算某一天是星期几的公式,这就是泰勒公式。公式如下: w = [c÷4] - 2c + y + [y÷4] + [26(m+1)÷10] + d - 1,其中w就是所求日期的星期数。如果求得的数大于(小于)7,就减去(加上)7的倍数,直到余数小于7为止。式子中c是指公

空间直角坐标系与大地坐标系转换程序

空间直角坐标系与大地坐标系转换程序 #include #include #include using namespace std; #define PI (2.0*asin(1.0)) void main() { double a,b,c,d1,d2,f1,f2,m1,m2,B,L,H,X,Y,Z,W,N,e; //cout<<"请分别输入椭球的长半轴、短半轴(国际单位)"<>a>>b; a=6378137; //以WGS84为例 b=6356752.3142; e=sqrt(a*a-b*b)/a; c=a*a/b; int x; cout<<"请输入0或1,0:大地坐标系到空间直角坐标系;1:空间直角坐标系到大地坐标系"<>x; switch(x) { case 0: { cout<<"请分别输入该点大地纬度、经度、大地高(国际单位,纬度经度请按度分秒,分别输入)"<>d1>>f1>>m1>>d2>>f2>>m2>>H; B=PI*(d1+f1/60+m1/3600)/180; L=PI*(d2+f2/60+m2/3600)/180; W=sqrt(1-e*e*sin(B)*sin(B)); N=a/W; X=(N+H)*cos(B)*cos(L); Y=(N+H)*cos(B)*sin(L); Z=(N*(1-e*e)+H)*sin(B); cout<<"空间直角坐标系中X,Y,Z,坐标值(国际单位)分别为"<>X>>Y>>Z; double t,m,n, P,k,B0; m=Z/sqrt(X*X+Y*Y); //t0 B0=atan(m); //初值 n=Z/sqrt(X*X+Y*Y);

坐标转换三参数计算器使用说明

坐标转换三参数计算器使用说明 4.0升级及使用说明: 1、增加了批量处理数据功能。 2、经纬度数据与直角坐标数据可混合输入(经纬度格式:DDD.MMSS,109度04分08.94343秒表示为109.040894343,直角坐标格式单位为米,如X为1234567.89,Y为123456.78,Y坐标无带号)。 3、批量处理数据文件为文本文件,格式为严格每行4个数据,以逗号或空格分开。 点号1,X坐标(或为纬度),Y坐标(或为经度),高程 4、输出文件为文本文件,格式为: 点号1,转换前的X坐标(或为纬度),Y坐标(或为经度),高程 > 转换后的X坐标(或为纬度),Y坐标(或为经度),高程 5、未注册软件无批量处理功能,部分参数隐形显示,但内部坐标转换仍可正常进行。 工作界面:

=========================================== 3.0使用说明 本软件分成上下二部分,上半部为在两个不同椭球体间求坐标转换的三参数,下半部为在两个不同椭球体间的坐标转换。在两个不同椭球体间进行坐标转换首先必需知道坐标转换参数,通常有三参数和七参数转换二种方式,本程序提供三参数转换方式。 例1:我要求手持GPS的北京54(或西安80)坐标转换参数。 向有关部门收集所在工作区内已知点(只要一个控制点)的WGS84坐标系中的经度、纬度、高程,以及同点的北京54(或西安80)坐标系中的直角坐标,即可进行本软件操作了。如某一个控制点的WGS84经度、纬度、高程为: 109度34分28.94343秒, 31度02分25.65526秒, 104.967米该控制点北京54坐标为:

公历和农历之间如何转换

公历和农历之间如何转换? 很多人都一直在找换阴阳历的公式。我也尝试过。曾读过「高平子」天文前辈所着「学历散论」了解古历的变更和阴阳历的缺陷。才知道由於月球转动的不稳定不规则,确定无公式可寻。这也是古代中国每百年必改历的原因。 阴历最大的问题是在如何置闰。好像不难,因为阴历基本法则如下: * 月朔日即是初一 * 月以中气得名 * 以包含雨水中气月为正月,即是「寅」月 * 月无中气者为闰月,以前月同名 如果,日月转动循还有规则的话,推演一套阴阳历转换的公式并不难。问题在有时一个太阴月比一个太阳月还要长。如此一个太阴月就有可能包括两个中气。此双中气月後的阴历月名就全部乱掉了,直到下一个「假」闰月後才调整过来。 一般人接触到的阴阳历是民用历法,它是政府颁令的以东经120度计算的历法或称中原标准时间或北京时。如果,我们用不同时区、不同经度为子午线来重新计算阴阳历,民用历法的置闰法则出了很大的问题。不同时区的闰月可能落在不同月。换言之,在一百年内,任何两个时区的闰月顺序模式是会不相同的。 高平子前辈书中提到了「历理置闰法」。如果应用历理置闰法到不同时区,则所有不同时区的闰月都落在相同月。如此不同时区、不同经度的阴

阳历置闰之问题就消失了。民用置闰和历理置闰的不同是: * 在民用置闰,如果月朔日和中气同一天,则该阴历月包含那个中气。 * 在历理置闰,如果月朔日和中气同一天,月朔日时间必须在中气时间之前,则该阴历月才包含那个中气。 简言之,民用置闰比较月朔和中气日期;历理置闰比较月朔和中气日期、时、分、秒。由此可知,没有精确的太阳和月亮的时间数字,阴历的闰月可能会排错了。 基於这些理由,我着手寻找天文公式计算精确的太阳和月亮在纬度的时间。当年没有网路,发了大半年於美国南加州各大图书馆及大学,找寻答案。1993年出版了「中美天文万年历」一书。书中精确的天文日月时间只从1900到2010年。因恐2011後时间误差超过一分钟,不够精确,不敢印出。今年2002从网路资讯,确定太阳和月亮时间的精确度後,百忙中重新整理资料,提供给需要阴阳历转换公式的朋友。 整理出的太阳和月亮时间数字是从西元1年到2246年。有历理和中国民用两套历法。数字内容清清楚楚的看出民用历法的敝端。例如,从西元1600年到2246年,民用历法双中气的阴历月有22个,历理历法只有5个。民用历法甚至在2033、2128和2242年中,三个月之间居然跑出两个双中气;换言之,三个月中多出两个「假」闰月。前後12个阴历月中有三个闰月,闰月的去留造成许多学者的讨论和困恼。历理历法在此三年中,却没有发现到双中气阴历月。闰月的去留只要把双中气月後的「假」闰月取消,则历理历法近乎於完美。 由此可知,民用历法问题很大,应该废除。上次阴阳历重大改历在1645

坐标系转换问题

坐标系转换问题--WGS84坐标 BJ54 BJ80 2012-10-18 14:37 对于坐标系的转换,给很多GPS的使用者造成一些迷惑,尤其是对于刚刚接触的人,搞不明白到底是怎么一回事。我对坐标系的转换问题,也是一知半解,对于没学过测量专业的人来说,各种参数的搞来搞去实在让人迷糊。在我有限的理解范围内,我想在这里简单介绍一下,主要是抛砖引玉,希望能引出更多的高手来指点迷津。 我们常见的坐标转换问题,多数为WGS84转换成北京54或西安80坐标系。其中WGS84坐标系属于大地坐标,就是我们常说的经纬度坐标,而北京54或者西安80属于平面直角坐标。对于什么是大地坐标,什么是平面直角坐标,以及他们如何建立,我们可以另外讨论。这里不多啰嗦。 那么,为什么要做这样的坐标转换呢? 因为GPS卫星星历是以WGS84坐标系为根据而建立的,我国目前应用的地形图却属于1954年北京坐标系或1980年国家大地坐标系;因为不同坐标系之间存在着平移和旋转关系(WGS84坐标系与我国应用的坐标系之间的误差约为80),所以在我国应用GPS进行绝对定位必须进行坐标转换,转换后的绝对定位精度可由80提高到5-10米。简单的来说,就一句话,减小误差,提高精度。 下面要说到的,才是我们要讨论的根本问题:如何在WGS84坐标系和北京54坐标系之间进行转换。 说到坐标系转换,还要罗嗦两句,就是上面提到过的椭球模型。我们都知道,地球是一个近似的椭球体。因此为了研究方便,科学家们根据各自的理论建立了不同的椭球模型来模拟地球的形状。而且我们刚才讨论了半天的各种坐标系也是建立在这些椭球基准之上的。比如北京54坐标系采用的就是克拉索夫斯基椭球模型。而对应于WGS84坐标系有一个WGS84椭球,其常数采用IUGG第17届大会大地测量常数的推荐值。WGS84椭球两个最常用的几何常数:长半轴:6378137±2(m);扁率:1:298.257223563 之所以说到半长轴和扁率倒数是因为要在不同的坐标系之间转换,就需要转换不同的椭球基准。这就需要两个很重要的转换参数dA、dF。 dA的含义是两个椭球基准之间半长轴的差;dF的含义是两个椭球基准之间扁率倒数的差。在进行坐标转换时,这两个转换参数是固定的,这里,我们给出在进行84—〉54,84—〉80坐标转换时候的这两个参数如下: WGS84>北京54:DA:-108;DF:0.0000005 WGS84>西安80:DA: -3 ;DF: 0 椭球的基准转换过来了,那么由于建立椭球的原点还是不一致的,还需要在dXdYdZ这三个空间平移参量,来将两个不同的椭球原点重合,这样一来才能使两个坐标系的椭球完全转换过来。而由于各地的地理位置不同,所以在各个地方的这三个坐标轴平移参量也是不同的,因此需要用当地的已知点来计算这三个参数。具体的计算方法是: 第一步:搜集应用区域内GPS“B”级网三个以上网点WGS84坐标系B、L、H值及我国坐标系(BJ54或西安80)B、L、h、x值。(注:B、L、H分别为大地坐标系中的大地纬度、大地经度及大地高,h、x分别为大地坐标系中的高程及高程异常。各参数可以通过各省级测绘局或测绘院具有“A”级、“B”级网的单位获得。) 第二步:计算不同坐标系三维直角坐标值。计算公式如下: X=(N+H)cosBcosL Y=(N+H)cosBsinL Z=[N(1-e2)+H]sinB

公历和农历转换算法详解

公历和农历转换算法详解 //C51写的公历转农历和星期 #define uchar unsigned char #define uint unsigned int #include /* 公历年对应的农历数据,每年三字节, 格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小 月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天) 第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期 */ code uchar year_code[597] = { 0x04,0xAe,0x53, //1901 0 0x0A,0x57,0x48, //1902 3 0x55,0x26,0xBd, //1903 6 0x0d,0x26,0x50, //1904 9 0x0d,0x95,0x44, //1905 12 0x46,0xAA,0xB9, //1906 15 0x05,0x6A,0x4d, //1907 18 0x09,0xAd,0x42, //1908 21 0x24,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //1924 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x24,0x97,0xB7, //1928

坐标转换源代码--GPS定位程序(C--)

坐标转换源代码--GPS定位程序(C++) GPS数据处理中为了满足不同的需要,处理的数据要进行坐标转换,得到在不同坐标系统下的结果,下面是笛卡尔坐标系,大地坐标系,站心地平坐标系(线型和极坐标形式)之间的转换源代码: 头文件: #ifndef _COORDCOVERT_H #define _COORDCOVERT_H #include "stdlib.h" //WGS-84椭球体参数 const double a=6378137.0;//长半轴 const double flattening=1/298.257223563;//扁率 const double delta=0.0000001; typedef struct tagCRDCARTESIAN{ double x; double y; double z; }CRDCARTESIAN; typedef CRDCARTESIAN *PCRDCARTESIAN;

//笛卡尔坐标系 typedef struct tagCRDGEODETIC{ double longitude; double latitude; double height; }CRDGEODETIC; typedef CRDGEODETIC *PCRDGEODETIC; //大地坐标系 typedef struct tagCRDTOPOCENTRIC{ double northing; double easting; double upping; }CRDTOPOCENTRIC; typedef CRDTOPOCENTRIC *PCRDTOPOCENTRIC; //站心地平坐标系(线坐标形式) typedef struct tagCRDTOPOCENTRICPOLAR{ double range;

坐标转换COORD4.2使用手册

坐标转换问题的详细了解对于测量很重要,那么请和我一起来讨论这个问题。 首先,我们要弄清楚几种坐标表示方法。大致有三种坐标表示方法:经纬度和高程,空间直角坐标,平面坐标和高程。 我们通常说的WGS-84坐标是经纬度和高程这一种,北京54坐标是平面坐标和高程着一种。 现在,再搞清楚转换的严密性问题,在同一个椭球里的转换都是严密的,而在不同的椭球之间的转换这时不严密的。举个例子,在WGS-84坐标和北京54坐标之间是不存在一套转换参数可以全国通用的,在每个地方会不一样,因为它们是两个不同的椭球基准。 那么,两个椭球间的坐标转换应该是怎样的呢?一般而言比较严密的是用七参数法,即X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化K。要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最远点间的距离不大于30Km(经验值),这可以用三参数,即X平移,Y平移,Z平移,而将X旋转,Y旋转,Z旋转,尺度变化K视为0,所以三参数只是七参数的一种特例。在本软件中提供了计算三参数、七参数的功能。 在一个椭球的不同坐标系中转换需要用到四参数转换,举个例子,在深圳既有北京54坐标又有深圳坐标,在这两种坐标之间转换就用到四参数,计算四参数需要两个已知点。本软件提供计算四参数的功能。 现在举个例子说明:在珠江有一个测区,需要完成WGS-84坐标到珠江坐标系(54椭球)的坐标转换,整个转换过程是 这样的:

本软件使用说明: 本软件采用文件化管理,用户可以将一种转换作为一个文件保存下来,下次使用时从文件菜单中选择打开这个文件来调用所有已有的转换参数。 实例一: 转换要求: 用户在一个佛山测区内使用RTK GPS接收机接受了一些点的WGS-84的坐标,现在希望将其转换为北京54和佛山坐标系下的坐标。用户有佛山测区的一些控制点,这些控制点有WGS-84坐标,也有北京-54坐标也有佛山坐标。 分析: WGS-84坐标和北京54坐标是不同两个椭球的坐标转换,所以要求得三参数或七参数,而北京54和佛山坐标都是同一个椭球,所以他们之间的转换是地方坐标转换,需要求得地方转化四参数,因为要求得到的北京54是平面坐标所以需要设置投影参数。: 步骤: 1.1.新建坐标转换文件,便于下次使用转换是不用重新输入,直接打开即可。 2.2.设置投影参数。 3.3.用一个已知点(WGS84坐标和北京54坐标),计算不同椭球转换的三参数(或七参数)。

公历转农历EXCEL宏讲解

Public Function NongLi(Optional XX_DATE As Date) Dim MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12) Dim curTime, curYear, curMonth, curDay Dim GongliStr, NongliStr, NongliDayStr Dim i, m, n, k, isEnd, bit, TheDate '??è?μ±?°?μí3ê±?? curTime = XX_DATE 'ìì?é??3? TianGan(0) = "?×" TianGan(1) = "òò" TianGan(2) = "±?" TianGan(3) = "??" TianGan(4) = "?ì" TianGan(5) = "?o" TianGan(6) = "?y" TianGan(7) = "Dá" TianGan(8) = "èé" TianGan(9) = "1?" 'μ??§??3? DiZhi(0) = "×ó" DiZhi(1) = "3ó" DiZhi(2) = "òú" DiZhi(3) = "??" DiZhi(4) = "3?" DiZhi(5) = "?è" DiZhi(6) = "??" DiZhi(7) = "?′" DiZhi(8) = "éê" DiZhi(9) = "ó?" DiZhi(10) = "D?" DiZhi(11) = "o¥" 'ê??à??3? ShuXiang(0) = "êó" ShuXiang(1) = "?£" ShuXiang(2) = "?¢" ShuXiang(3) = "í?" ShuXiang(4) = "áú" ShuXiang(5) = "é?" ShuXiang(6) = "?í"

坐标转换器使用说明

大地坐标(BLH) 平面直角坐标(XYZ) 四参数:X 平移、Y 平移、旋转角和比例 七参数:X平移,Y平移,Z 平移,X 轴旋转,Y 轴旋转,Z 轴旋转,缩放比例(尺度比) GPS控制网是由相对定位所求的的基线向量而构成的空间基线基线向量网,在GPS控制网的平差中,是以基线向量及协方差为基本观测量。 图3-1表示为HDS2003数据处理软件进行网平差的基本步骤,从图中可以看到,网平差实际上可以分为三个过程: l、前期的准备工作,这部分是用户进行的。即在网平差之前,需要进行坐标系的设置、并输入已知点的经纬度、平面坐标、高程等。 2、网平差的实际进行,这部分是软件自动完成的; 3、对处理结果的质量分析与控制,这部分也是需要用户分析处理的过程。 图3-1 平差过程 坐标系选择 针对不同的平差,要相应选择不同的坐标系,是否输入相应信息。在笔者接触过的项目中,平差时先通过三维无约束平差后,再进行二维约束平差。由于先进行的时三维无约束平差,是在WGS84坐标系统下进行的。 首先更改项目的坐标系统。在菜单“项目”->“坐标系统”或在工具栏“坐标系统”,则弹出“坐标

系统”对话框,选择WGS-84坐标。 图3-2 坐标系统 这里注意的是,在“投影”下见图,中央子午线是114°。很多情况下这里需要进行修改。 图3-3 WGS84投影 软件中自带的“中国-WGS 84”是允许修改的,我们换种方法:就是新建一个坐标文件,其他参数都和“中国-WGS84”一致,仅仅将中央子午线修改下。 在上图中,点击“新建”,得到“COORD GM”对话框,在“文件”->“新建”,如图

图3-4 新建坐标系统 然后在“设置”->“地图投影”,直接修改中央子午线,这里以81°为例,点击确定后,返回“COORD GM”对话框。 图3-5 投影设置 将输入源坐标和输入目标坐标的椭球,均改为WGS84。在“文件”->“保存”,输入名称和国家(中国),退出操作。

54坐标系、80坐标系、84坐标系之间的转换关系

工程施工过程中,常常会遇到不同坐标系统间,坐标转换的问题。目前国内常见的转换有以下几种:1,大地坐标(BLH)对平面直角坐标(XYZ);2,北京54全国80及WGS84坐标系的相互转换;3,任意两空间坐标系的转换。其中第2类可归入第三类中。所谓坐标转换的过程就是转换参数的求解过程。常用的方法有三参数法、四参数法和七参数法。以下对上述三种情况作详细描述如下: 1,大地坐标(BLH)对平面直角坐标(XYZ) 常规的转换应先确定转换参数,即椭球参数、分带标准(3度,6度)和中央子午线的经度。椭球参数就是指平面直角坐标系采用什么样的椭球基准,对应有不同的长短轴及扁率。一般的工程中3度带应用较为广泛。对于中央子午线的确定有两种方法,一是取平面直角坐标系中Y坐标的前两位*3,即可得到对应的中央子午线的经度。如x=3250212m,y=395121123m,则中央子午线的经度=39*3=117度。另一种方法是根据大地坐标经度,如果经度是在155.5~185.5度之间,那么对应的中央子午线的经度=(155.5+185.5)/2=117度,其他情况可以据此3度类推。 另外一些工程采用自身特殊的分带标准,则对应的参数确定不在上述之列。 确定参数之后,可以用软件进行转换,以下提供坐标转换的程序下载。 2,北京54全国80及WGS84坐标系的相互转换 这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准。 其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3;西安80坐标系,属三心坐标系,大地原点在陕西省径阳县永乐镇,长轴6378140m,短轴6356755,扁率1/298.25722101;WGS84坐标系,长轴6378137.000m,短轴6356752.314,扁率1/298.257223563。由于采用的椭球基准不一样,并且由于投影的局限性,使的全国各地并不存在一至的转换参数。对于这种转换由于量较大,有条件的话,一般都采用GPS联测已知点,应用GPS软件自动完成坐标的转换。当然若条件不许可,且有足够的重合点,也可以进行人工解算。详细方法见第三类。 3,任意两空间坐标系的转换 由于测量坐标系和施工坐标系采用不同的标准,要进行精确转换,必须知道至少3个重合点(即为在两坐标系中坐标均为已知的点。采用布尔莎模型进行求解。布尔莎公式: 对该公式进行变换等价得到: 解算这七个参数,至少要用到三个已知点(2个坐标系统的坐标都知道),采用间接平差模型进行解算: 其中:V 为残差矩阵; X 为未知七参数; A 为系数矩阵; 解之:L 为闭合差 解得七参数后,利用布尔莎公式就可以进行未知点的坐标转换了,每输入一组坐标值,就能求出它在新坐标系中的坐标。但是要想GPS观测成果用于工程或者测绘,还需要将地方直

CORS坐标转换软件使用说明

坐标转换软件使用说明  1、功能介绍  在南京进行测量的同行一直受到坐标系统和已知控制点的困扰, 所以往往许多测量成果因坐标系统问题得不到承认,浪费了大量的人 力物力。基于此:本公司集全部精干技术力量,研发本款坐标转换软 件,可以说:它是全体测量工作者的福音。  南京CORS因为其免费,应用十分广泛,但是使用南京CORS在 很多情况下,因为已知控制点原因无法实地取得平面坐标而限制了 CORS优势的发挥。本软件可以实现基于南京CORS测量的WGS84 坐标与92南京地方坐标双向自由转换,转换精度与权威部门转换成 果比较(在南京市6800平方公里范围内,包括高淳、溧水、六合、 浦口):平面残差中误差优于±5mm、高程残差中误差均优于±1cm。精度完全具有保障,免去到处寻找控制点带来的人力、财力和时间浪费。按照最新城市规范规定,这种模式可以实现城市E级GPS控制 点的平面测量。  本软件是一款后处理软件,即:内业处理软件,它不能在实地计 算坐标,通过事后(采集)或事前(放样)数据处理,同样可以让你 在野外无忧无障碍开展工作。  适用平台:Windows 32位所有系统平台。  2、外业采集数据转换操作介绍  外业测量数据从RTK手簿中以WGS84坐标格式导出,导出以后 将文件复制到计算机,假设文件名为0513.dat。在电脑中启动软件,

界面如下:  图一:程序启动界面  首先选择转换方向下拉列表框,此时选择“WGS84—>NJ92”,表示将WGS84坐标转向92南京地方坐标,此时软件会出现一个按钮 键读入数据并转换,点击该按钮,在弹出的文件对话框中选择从手簿 导出的外业坐标文件。如:0513.dat,点击打开按钮即可完成转换。如图二:  图二:选择原始数据文件  记得一定要选择你的原始数据文件格式在点击打开按钮。转换完 成以后又会在对话框中再出现一个按钮导出转换成果,点击它即可将

bigemap 如何转 2000坐标系

同步视频教程:投影转换(转CGCS2000) 视频教程:如何选择中央子午线或者分度带 注意:投影转换成cgcs2000坐标系需要下载无偏移卫星图像进行转换,有偏移的转换将导致转换后的卫星图像扭曲,坐标错误,无法配准。 第一步:选择无偏移地图源,下载你所需要的卫星图像。 第二步:选择BIGEMAP软件右边工具栏,选择【投影转换】,如下图所示: 2.1 选择说明: 1. 源文件:选择下载好的卫星图像文件(下载目录中后缀为tiff的文件) 2. 源坐标系:打开的源文件的投影坐标系(自动读取,不需要手动填写) 3. 输出文件:选择转换后你要保持文件的文件路径和文件名 4. 目标坐标系:选择你要转换成的目标坐标系,如下图: 选择上图的更多,如下图所示:

1:选择 -CGCS2000 2:选择地区3:选择分度带对应的带号(一般默认,也可以手动修改)选择对应的分度带或者中央子午线(请参看:如何选择分度带?),点击【确定】 5. 重采样算法:投影转换需要将影像的像素重新排列,一次每种算法的效率不一样,一般选择【立方卷积采样】,以达到最好的效果。如下图:

6. 指定变换参数:在不知道的情况下,可以不用填此处信息,如果√上,则如下图: 此参数为【三参数】或者【七参数】,均为国家保密参数,需要到当地的测绘部门或者国土部门,以单位名义签保密协议进行购买,此参数各地都不一样,是严格保密的,请不要随便流通。 第三步:点击【确定】,开始转换,如下图:

第四步:完成后,打开你刚才选择的输出文件夹,里面就是转换后的卫星图像。 第五步:如果你需要套合你手里已经有的矢量文件,请参看:【BIGEMAP无偏移影像叠加配准】

coord使用说明书

坐标转换问题 坐标转换问题的详细了解对于测量很重要,那么请和我一起来讨论这个问题。 首先,我们要弄清楚几种坐标表示方法。大致有三种坐标表示方法:经纬度和高程,空 间直角坐标,平面坐标和高程。 我们通常说的WGS-84坐标是经纬度和高程这一种,北京54坐标是平面坐标和高程着一种。 现在,再搞清楚转换的严密性问题,在同一个椭球里的转换都是严密的,而在不同的椭球之间的转换这时不严密的。举个例子,在WGS-84坐标和北京54坐标之间是不存在一套转换参数可以全国通用的,在每个地方会不一样,因为它们是两个不同的椭球基准。 那么,两个椭球间的坐标转换应该是怎样的呢?一般而言比较严密的是用七参数法,即X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化K。要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最远点间的距离不大于30Km(经验值),这可以用三参数,即X平移,Y 平移,Z平移,而将X旋转,Y旋转,Z旋转,尺度变化K 视为0,所以三参数只是七参数的一种特例。在本软件中提供了计算三参数、七参数的功能。 在一个椭球的不同坐标系中转换需要用到四参数转换,举个例子,在深圳既有北京54坐标又有深圳坐标,在这两种坐标之间转换就用到四参数,计算四参数需要两个已知点。本软件提供计算四参数的功能。 现在举个例子说明:在珠江有一个测区,需要完成WGS-84坐标到珠江坐标系(54椭 球)的坐标转换,整个转换过程是这样的:

本软件使用说明: 本软件采用文件化管理,用户可以将一种转换作为一个文件保存下来,下次使用时从文 件菜单中选择打开这个文件来调用所有已有的转换参数。 实例一: 转换要求: 用户在一个佛山测区内使用RTK GPS接收机接受了一些点的WGS-84的坐标,现在希望 将其转换为北京54和佛山坐标系下的坐标。用户有佛山测区的一些控制点,这些控制点有WGS-84坐标,也有北京-54坐标也有佛山坐标。 分析: WGS-84坐标和北京54坐标是不同两个椭球的坐标转换,所以要求得三参数或七参数,而北京54和佛山坐标都是同一个椭球,所以他们之间的转换是地方坐标转换,需要求得地方转化四参数,因为要求得到的北京54是平面坐标所以需要设置投影参数。: 步骤: 1.1.新建坐标转换文件,便于下次使用转换是不用重新输入,直接打开即可。

大地坐标与空间直角坐标的转换程序代码

#include "stdio.h" #include "math.h" #include "stdlib.h" #include "iostream" #define PI 3.1415926535897323 double a,b,c,e2,ep2; int main() { int m,n,t; double RAD(double d,double f,double m); void RBD(double hd); void BLH_XYZ(); void XYZ_BLH(); void B_ZS(); void B_FS(); void GUS_ZS(); void GUS_FS(); printf(" 大地测量学\n"); sp1:printf("请选择功能:\n"); printf("1.大地坐标系到大地空间直角坐标的转换\n"); printf("2.大地空间直角坐标到大地坐标系的转换\n"); printf("3.贝塞尔大地问题正算\n"); printf("4.贝塞尔大地问题反算\n"); printf("5.高斯投影正算\n"); printf("6.高斯投影反算\n"); printf("0.退出程序\n"); scanf("%d",&m); if(m==0)exit(0); sp2:printf("请选择椭球参数(输入椭球序号):\n"); printf("1.克拉索夫斯基椭球参数\n"); printf("2.IUGG_1975椭球参数\n"); printf("3.CGCS_2000椭球参数\n"); printf("0.其他椭球参数(自行输入)\n"); scanf("%d",&n); switch(n) { case 1:a=6378245.0;b=6356863.0188;c=6399698.9018;e2=0.00669342162297;ep2=0.0067385254146 8;break;

阴历阳历转换计算公式

1、阳历日期推算阴历日期的方法: 前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月 为十六日),以月晦为二十九日(大月为三十日)。 如要知道1984年6月8日是阴历几日?可以利用公式推算阴历日期: 设:公元年数-1977(或1901)=4Q+R 则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n (注:式中Q、R、n均为自然数,R<4) 例:1994年5月7日的阴历日期为: 1994-1977=17=4×4+1 故:Q=4,R=1 则:5月7日的阴历日期为: 14×4+10.6(1+1)+(31+28+31+31+7)-29.5n =204.2- 29.5n 然后用29.5去除204.2得商数 6......27.2,6即是n值,余数27即是阴历二十七日2.公历换算为农历 二十四节气在黄道上的位置是固定的,但各年有平年和闰年之分,就使得回归年天数与 实际天数不等,每年在日历上可差一天。这样可以将阴历经过任意整回归年在现在的日历上 查到阳历(阳历一年相当阴历的月数为365.2422/29.530588=12.36827个月)。例如,可先在1995年的日历上查得与(该年)阴历对应的阳历日期,这样就找到了临时落脚点, 也就是找到了阴阳互换的关键。例如,可先以阴历四月初一(日)为引数,在1995年日历上查到对应的阳历为4月30日。由于已经计算出经过的月数,将经过的月数的尾数(小数)化为日,加在4月30日上,就得到经过(1995-1070)整年数的阳历日期,也就是起始阴 历日期对应的阳历日期,即得到了待查的日期为4月30日加上0.64957×29.530588得到(1070年)5月19.1821840日。这样就得到了所给例子的阴阳历日期换算结果……”。 0.64957月的由来, (1995-1070)×12.36827=11440.64957月 已知依泽公生于梁龙德二年(922)六月二十一日,依下表提供的2099年各月初一日的公历月日数,可以算出龙德二年六月二十一日的公历月日数 公元2099年农历各月初一日的公历月日 (2099-922)×12.36827=1455.45379月 余数为0.45379月×29.530588日=13.4O日 因2099年五月初一日(包括该年闯二月)在公历6月19日,加上计算所得的13日为龙德二年六月初一日的公历月日,即该年7月2日,则该年农历六月二十一日为该年7月22日。 3.计算结果的订正 实际上上列公历换算为农历时常有较大的误差,如熙宁三年四月初一日为公历1070年5月13日,而不是5月19日。通过中国历法所用的于支记日法求算所用两历的干支,对所 求结果加以订正。 如,马依泽公生于回历310年3月20日,自回历历元起算共历日数为: 自回历元旦至其3月20日,共历79日。 自回历元年元旦至309年元旦,共历113个闰年196个平年。又回历历元在公历622年7月16日,已知该日的干支序数为50,癸丑日,减1(因自甲子起算),余49应加入下列算式中, (309 ×354+113+79+49)÷60=1827.116667

excel公历转农历的四种方法

excel公历转农历的四种方法 excel公历转农历方法一:使用text函数 A列是公历日期,我们在B1单元格输入公式:=TEXT(A1,"[$-130000]yyyy年m月"&I F(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"d"),下拉完成公历转农历。 excel公历转农历方法二:使用text+MID函数 A列仍然是公历,B1输入公式:=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A1,"[$-13 0000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉戌亥",MOD(TEXT(A1,"[$-130000]e")-4, 12)+1,1)&"年"&TEXT(A1,"[$-130000][DBNum1]m月d日"即可。 excel公历转农历方法三:使用text+MID+ CHOOSE+ YEAR函数 A1为公历,B1输入:=CHOOSE(MOD(YEAR(A1)-1900,10)+1,"庚","辛","壬","癸","甲", "乙","丙","丁","戊","己")&CHOOSE(MOD(YEAR(A1)-1900,12)+1,"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥")&TEXT(A1,"[dbnum1][$-130000]年m月"&IF(--TEXT(A1, "[$-130000]d")<11,"初","")&TEXT(A1,"[dbnum1][$-130000]d")) excel公历转农历方法四:使用自定义函数 上面介绍的excel公历转农历都是使用excel内置函数完成的,有一个弊端就是公式太长,如果使用自定义函数,在公式栏就可以简化输入。 如下图所示,我们在B2输入公式:=nongli(A2),即可。C列农历简称中C2公式是:=RIGHT(B2,LEN(B2)-8)。

坐标系转换c语言作业

《程序设计语言(C)》大作业报告 题目:坐标系的转换 完成人: 小组构成及分工: *******独自完成程序的书写及调试. 问题定义: 大地坐标和空间直角坐标系以及其他坐标系之间转换在卫星大地测量中经常用到的坐标系有,空间直角坐标系和大地直角坐标。为了实现测量数据的快速高效的在不同的坐标系的转换,方便在学习及应用的中。需要编写一程序实现数据的转换,实现空间直角坐标系与大地直角坐标之间在同一个系统中转换。 开发工具:Visual C++ 6.0 数据结构描述: 用不同的变量表示不同的坐标,变量选择时根据使用的习惯方便使用者的识别。 X:表示大地直角坐标的纵坐标; Y:表示大地直角坐标的横坐标; Z表示大地直角坐标的竖坐标 L:表示空间直角坐标的经度; B:表示空间直角坐标的纬度; H:表示空间直角坐标的高度; 算法描述: 通过编写一个主函数描述出整个程序的主体不分,然后通过调用函数实现坐标的转换。 程序调试情况: 坐标由大地直角坐标系中的转换为空间直角坐标系的坐标: 大地直角坐标转换后空间直角坐标: B=60; X=2055059.130122; L=50; Y=2449123.986892; H=100; Z=5500477.615329;

坐标由空间直角坐标系中的坐标转换为大地直角坐标系中的坐标; 空间直角坐标转换后大地直角坐标; X=100; B=-127.103127844; Y=100; L=45.000000000; Z=10000; H=-6391994.685276; 参考文献或网站: 1.《控制测量学》(下册)第三版孔祥元郭际明主编武汉大学出版社; 2. 《数字测图原理与方法》第二版潘正风程效军成枢王腾军宋伟东 邹进贵编著武汉大学出版社; 3.《C 程序设计语言》魏东平朱连章于广斌编著;电子工业出版社 心得体会: 写这个大作业确实让我收获了许多! 1.写这次计算机大作业,让我经历了一个难忘的过程。自己的是必须得自己独立自主的想办法去解决,没人会为与自己没多大关系的事分很多神的! 2.经历了过程,让我学到了些东西也在解决困难的过程中认识了些学长,他们也教会了我许多学习经验。 3.在自己调试程序的过程中也知道了点以前写程序时不知道的细节问题,如:数据的类型在计算时会起到一定的限制,计算三角函数时数值向角度的转换.....;这就是知识! 4.这次写的作业题目是出自本专业的题,这次写计算机作业的所有收获都是以后学习的经验、财富.....! 5.在本次作业的调试中真的是考验了我的耐性。因为一个函数中的数据类型的错误,导致调了近两天。 6.知识水平的有限,所以让我学会了怎样以更好的方式去向别人请教学问!

相关文档
最新文档