1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-24 00:45:52 +00:00

Provide patch from future version to fix yournavigation.org API.

PR:		200366
Approved by:	Craig Whipp <crwhipp gmail.com> (maintainer)
This commit is contained in:
Gleb Smirnoff 2015-05-22 08:41:09 +00:00
parent b1769550df
commit c12a08e67d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=386994
2 changed files with 124 additions and 0 deletions

View File

@ -3,6 +3,7 @@
PORTNAME= foxtrotgps
PORTVERSION= 1.2.0
PORTREVISION= 1
CATEGORIES= astro geography
MASTER_SITES= http://www.foxtrotgps.org/releases/

View File

@ -0,0 +1,123 @@
--- src/tracks.c.orig 2015-05-21 11:26:32 UTC
+++ src/tracks.c
@@ -41,8 +41,10 @@ bbox_t get_track_bbox(GSList *track);
GSList * load_log_file_into_list(char *file);
GSList * load_gpx_file_into_list(char *file);
GSList * load_ols_XML_file_into_list(char *file);
+GSList * load_kml_XML_file_into_list(char *file);
GSList * parse_gpx_nodes(xmlNode *node);
GSList * parse_ols_XML_nodes(xmlNode *node);
+GSList * parse_kml_XML_nodes(xmlNode *node);
void * fetch_track_thread(void *ptr);
void * fetch_openrouteservice_track_thread(void *ptr);
@@ -662,6 +664,30 @@ load_ols_XML_string_into_list(char *ols_
}
GSList *
+load_kml_XML_string_into_list(char *kml_string)
+{
+ GSList *list = NULL;
+ xmlDoc *doc = NULL;
+ xmlNode *root_element = NULL;
+
+ if(!kml_string) return NULL;
+
+ LIBXML_TEST_VERSION
+
+ doc = xmlReadMemory(kml_string, strlen(kml_string), "noname.xml", NULL, 0);
+
+ if (doc == NULL) {
+ fprintf (stderr, _("Failed to parse document\n"));
+ } else {
+ root_element = xmlDocGetRootElement(doc);
+ list = parse_kml_XML_nodes(root_element);
+ xmlFreeDoc(doc);
+ }
+
+ return list;
+}
+
+GSList *
parse_gpx_nodes(xmlNode *node)
{
xmlNode *cur_node = NULL;
@@ -754,6 +780,60 @@ parse_ols_XML_nodes(xmlNode *node)
return list;
}
+GSList *
+parse_kml_XML_nodes(xmlNode *node)
+{
+ xmlNode *cur_node = NULL;
+ GSList *list = NULL;
+
+ for (cur_node = node; cur_node; cur_node = cur_node->next)
+ {
+ if (xmlStrEqual(cur_node->name, BAD_CAST "Placemark"))
+ {
+ xmlNode *geometry_node = cur_node->children;
+ while (geometry_node != NULL)
+ {
+ if (xmlStrEqual(geometry_node->name, BAD_CAST "LineString"))
+ {
+ xmlNode *inner_cur_node = geometry_node->children;
+ while (inner_cur_node != NULL)
+ {
+ if (xmlStrEqual(inner_cur_node->name, BAD_CAST "coordinates")) {
+ char** lonlatlist;
+ lonlatlist = g_strsplit(xmlNodeGetContent(inner_cur_node), "\n", -1);
+ for(unsigned int i = 0; lonlatlist[i]; i++){
+ g_strchug(lonlatlist[i]);
+ g_strchomp(lonlatlist[i]);
+ char** lonlat = g_strsplit(lonlatlist[i], ",", 2);
+ if (lonlat[0])
+ {
+ double lat, lon;
+ lon = atof(lonlat[0]);
+ if (lonlat[1])
+ {
+ trackpoint_t *tp = g_new0(trackpoint_t,1);
+ lat = atof(lonlat[1]);
+ tp->lat = deg2rad(lat);
+ tp->lon = deg2rad(lon);
+ list = g_slist_append(list, tp);
+ }
+ }
+ g_strfreev (lonlat);
+ }
+ g_strfreev (lonlatlist);
+ }
+ inner_cur_node = inner_cur_node->next;
+ }
+ }
+ geometry_node = geometry_node->next;
+ }
+ }
+ list = g_slist_concat(list, parse_kml_XML_nodes(cur_node->children));
+ }
+
+ return list;
+}
+
void
fetch_track(GtkWidget *widget, char *service, char *start, char *end)
@@ -796,7 +876,7 @@ void fetch_yournavigation_track(GtkWidge
dialog10 = widget;
printf("%s(): %s, %s\n",__PRETTY_FUNCTION__, start, end);
- url = g_strdup_printf("http://www.yournavigation.org/api/dev/gosmore.php?format=gpx&flat=%s&flon=%s&tlat=%s&tlon=%s&v=motorcar&fast=1&layer=mapnik",startlatstr, startlonstr, endlatstr, endlonstr);
+ url = g_strdup_printf("http://www.yournavigation.org/api/1.0/gosmore.php?format=kml&flat=%s&flon=%s&tlat=%s&tlon=%s&v=motorcar&fast=1&layer=mapnik",startlatstr, startlonstr, endlatstr, endlonstr);
if (!g_thread_create(&fetch_track_thread, (void *)url, FALSE, NULL) != 0)
g_warning("### can't create route thread\n");
}
@@ -1002,7 +1082,7 @@ fetch_track_thread(void *ptr)
printf("HTTP-GET: size: %d, statuscode %d \n", (int)reply->size, (int)reply->status_code);
- loaded_track = load_gpx_string_into_list(reply->data);
+ loaded_track = load_kml_XML_string_into_list(reply->data);
process_fetched_track(reply, true);
return NULL;