Ticket #549: navit_3471_ticket_549_2.patch

File navit_3471_ticket_549_2.patch, 6.3 KB (added by mvglasow (2), 10 years ago)

Patch for friendly coordinates (fix the fix)

  • navit/coord.c

     
    315315 * @param lat The latitude (if lat is 360 or greater, the latitude will be omitted)
    316316 * @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=>Degrees with decimal places, i.e. 20.5000°N 110.5000°E
     318 *    @li DEGREES_DECIMAL=>Degrees with decimal places, i.e. 20.5000°N 110.5000°E
    319319 *    @li DEGREES_MINUTES=>Degrees and minutes, i.e. 20°30.00'N 110°30.00'E
    320320 *    @li DEGREES_MINUTES_SECONDS=>Degrees, minutes and seconds, i.e. 20°30'30.00"N 110°30'30"E
    321321 *           
  • navit/osd/core/osd_core.c

     
    9696        graphics_draw_lines(gr, gc, ph, 3);
    9797}
    9898
     99/**
     100 * * Format distance, choosing the unit (m or km) and precision depending on distance
     101 * *
     102 * * @param distance distance in meters
     103 * * @param sep separator character to be inserted between distance value and unit
     104 * * @returns a pointer to a string containing the formatted distance
     105 * */
    99106static char *
    100107format_distance(double distance, char *sep)
    101108{
     
    113120                return g_strdup_printf("%.1f%sm", distance, sep);
    114121}
    115122
     123/**
     124 * * Format time (duration)
     125 * *
     126 * * @param tm pointer to a tm structure specifying the time
     127 * * @param days days
     128 * * @returns a pointer to a string containing the formatted time
     129 * */
    116130static char *
    117131format_time(struct tm *tm, int days)
    118132{
     
    122136                return g_strdup_printf("%02d:%02d", tm->tm_hour, tm->tm_min);
    123137}
    124138
     139/**
     140 * * Format speed in km/h
     141 * *
     142 * * @param speed speed in km/h
     143 * * @param sep separator character to be inserted between speed value and unit
     144 * * @returns a pointer to a string containing the formatted speed
     145 * */
    125146static char *
    126147format_speed(double speed, char *sep)
    127148{
     
    757778        case attr_position_magnetic_direction:
    758779                return g_strdup_printf("%d",attr->u.num);
    759780        case attr_position_coord_geo:
    760                 if (format) {
    761                         if (!strcmp(format,"pos_degmin"))
    762                         {
    763                                 coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
    764                                 return g_strdup(buffer);
    765                         }
    766                         else if (!strcmp(format,"pos_deg"))
    767                         {
    768                                 coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_DECIMAL,buffer,sizeof(buffer));
    769                                 return g_strdup(buffer);
    770                         }
    771                         else if (!strcmp(format,"lat_degminsec"))
    772                         {
    773                                 coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
    774                                 return g_strdup(buffer);
    775                         }
    776                         else if (!strcmp(format,"lat_degmin"))
    777                         {
    778                                 coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES,buffer,sizeof(buffer));
    779                                 return g_strdup(buffer);
    780                         }
    781                         else if (!strcmp(format,"lat_deg"))
    782                         {
    783                                 coord_format(attr->u.coord_geo->lat,360,DEGREES_DECIMAL,buffer,sizeof(buffer));
    784                                 return g_strdup(buffer);
    785                         }
    786                         else if (!strcmp(format,"lng_degminsec"))
    787                         {
    788                                 coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
    789                                 return g_strdup(buffer);
    790                         }
    791                         else if (!strcmp(format,"lng_degmin"))
    792                         {
    793                                 coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
    794                                 return g_strdup(buffer);
    795                         }
    796                         else if (!strcmp(format,"lng_deg")) {
    797                                 coord_format(360,attr->u.coord_geo->lng,DEGREES_DECIMAL,buffer,sizeof(buffer));
    798                                 return g_strdup(buffer);
    799                         }
    800                 } else { //Covers format==pos_degminsec too
     781                if ((!format) || (!strcmp(format,"pos_degminsec")))
     782                {
    801783                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
    802784                        return g_strdup(buffer);
    803785                }
     786                else if (!strcmp(format,"pos_degmin"))
     787                {
     788                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
     789                        return g_strdup(buffer);
     790                }
     791                else if (!strcmp(format,"pos_deg"))
     792                {
     793                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_DECIMAL,buffer,sizeof(buffer));
     794                        return g_strdup(buffer);
     795                }
     796                else if (!strcmp(format,"lat_degminsec"))
     797                {
     798                        coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     799                        return g_strdup(buffer);
     800                }
     801                else if (!strcmp(format,"lat_degmin"))
     802                {
     803                        coord_format(attr->u.coord_geo->lat,360,DEGREES_MINUTES,buffer,sizeof(buffer));
     804                        return g_strdup(buffer);
     805                }
     806                else if (!strcmp(format,"lat_deg"))
     807                {
     808                        coord_format(attr->u.coord_geo->lat,360,DEGREES_DECIMAL,buffer,sizeof(buffer));
     809                        return g_strdup(buffer);
     810                }
     811                else if (!strcmp(format,"lng_degminsec"))
     812                {
     813                        coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     814                        return g_strdup(buffer);
     815                }
     816                else if (!strcmp(format,"lng_degmin"))
     817                {
     818                        coord_format(360,attr->u.coord_geo->lng,DEGREES_MINUTES,buffer,sizeof(buffer));
     819                        return g_strdup(buffer);
     820                }
     821                else if (!strcmp(format,"lng_deg"))
     822                {
     823                        coord_format(360,attr->u.coord_geo->lng,DEGREES_DECIMAL,buffer,sizeof(buffer));
     824                        return g_strdup(buffer);
     825                }
     826                else
     827                { // fall back to pos_degminsec
     828                        coord_format(attr->u.coord_geo->lat,attr->u.coord_geo->lng,DEGREES_MINUTES_SECONDS,buffer,sizeof(buffer));
     829                        return g_strdup(buffer);
     830                }
    804831        case attr_destination_time:
    805832                if (!format || (strcmp(format,"arrival") && strcmp(format,"remaining")))
    806833                        break;
     
    847874        return attr_to_text(attr, NULL, 1);
    848875}
    849876
     877/**
     878 * * Parse a string of the form key.subkey or key[index].subkey into its components, where subkey can itself have its own index and further subkeys
     879 * *
     880 * * @param in string to parse (will be modified by the function); upon returning this pointer will point to a string containing key
     881 * * @param index pointer to an address that will receive a pointer to a string containing index or a null pointer if key does not have an index
     882 * * @returns a pointer to a string containing subkey, i.e. everything following the first period; if no subkey was found, the return value is a pointer to an empty string; if errors are encountered (index with missing closed bracket or passing a null pointer as index argument when an index was encountered), the return value is NULL
     883 * */
    850884static char *
    851885osd_text_split(char *in, char **index)
    852886{