Author: akv
Date: 2013-06-10 00:19:49 +0200 (Mon, 10 Jun 2013)
New Revision: 4415
Modified:
trunk/src/application.h
trunk/src/rs-cache.c
trunk/src/rs-geo-db.c
trunk/src/rs-geo-db.h
trunk/src/rs-photo.c
Log:
Setting coordinte in cache and using it instead of offset when set - makes
manual setting coordinate work as well (moving map).
Modified: trunk/src/application.h
===================================================================
--- trunk/src/application.h 2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/application.h 2013-06-09 22:19:49 UTC (rev 4415)
@@ -66,6 +66,9 @@
gdouble *auto_wb_mul;
RS_MAIN_SIGNAL* signal;
gint time_offset;
+ gdouble lon;
+ gdouble lat;
+ gdouble ele;
} RS_PHOTO;
typedef struct {
Modified: trunk/src/rs-cache.c
===================================================================
--- trunk/src/rs-cache.c 2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-cache.c 2013-06-09 22:19:49 UTC (rev 4415)
@@ -129,6 +129,13 @@
{
xmlTextWriterWriteFormatElement(writer, BAD_CAST "time_offset",
"%d", photo->time_offset);
}
+ if (photo->lon != 0.0 && photo->lat != 0.0)
+ {
+ xmlTextWriterWriteFormatElement(writer, BAD_CAST "lon", "%f",
photo->lon);
+ xmlTextWriterWriteFormatElement(writer, BAD_CAST "lat", "%f",
photo->lat);
+ if (photo->ele != 0.0)
+ xmlTextWriterWriteFormatElement(writer, BAD_CAST "ele",
"%f", photo->ele);
+ }
int ret = xmlTextWriterEndDocument(writer);
xmlFreeTextWriter(writer);
@@ -531,6 +538,33 @@
xmlFree(val);
}
}
+ else if ((!xmlStrcmp(cur->name, BAD_CAST "lon")))
+ {
+ val = xmlNodeListGetString(doc, cur->xmlChildrenNode,
1);
+ if (val)
+ {
+ photo->lon = atof((gchar *) val);
+ xmlFree(val);
+ }
+ }
+ else if ((!xmlStrcmp(cur->name, BAD_CAST "lat")))
+ {
+ val = xmlNodeListGetString(doc, cur->xmlChildrenNode,
1);
+ if (val)
+ {
+ photo->lat = atof((gchar *) val);
+ xmlFree(val);
+ }
+ }
+ else if ((!xmlStrcmp(cur->name, BAD_CAST "ele")))
+ {
+ val = xmlNodeListGetString(doc, cur->xmlChildrenNode,
1);
+ if (val)
+ {
+ photo->ele = atof((gchar *) val);
+ xmlFree(val);
+ }
+ }
cur = cur->next;
}
Modified: trunk/src/rs-geo-db.c
===================================================================
--- trunk/src/rs-geo-db.c 2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-geo-db.c 2013-06-09 22:19:49 UTC (rev 4415)
@@ -16,6 +16,9 @@
OsmGpsMap *map;
sqlite3 *db;
GtkAdjustment *offset_adj;
+ gdouble lon;
+ gdouble lat;
+ gdouble ele;
};
G_DEFINE_TYPE (RSGeoDb, rs_geo_db, GTK_TYPE_OBJECT)
@@ -72,6 +75,10 @@
sqlite3_prepare_v2(geodb->db, "CREATE TABLE trkpts (time INTEGER
PRIMARY KEY, lon DOUBLE, lat DOUBLE, ele DOUBLE, import INTEGER, FOREIGN
KEY(import) REFERENCES imports(id));", -1, &stmt, NULL);
rc = sqlite3_step(stmt);
sqlite3_finalize(stmt);
+
+ geodb->lon = 0.0;
+ geodb->lat = 0.0;
+ geodb->ele = 0.0;
}
@@ -425,7 +432,7 @@
void
-rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp, gdouble *lon,
gdouble *lat, gdouble *ele)
+rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp)
{
sqlite3 *db = geodb->db;
@@ -462,9 +469,9 @@
if (after_timestamp == before_timestamp)
{
- *lon = after_lon;
- *lat = after_lat;
- *ele = after_ele;
+ geodb->lon = after_lon;
+ geodb->lat = after_lat;
+ geodb->ele = after_ele;
return;
}
@@ -474,28 +481,41 @@
gdouble diff_lat = (after_lat - before_lat) / diff_timestamp;
gdouble diff_ele = (after_ele - before_ele) / diff_timestamp;
- *lon = after_lon - diff*diff_lon;
- *lat = after_lat - diff*diff_lat;
- *ele = after_ele - diff*diff_ele;
+ geodb->lon = after_lon - diff*diff_lon;
+ geodb->lat = after_lat - diff*diff_lat;
+ geodb->ele = after_ele - diff*diff_ele;
}
void
-rs_geo_db_set_coordinates(RSGeoDb *geodb, gdouble lon, gdouble lat)
+rs_geo_db_set_coordinates(RSGeoDb *geodb, RS_PHOTO *photo)
{
- osm_gps_map_set_center((OsmGpsMap *) geodb->map, lat, lon);
+ photo->lon = geodb->lon;
+ photo->lat = geodb->lat;
+ photo->ele = geodb->ele;
+
+ osm_gps_map_set_center((OsmGpsMap *) geodb->map, geodb->lat,
geodb->lon);
}
+void
+rs_geo_db_set_coordinates_manual(RSGeoDb *geodb, RS_PHOTO *photo, gdouble lon,
gdouble lat)
+{
+ photo->lon = geodb->lon = lon;
+ photo->lat = geodb->lat = lat;
+ photo->ele = geodb->ele = 0.0;
+
+ osm_gps_map_set_center((OsmGpsMap *) geodb->map, geodb->lat,
geodb->lon);
+}
+
void spinbutton_change (GtkAdjustment *adj, gpointer user_data)
{
RS_BLOB *rs = (RS_BLOB *) user_data;
- gdouble lon, lat, ele;
RSGeoDb *geodb = rs_geo_db_get_singleton();
gint time_offset= gtk_adjustment_get_value(adj);
rs->photo->time_offset = time_offset;
- rs_geo_db_find_coordinate(geodb, rs->photo->metadata->timestamp +
time_offset, &lon, &lat, &ele);
- rs_geo_db_set_coordinates(geodb, lon, lat);
+ rs_geo_db_find_coordinate(geodb, rs->photo->metadata->timestamp +
time_offset);
+ rs_geo_db_set_coordinates(geodb, rs->photo);
}
void update_label (GtkAdjustment *adj, GtkLabel *label)
@@ -564,11 +584,23 @@
void map_changed (OsmGpsMap *map, RSGeoDb *geodb)
{
gint zoom = -1;
+ //gdouble lon = -1.0, lat = -1.0;
+ gfloat lon, lat;
+
+ RS_BLOB *rs = rs_get_blob();
+
if (map)
- g_object_get(map, "zoom", &zoom, NULL);
+ g_object_get(map, "zoom", &zoom, "longitude", &lon, "latitude",
&lat, NULL);
if (zoom > 0)
rs_conf_set_integer(CONF_MAP_ZOOM, zoom);
+
+ if (rs->photo && (lon != 0.0 || lat != 0.0) && (lon != geodb->lon ||
lat != geodb->lat))
+ {
+ rs->photo->lon = geodb->lon = (gdouble) lon;
+ rs->photo->lat = geodb->lat = (gdouble) lat;
+ rs->photo->ele = geodb->ele = 0.0;
+ }
}
static void
Modified: trunk/src/rs-geo-db.h
===================================================================
--- trunk/src/rs-geo-db.h 2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-geo-db.h 2013-06-09 22:19:49 UTC (rev 4415)
@@ -47,8 +47,9 @@
RSGeoDb *rs_geo_db_get_singleton(void);
extern GtkWidget * rs_geo_db_get_widget(RSGeoDb *geodb);
-extern void rs_geo_db_set_coordinates(RSGeoDb *geodb, gdouble lon, gdouble
lat);
-void rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp, gdouble *lon,
gdouble *lat, gdouble *ele);
+extern void rs_geo_db_set_coordinates(RSGeoDb *geodb, RS_PHOTO *photo);
+extern void rs_geo_db_set_coordinates_manual(RSGeoDb *geodb, RS_PHOTO *photo,
gdouble lon, gdouble lat);
+void rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp);
void rs_geo_db_set_offset(RSGeoDb *geodb, RS_PHOTO *time_offset, gint offset);
#endif /* RS_GEO_DB */
Modified: trunk/src/rs-photo.c
===================================================================
--- trunk/src/rs-photo.c 2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-photo.c 2013-06-09 22:19:49 UTC (rev 4415)
@@ -154,6 +154,9 @@
photo->auto_wb_mul = NULL;
photo->embedded_profile = NULL;
photo->time_offset = 0;
+ photo->lon = 0.0;
+ photo->lat = 0.0;
+ photo->ele = 0.0;
}
static void
@@ -424,14 +427,19 @@
RSLensDb *lens_db = rs_lens_db_get_default();
RSLens *lens = rs_lens_db_lookup_from_metadata(lens_db, meta);
- gdouble lon, lat, ele;
RSGeoDb *geodb = rs_geo_db_get_singleton();
+ gdouble tlon = photo->lon, tlat = photo->lat; /* FIXME: setting
offset will make it use gps data and not what's set in cache */
rs_geo_db_set_offset(geodb, photo, photo->time_offset);
- if (photo->time_offset != 0)
+
+ if (tlon != 0.0 && tlat != 0.0)
{
- rs_geo_db_find_coordinate(geodb, meta->timestamp +
photo->time_offset, &lon, &lat, &ele);
- rs_geo_db_set_coordinates(geodb, lon, lat);
+ rs_geo_db_set_coordinates_manual(geodb, photo, tlon,
tlat);
}
+ else if (photo->time_offset != 0)
+ {
+ rs_geo_db_find_coordinate(geodb, meta->timestamp +
photo->time_offset);
+ rs_geo_db_set_coordinates(geodb, photo);
+ }
/* Apply lens information to RSLensfun */
if (lens)
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit