c语言编写空间坐标转换,用C语言实现地图坐标投影的转换.doc

PAGE

word文档 可自由复制编辑

毕 业 设 计(论文)

水利与生态工程学院 系(院) 测绘工程 专业

毕业设计(论文)题目 高斯-克吕格投影变换的程序实现

高斯-克吕格投影的程序实现

The conversion of Gauss-Kruger projection in C language

总计 毕业设计(论文) 25 页

表 格 2 个

插 图 6 幅

word文档 可自由复制编辑

摘 要

论文是对用C语言实现地图投影转换的详细论述,前两章是对C语言和地图投影的相关知识进行简单介绍,并将研究地图投影转换的目的、意义和研究现状进行阐述,让我们对相关知识有了深刻认识与了解;后两章是具体实现的程序代码,程序运行实现的截图以及具体数据进行计算对程序进行验证,说明其可行性与正确性,得出最后的结论。

关键词:地图投影 C语言 高斯-克吕格投影 高斯正反算

word文档 可自由复制编辑

Abstract

This dissertation is to research the Issue of Map projection conversion achieved with c language in detail. The first two chapters introduce us the C language and the knowledge of map projection briefly, and show the purpose, meaning and situation of study of map projection transformation one by one, which give us a deep understanding of this knowledge; the last two chapters describe the programming source code, and the pictures and specific cases and data in order to make sure its feasibility and correctness, finally , draw a conclusion.

Keywords: Map projection; C language; Gauss-Kruger projection; Gauss formula for the positive and negative

word文档 可自由复制编辑

目 录

TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc326159509" 摘要 PAGEREF _Toc326159509 \h I

HYPERLINK \l "_Toc326159510" ABSTRACTⅡ

HYPERLINK \l "_Toc326159511" 第一章 引言1

HYPERLINK \l "_Toc326159512" 1.1地图投影简介1

HYPERLINK \l "_Toc326159513" 1.2研究地图投影转换的目的和意义1

HYPERLINK \l "_Toc326159514" 1.3地图投影研究概括及趋势综述1

HYPERLINK \l "_Toc326159515" 1.4研究思路和技术方法2

HYPERLINK \l "_Toc326159516" 1.5 C语言概述3

HYPERLINK \l "_Toc326159517" 第二章 高斯-克吕格投影(高斯投影)4

HYPERLINK \l "_Toc326159518" 2.1高斯投影的基本概念4

HYPERLINK \l "_Toc326159519" 2.2高斯投影坐标正反算公式7

HYPERLINK \l "_Toc326159520" 第三章 c语言程序代码13

HYPERLINK \l "_Toc326159521" 3.1地图投影变换的计算程序流程图13

HYPERLINK \l "_Toc326159522" 3.2 C语言程序源代码 PAGEREF _Toc326159522 \h 15

HYPERLINK \l "_Toc326159523" 3.3程序运行截图19

HYPERLINK \l "_Toc326159524" 第四章 算例 PAGEREF _Toc326159524 \h 21

HYPERLINK \l "_Toc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一种基于WGS84椭球模型的大地坐标空间直角坐标系之间的相互转换方法,使用C语言实现。 1. 定义常量 首先需要定义一些常量,包括椭球体长半轴a、短半轴b、第一偏心率e、第二偏心率e'等,以及一些常量的计算结果。 ```c #define PI 3.14159265358979323846 #define a 6378137.0 // 椭球体长半轴 #define b 6356752.314245 // 椭球体短半轴 #define f (a - b) / a // 扁率 #define e2 (2 * f - f * f) // 第一偏心率的平方 #define ep2 (e2 / (1 - e2)) // 第二偏心率的平方 ``` 2. 大地坐标转换空间坐标 给定一个大地坐标(经度、纬度、高程),需要将其转换空间坐标(X、Y、Z)。计算方法如下: ```c void geodetic2ecef(double lon, double lat, double h, double *x, double *y, double *z) { double N = a / sqrt(1 - e2 * sin(lat) * sin(lat)); // 卯酉圈曲率半径 *x = (N + h) * cos(lat) * cos(lon); *y = (N + h) * cos(lat) * sin(lon); *z = (N * (1 - e2) + h) * sin(lat); } ``` 3. 空间坐标转换为大地坐标 给定一个空间坐标(X、Y、Z),需要将其转换为大地坐标(经度、纬度、高程)。计算方法如下: ```c void ecef2geodetic(double x, double y, double z, double *lon, double *lat, double *h) { double p = sqrt(x * x + y * y); // 投影距离 double theta = atan2(z * a, p * b); // 纬度角 double sintheta = sin(theta); double costheta = cos(theta); *lon = atan2(y, x); double N = a / sqrt(1 - e2 * sintheta * sintheta); // 卯酉圈曲率半径 *lat = atan2(z + ep2 * N * sintheta * sintheta, p - e2 * N * costheta * costheta); double sinlat = sin(*lat); N = a / sqrt(1 - e2 * sinlat * sinlat); *h = p / cos(*lat) - N; } ``` 使用示例: ```c int main() { double lon = 116.3975; // 经度 double lat = 39.9086; // 纬度 double h = 50.0; // 高程 double x, y, z; geodetic2ecef(lon * PI / 180, lat * PI / 180, h, &x, &y, &z); printf("x = %lf, y = %lf, z = %lf\n", x, y, z); double lon1, lat1, h1; ecef2geodetic(x, y, z, &lon1, &lat1, &h1); printf("lon = %lf, lat = %lf, h = %lf\n", lon1 * 180 / PI, lat1 * 180 / PI, h1); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值