Ticket #549: friendly_coord.diff

File friendly_coord.diff, 5.3 KB (added by mvglasow, 10 years ago)
  • navit/coord.c

     
    312312
    313313/**
    314314 * @brief Converts a lat/lon into a text formatted text string.
    315  * @param lat The latitude
    316  * @param lng The longitude
     315 * @param lat The latitude (if lat is 360 or greater, the latitude will be omitted)
     316 * @param lng The longitude (if lng is 360 or greater, the longitude will be omitted)
    317317 * @param fmt The format to use.
    318  *    @li DEGREES=>(45.5000N 100.9000S)
    319  *    @li DEGREES_MINUTES=>(45 30.))00N 100 120.54.0000S)
    320  *    @li DEGREES_MINUTES_SECONDS=>(4530.0000N 12054.0000S)
     318 *    @li DEGREES=>Degrees with decimal places, i.e. 20.5000°N 110.5000°E
     319 *    @li DEGREES_MINUTES=>Degrees and minutes, i.e. 20°30.00'N 110°30.00'E
     320 *    @li DEGREES_MINUTES_SECONDS=>Degrees, minutes and seconds, i.e. 20°30'30.00"N 110°30'30"E
    321321 *           
    322322 *
    323  * @param buffer  A buffer large enough to hold the output + a terminating NULL (26 bytes)
     323 * @param buffer  A buffer large enough to hold the output + a terminating NULL (up to 31 bytes)
    324324 * @param size The size of the buffer
    325325 *
    326326 */
     
    331331        char lng_c='E';
    332332        float lat_deg,lat_min,lat_sec;
    333333        float lng_deg,lng_min,lng_sec;
     334        int size_used=0;
    334335
    335336        if (lng < 0) {
    336337                lng=-lng;
     
    350351        {
    351352
    352353        case DEGREES_DECIMAL:
    353           snprintf(buffer,size,"%02.6f%c %03.7f%c",lat,lat_c,lng,lng_c);
     354          if (lat<360)
     355            size_used+=snprintf(buffer+size_used,size-size_used,"%02.6f°%c",lat,lat_c);
     356          if ((lat<360)&&(lng<360))
     357            size_used+=snprintf(buffer+size_used,size-size_used," ");
     358          if (lng<360)
     359            size_used+=snprintf(buffer+size_used,size-size_used,"%03.7f°%c",lng,lng_c);
    354360          break;
    355361        case DEGREES_MINUTES:
    356           snprintf(buffer,size,"%02.0f %07.4f%c %03.0f %07.4f%c",floor(lat_deg),lat_min , lat_c, floor(lng), lng_min, lng_c);
    357                    break;
     362          if (lat<360)
     363            size_used+=snprintf(buffer+size_used,size-size_used,"%02.0f°%07.4f' %c",floor(lat_deg),lat_min,lat_c);
     364          if ((lat<360)&&(lng<360))
     365            size_used+=snprintf(buffer+size_used,size-size_used," ");
     366          if (lng<360)
     367            size_used+=snprintf(buffer+size_used,size-size_used,"%03.0f°%07.4f' %c",floor(lng_deg),lng_min,lng_c);
     368          break;
    358369        case DEGREES_MINUTES_SECONDS:
    359           snprintf(buffer,size,"%02.0f%07.4f%c %03.0f%07.4f%c",floor(lat), fmod(lat*60,60), lat_c, floor(lng), fmod(lng*60,60), lng_c);
     370          if (lat<360)
     371            size_used+=snprintf(buffer+size_used,size-size_used,"%02.0f°%02.0f'%05.2f\" %c",floor(lat_deg),floor(lat_min),lat_sec,lat_c);
     372          if ((lat<360)&&(lng<360))
     373            size_used+=snprintf(buffer+size_used,size-size_used," ");
     374          if (lng<360)
     375            size_used+=snprintf(buffer+size_used,size-size_used,"%03.0f°%02.0f'%05.2f\" %c",floor(lng_deg),floor(lng_min),lng_sec,lng_c);
    360376          break;
    361377         
    362378       
  • navit/osd/core/osd_core.c

     
    661661        case attr_position_magnetic_direction:
    662662                return g_strdup_printf("%d",attr->u.num);
    663663        case attr_position_coord_geo:
    664                 coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
    665                 return g_strdup(buffer);
     664                if ((!format) || (!strcmp(format,"pos_degminsec"))) {
     665                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     666                        return g_strdup(buffer);
     667                }
     668                if (!strcmp(format,"pos_degmin")) {
     669                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
     670                        return g_strdup(buffer);
     671                }
     672                if (!strcmp(format,"pos_deg")) {
     673                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES,buffer,sizeof(buffer));
     674                        return g_strdup(buffer);
     675                }
     676                if (!strcmp(format,"lat_degminsec")) {
     677                        coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     678                        return g_strdup(buffer);
     679                }
     680                if (!strcmp(format,"lat_degmin")) {
     681                        coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES,buffer,sizeof(buffer));
     682                        return g_strdup(buffer);
     683                }
     684                if (!strcmp(format,"lat_deg")) {
     685                        coord_format(attr->u.coord_geo->lat,360,DEGREES,buffer,sizeof(buffer));
     686                        return g_strdup(buffer);
     687                }
     688                if (!strcmp(format,"lng_degminsec")) {
     689                        coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     690                        return g_strdup(buffer);
     691                }
     692                if (!strcmp(format,"lng_degmin")) {
     693                        coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
     694                        return g_strdup(buffer);
     695                }
     696                if (!strcmp(format,"lng_deg")) {
     697                        coord_format(360,attr->u.coord_geo->lng,DEGREES,buffer,sizeof(buffer));
     698                        return g_strdup(buffer);
     699                }
    666700        case attr_destination_time:
    667701                if (!format || (strcmp(format,"arrival") && strcmp(format,"remaining")))
    668702                        break;
  • navit/gui/gtk/gui_gtk_statusbar.c

     
    5858        char *dirs[]={_("N"),_("NE"),_("E"),_("SE"),_("S"),_("SW"),_("W"),_("NW"),_("N")};
    5959        char *dir;
    6060        int dir_idx;
    61         char pos_text[26];
     61        char pos_text[36];
    6262
    6363        coord_format(lat,lng,DEGREES_MINUTES_SECONDS,pos_text,sizeof(pos_text));
    6464        dir=dirs[dir_idx];