我来写个最简单的
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
void explain_NS(char * str)
{
char tmp_ca[30] = ""
if(str[0] == 'N')
strcpy(tmp_ca,"北纬")
else
strcpy(tmp_ca,"南纬")
char *p = tmp_ca
while(*p) p++
strncpy(p, str+1, 2)
p += 2
*p = 176
p ++
strncpy(p,str+3,2)
p += 2
*p = 39
p++
strncpy(p, str+6,5)
p += 5
*p = 34
printf("%s\n",tmp_ca)
}
void explain_EW(char * str)
{
char tmp_ca[30] = ""
if(str[0] == 'E')
strcpy(tmp_ca,"东经")
else
strcpy(tmp_ca,"西经")
char *p = tmp_ca
while(*p) p++
strncpy(p, str+1, 3)
p += 3
*p = 176
p ++
strncpy(p,str+4,2)
p += 2
*p = 39
p++
strncpy(p, str+7,5)
p += 5
*p = 34
printf("%s\n",tmp_ca)
}
int _tmain(int argc, _TCHAR* argv[])
{
char ca[30] = "N3018.93661"
char cb[30] = "E12022.88281"
explain_NS(ca)
explain_EW(cb)
system("pause")
return 0
}
就是纯计算公式,一个公式就可以解决。具体逻辑如下。1.) ddd.ddddd, 度 . 度的十进制小数部分(5位)例如:31.12035º
2.) ddd.mm.mmm,度 . 分 . 分的十进制小数部分(3位)例如 31º10.335′
3.) ddd.mm.ss, 度 . 分 . 秒 例如 31º12’42″
地球上任何一个固定的点都可以用确定的经纬度表示出来。
关于经纬度坐标转换的方法
一、十进制转换成经纬度
把经纬度转换成十进制的方法很简单
如下就可以了
Decimal Degrees = Degrees + minutes/60 + seconds/3600
例:57°55’56.6″ =57+55/60+56.6/3600=57.9323888888888
114°65’24.6″=114+65/60+24.6/3600=结果自己算!
如把经纬度 (longitude,latitude) (205.395583333332,57.9323888888888)
转换据成坐标(Degrees,minutes,seconds)(205°23’44.1″,57°55’56.6″)。
步骤如下:
1, 直接读取”度”:205
2,(205.395583333332-205)*60=23.734999999920 得到”分”:23
3,(23.734999999920-23)*60=44.099999995200 得到”秒”:44.1
采用同样的方法可以得到纬度坐标:57°55’56.6″
代码如下:
#include<stdio.h>#define N 10
typedef struct _Coordinate
{
double longitude//经度
double latitude//纬度
}Coordinate
Coordinate avg(Coordinate arr[], int n){
double lon = 0
double lat = 0
for (int i = 0 i < n i++){
lon += arr[i].longitude
lat += arr[i].latitude
}
lon /= n
lat /= n
return{ lon, lat }
}
int main(){
Coordinate arr[N] = {
{ 1, 1 },
{ 2, 3 },
{ 3, 1 },
{ 4, 3 },
{ 5, 1 },
{ 6, 3 },
{ 7, 1 },
{ 8, 3 },
{ 9, 1 },
{ 10, 3 },
}
Coordinate myavg = avg(arr, N)
printf("平均值为: 经度=>%.3f,纬度=>%.3f\n", myavg.longitude, myavg.latitude)
getchar()
return 0
}
运行结果如下:
希望对你有帮助~