比如:泉州--福州
      泉州--厦门  这2地之间的算法程序,

解决方案 »

  1.   

    要用google地图来测距离,那就神精病了
      

  2.   

    http://briancray.com/wp-content/uploads/2009/04/distance.html
      

  3.   

    c语言版的
    #include<stdio.h> 
    #include<string.h> 
    #include<math.h> 
    #include <stdlib.h>
    #include <malloc.h>
    typedef struct 

    char Cname[21]; 
    float Lat; 
    float Lon; 
    } CITY; ////定义一个结构,包含城市名称纬度和经度。
    typedef struct 

    int Nb_cities; 
    CITY Cities[20]; 
    } CITIES_LIST; /////这个结构应该是包含了城市的个数和刚才的结构float **DistancesMatix = NULL; ///距离的二维数组的二级指针(即二维数组首地址的指针)char* GetFileName(void) 

    static char file[20]; 
    printf("Enter the file name:\n"); 
    scanf("%s",file); 
    return file; 
    } ////该函数的功能是输入文件名,将其出入file并作为返回值返回。void ReadFile(CITIES_LIST *list) ////c中没有引用,所以此处改为指针传递

    char *file=GetFileName(); ///调用getfilename获取文件名。
    FILE*fp=NULL; 
    int i; 
    fp=fopen(file,"r"); ////以只读方式打开存储文件名的流。
    fscanf(fp,"%d\n",list->Nb_cities); ////从流中读取城市的个数。
    for(i=0;i<list->Nb_cities;i++) 

    fscanf(fp,"%s %f %f\n",list->Cities[i].Cname,&(list->Cities[i].Lat),&(list->Cities[i].Lon)); 
    } ///////依次读取城市的名称和城市的经纬度。
    fclose(fp); 
    } void WriteDistanceMatrix(CITIES_LIST list) 

    int i, j, no = -1; 
    char *file=GetFileName(); 
    FILE*fp=NULL; if(DistancesMatix == NULL) return; fp=fopen(file,"w"); /////以写方式打开文件
    fprintf(fp, "DESTINATION "); ////将DESTINATION 字符串写入stdout流中for(i=0; i<list.Nb_cities; ++i) 

    fprintf(fp, "%s ", list.Cities[i].Cname); /////依次写入城市的名字到stdout

    fprintf(fp, "\n"); //////换行for(i=0; i<list.Nb_cities; ++i) 

    fprintf(fp, "%s ", list.Cities[i].Cname); 
    for(j=0; j<list.Nb_cities; ++j) 

    fprintf(fp, "%.2f ", DistancesMatix[i][j]); 

    fprintf(fp, "\n"); 

    } /////void CalculateDistances(CITIES_LIST list) /////计算城市距离的

    int i, j; 
    float res; if(DistancesMatix != NULL) 

    free(DistancesMatix); 
    } /////这里只是检查一下这个指针是否存在切指向NULL,不过new和delete是c++的用法改成c的malloc和free了
    DistancesMatix = (float **) malloc(sizeof( float*)*list.Nb_cities); 
    for(i=0; i<list.Nb_cities; ++i) 

    DistancesMatix[i] = (float *) malloc(sizeof(float)*list.Nb_cities); 
    } //////为该指针分配一个二维数组,动态分配二维数组的一般方法。for(i=0; i<list.Nb_cities; ++i) 

    DistancesMatix[i][i] = 0; 
    for(j=i+1; j<list.Nb_cities; ++j) 

    res = cos(list.Cities[i].Lat) * cos(list.Cities[j].Lat); 
    res *= cos(list.Cities[i].Lon - list.Cities[j].Lon); 
    res += sin(list.Cities[i].Lat) * sin(list.Cities[j].Lat); 
    res = 6378 * acos(res); 
    DistancesMatix[i][j] = res; 
    DistancesMatix[j][i] = res; 


    } ////////这个是计算距离的算法,就是你给的那个公式。老实说你给的那个公式我没看懂。void main (void) 

    CITIES_LIST list; ///定义变量
    memset(&list, 0, sizeof(CITIES_LIST)); ///初始化内存.ReadFile(&list); 
    CalculateDistances(list); 
    WriteDistanceMatrix(list); 
      

  4.   

    根据google map的经纬度实现计算
    http://topic.csdn.net/u/20081020/16/6601cf5b-61e9-4697-a798-727e1e4df1d9.html