diff options
author | Ian McIntosh <ian_mcintosh@linuxadvocate.org> | 2005-10-18 01:40:19 +0000 |
---|---|---|
committer | Ian McIntosh <ian_mcintosh@linuxadvocate.org> | 2005-10-18 01:40:19 +0000 |
commit | 4c4e96550dc6ca440a006d6c968b769a5f64b89f (patch) | |
tree | 7b602874a40c324294b0935b077671b1f60db57d | |
parent | fefffa833f47f6be754c35faac7adb9e3b689581 (diff) |
Add Debug menu toggle for GDK/Cairo.
Remove dead code.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | data/roadster.glade | 29 | ||||
-rw-r--r-- | src/mainwindow.c | 6 | ||||
-rw-r--r-- | src/map.c | 15 | ||||
-rw-r--r-- | src/map.h | 5 | ||||
-rw-r--r-- | src/map_draw_cairo.c | 65 | ||||
-rw-r--r-- | src/map_draw_gdk.c | 87 | ||||
-rw-r--r-- | src/map_draw_gdk.h | 2 | ||||
-rw-r--r-- | src/map_math.c | 8 | ||||
-rw-r--r-- | src/map_tilemanager.c | 4 |
10 files changed, 94 insertions, 134 deletions
@@ -1,3 +1,10 @@ +2005-10-18 Ian McIntosh <ian_mcintosh@linuxadvocate.org> + + * src/mainwindow.c: + * src/map.c: + * src/map_draw_cairo.c: Add Debug menu toggle for GDK/Cairo. + * src/map_draw_gdk.c: Remove dead code. + 2005-10-17 Ian McIntosh <ian_mcintosh@linuxadvocate.org> * configure.ac: Added -Wall compiler option (show all warnings). diff --git a/data/roadster.glade b/data/roadster.glade index 104c073..e4ec365 100644 --- a/data/roadster.glade +++ b/data/roadster.glade @@ -1474,7 +1474,7 @@ Notes:</property> <property name="use_underline">True</property> <child internal-child="image"> - <widget class="GtkImage" id="image10326"> + <widget class="GtkImage" id="image10356"> <property name="visible">True</property> <property name="stock">gtk-open</property> <property name="icon_size">1</property> @@ -1507,7 +1507,7 @@ Notes:</property> <property name="use_underline">True</property> <child internal-child="image"> - <widget class="GtkImage" id="image10327"> + <widget class="GtkImage" id="image10357"> <property name="visible">True</property> <property name="stock">gtk-save-as</property> <property name="icon_size">1</property> @@ -1534,7 +1534,7 @@ Notes:</property> <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10328"> + <widget class="GtkImage" id="image10358"> <property name="visible">True</property> <property name="stock">gtk-quit</property> <property name="icon_size">1</property> @@ -1705,7 +1705,7 @@ Notes:</property> <accelerator key="Left" modifiers="GDK_MOD1_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10329"> + <widget class="GtkImage" id="image10359"> <property name="visible">True</property> <property name="stock">gtk-go-back</property> <property name="icon_size">1</property> @@ -1728,7 +1728,7 @@ Notes:</property> <accelerator key="Right" modifiers="GDK_MOD1_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10330"> + <widget class="GtkImage" id="image10360"> <property name="visible">True</property> <property name="stock">gtk-media-forward</property> <property name="icon_size">1</property> @@ -1788,7 +1788,7 @@ Notes:</property> <accelerator key="F9" modifiers="0" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10331"> + <widget class="GtkImage" id="image10361"> <property name="visible">True</property> <property name="stock">gtk-refresh</property> <property name="icon_size">1</property> @@ -1836,7 +1836,7 @@ Notes:</property> <signal name="activate" handler="mainwindow_on_aboutmenuitem_activate" last_modification_time="Sat, 12 Mar 2005 06:48:18 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image10332"> + <widget class="GtkImage" id="image10362"> <property name="visible">True</property> <property name="stock">gtk-about</property> <property name="icon_size">1</property> @@ -1888,7 +1888,7 @@ Notes:</property> <signal name="activate" handler="mainwindow_on_import_maps_activate" last_modification_time="Fri, 04 Mar 2005 04:28:20 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image10333"> + <widget class="GtkImage" id="image10363"> <property name="visible">True</property> <property name="stock">gtk-open</property> <property name="icon_size">1</property> @@ -1908,12 +1908,13 @@ Notes:</property> </child> <child> - <widget class="GtkCheckMenuItem" id="use_cairo_rendering1"> + <widget class="GtkCheckMenuItem" id="use_aa_rendering1"> <property name="visible">True</property> - <property name="label" translatable="yes">Use Cairo Rendering</property> + <property name="label" translatable="yes">Use Anti-Aliased Rendering</property> <property name="use_underline">True</property> <property name="active">False</property> - <signal name="activate" handler="map_on_use_cairo_rendering_activate" last_modification_time="Tue, 18 Oct 2005 01:13:24 GMT"/> + <signal name="activate" handler="mainwindow_on_use_aa_rendering_activate" last_modification_time="Tue, 18 Oct 2005 05:54:13 GMT"/> + <accelerator key="F4" modifiers="0" signal="activate"/> </widget> </child> @@ -1932,7 +1933,7 @@ Notes:</property> <accelerator key="F5" modifiers="0" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10334"> + <widget class="GtkImage" id="image10364"> <property name="visible">True</property> <property name="stock">gtk-refresh</property> <property name="icon_size">1</property> @@ -1954,7 +1955,7 @@ Notes:</property> <accelerator key="F6" modifiers="0" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10335"> + <widget class="GtkImage" id="image10365"> <property name="visible">True</property> <property name="stock">gtk-refresh</property> <property name="icon_size">1</property> @@ -1991,7 +1992,7 @@ Notes:</property> <accelerator key="g" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image10336"> + <widget class="GtkImage" id="image10366"> <property name="visible">True</property> <property name="stock">gtk-jump-to</property> <property name="icon_size">1</property> diff --git a/src/mainwindow.c b/src/mainwindow.c index 9112fea..8f3aaa9 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -1880,6 +1880,12 @@ static void mainwindow_on_web_url_clicked(GtkWidget *_unused, gchar* pszURLPatte } } +void mainwindow_on_use_aa_rendering_activate(GtkMenuItem *menuitem, gpointer user_data) +{ + map_set_antialiased(g_MainWindow.pMap, !map_get_antialiased(g_MainWindow.pMap)); + mainwindow_draw_map(DRAWFLAG_ALL); +} + #ifdef ROADSTER_DEAD_CODE /* static gboolean on_searchbox_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data) @@ -227,8 +227,6 @@ void map_draw(map_t* pMap, GdkPixmap* pTargetPixmap, gint nDrawFlags) scenemanager_clear(pMap->pSceneManager); scenemanager_set_screen_dimensions(pMap->pSceneManager, pRenderMetrics->nWindowWidth, pRenderMetrics->nWindowHeight); - gint nRenderMode = RENDERMODE_FAST; //RENDERMODE_PRETTY; // - #ifdef ENABLE_LABELS_WHILE_DRAGGING nDrawFlags |= DRAWFLAG_LABELS; // always turn on labels #endif @@ -238,7 +236,7 @@ void map_draw(map_t* pMap, GdkPixmap* pTargetPixmap, gint nDrawFlags) scenemanager_claim_polygon(pMap->pSceneManager, aPoints, 4); #endif - if(nRenderMode == RENDERMODE_FAST) { + if(pMap->bAntiAliased == FALSE) { // if(nDrawFlags & DRAWFLAG_GEOMETRY) { map_draw_gdk(pMap, pTilesArray, pRenderMetrics, pTargetPixmap, DRAWFLAG_GEOMETRY); @@ -248,7 +246,7 @@ void map_draw(map_t* pMap, GdkPixmap* pTargetPixmap, gint nDrawFlags) // Call cairo for finishing the scene map_draw_cairo(pMap, pTilesArray, pRenderMetrics, pTargetPixmap, nDrawFlags); } - else { // nRenderMode == RENDERMODE_PRETTY + else { map_draw_cairo(pMap, pTilesArray, pRenderMetrics, pTargetPixmap, nDrawFlags); } @@ -605,6 +603,15 @@ void map_get_visible_maprect(const map_t* pMap, maprect_t* pReturnMapRect) memcpy(pReturnMapRect, &(renderMetrics.rWorldBoundingBox), sizeof(maprect_t)); } +gboolean map_get_antialiased(const map_t* pMap) +{ + return pMap->bAntiAliased; +} + +void map_set_antialiased(map_t* pMap, gboolean bAntiAliased) +{ + pMap->bAntiAliased = bAntiAliased; +} #ifdef ROADSTER_DEAD_CODE /* @@ -207,6 +207,8 @@ typedef struct { GtkWidget* pTargetWidget; scenemanager_t* pSceneManager; + gboolean bAntiAliased; + // data GArray *pTracksArray; // maplayer_data_t *apLayerData[ MAP_NUM_OBJECT_TYPES + 1 ]; @@ -334,4 +336,7 @@ void map_get_screenrect_centerpoint(const screenrect_t* pRect, screenpoint_t* pP void map_get_visible_maprect(const map_t* pMap, maprect_t* pReturnMapRect); gdouble map_get_altitude(const map_t* pMap, EDistanceUnits eUnit); +gboolean map_get_antialiased(const map_t* pMap); +void map_set_antialiased(map_t* pMap, gboolean bAntiAliased); + #endif diff --git a/src/map_draw_cairo.c b/src/map_draw_cairo.c index 6873132..cc6a5df 100644 --- a/src/map_draw_cairo.c +++ b/src/map_draw_cairo.c @@ -71,6 +71,8 @@ static void map_draw_cairo_layer_points(map_t* pMap, cairo_t* pCairo, rendermetr //static void map_draw_cairo_locationset(map_t* pMap, cairo_t *pCairo, rendermetrics_t* pRenderMetrics, locationset_t* pLocationSet, GPtrArray* pLocationsArray); //static void map_draw_cairo_locationselection(map_t* pMap, cairo_t *pCairo, rendermetrics_t* pRenderMetrics, GPtrArray* pLocationSelectionArray); +static void map_draw_cairo_layer_fill(map_t* pMap, cairo_t* pCairo, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle); + // Draw labels for a single line/polygon static void map_draw_cairo_road_label(map_t* pMap, cairo_t *pCairo, maplayerstyle_t* pLayerStyle, rendermetrics_t* pRenderMetrics, GArray* pMapPointsArray, const gchar* pszLabel); static void map_draw_cairo_polygon_label(map_t* pMap, cairo_t *pCairo, maplayerstyle_t* pLayerStyle, rendermetrics_t* pRenderMetrics, GArray* pMapPointsArray, maprect_t* pBoundingRect, const gchar* pszLabel); @@ -96,6 +98,11 @@ void map_draw_text_underline(cairo_t* pCairo, gdouble fLabelWidth) cairo_rel_move_to(pCairo, -(fLabelWidth+2), -UNDERLINE_RELIEF); } +void map_draw_cairo_set_rgb(cairo_t* pCairo, color_t* pColor) +{ + cairo_set_source_rgba(pCairo, pColor->fRed, pColor->fGreen, pColor->fBlue, 1.0); +} + void map_draw_cairo_set_rgba(cairo_t* pCairo, color_t* pColor) { cairo_set_source_rgba(pCairo, pColor->fRed, pColor->fGreen, pColor->fBlue, pColor->fAlpha); @@ -115,6 +122,8 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr cairo_surface_t *pSurface = cairo_xlib_surface_create (dpy, drawable, visual, width, height); cairo_t* pCairo = cairo_create (pSurface); +// cairo_set_antialias(pCairo, CAIRO_ANTIALIAS_GRAY); // CAIRO_ANTIALIAS_DEFAULT, CAIRO_ANTIALIAS_NONE, CAIRO_ANTIALIAS_GRAY, CAIRO_ANTIALIAS_SUBPIXEL + #ifdef ENABLE_DRAW_MAP_SCALE # define MAP_SCALE_WIDTH (55) // these are just estimates @@ -131,12 +140,7 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr // 2.1. Settings for all rendering cairo_set_fill_rule(pCairo, CAIRO_FILL_RULE_WINDING); - // 2.2. Draw Background - if(nDrawFlags & DRAWFLAG_GEOMETRY) { - map_draw_cairo_background(pMap, pCairo); - } - - // 2.3. Render Layers + // 2.2. Render Layers if(pMap->pLayersArray->len == 0) { map_draw_cairo_message(pMap, pCairo, "The style XML file couldn't be loaded"); } @@ -156,10 +160,6 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr pTile->apMapObjectArrays[pLayer->nDataSource], // data pLayer->paStylesAtZoomLevels[nStyleZoomLevel-1]); // style } - -// map_draw_cairo_layer_roads(pMap, pCairo, pRenderMetrics, -// pMap->apLayerData[pLayer->nDataSource]->pRoadsArray, -// pLayer->paStylesAtZoomLevels[nStyleZoomLevel-1]); } } else if(pLayer->nDrawType == MAP_LAYER_RENDERTYPE_POLYGONS) { @@ -171,9 +171,6 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr pTile->apMapObjectArrays[pLayer->nDataSource], // data pLayer->paStylesAtZoomLevels[nStyleZoomLevel-1]); // style } -// map_draw_cairo_layer_polygons(pMap, pCairo, pRenderMetrics, -// pMap->apLayerData[pLayer->nDataSource]->pRoadsArray, -// pLayer->paStylesAtZoomLevels[nStyleZoomLevel-1]); } } else if(pLayer->nDrawType == MAP_LAYER_RENDERTYPE_LINE_LABELS) { @@ -198,6 +195,11 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr } } } + else if(pLayer->nDrawType == MAP_LAYER_RENDERTYPE_FILL) { + if(nDrawFlags & DRAWFLAG_GEOMETRY) { + map_draw_cairo_layer_fill(pMap, pCairo, pRenderMetrics, pLayer->paStylesAtZoomLevels[nStyleZoomLevel-1]); // style + } + } } } @@ -220,6 +222,28 @@ void map_draw_cairo(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetr TIMER_END(maptimer, "END RENDER MAP (cairo)"); } +// ============================================== +// Begin map_draw_cairo_* functions +// ============================================== + +// useful for filling the screen with a color. not much else. +void map_draw_cairo_layer_fill(map_t* pMap, cairo_t* pCairo, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle) +{ + if(pLayerStyle->pGlyphFill != NULL) { + } + else { + // Simple color fill + map_draw_cairo_set_rgb(pCairo, &(pLayerStyle->clrPrimary)); + } + + cairo_rectangle(pCairo, 0,0,pMap->MapDimensions.uWidth, pMap->MapDimensions.uHeight); + cairo_fill(pCairo); + + if(pLayerStyle->pGlyphFill != NULL) { + // Restore fill style + } +} + // When there are no layers defined, we call this to show an error message in-window void map_draw_cairo_message(map_t* pMap, cairo_t *pCairo, gchar* pszMessage) { @@ -240,21 +264,6 @@ void map_draw_cairo_message(map_t* pMap, cairo_t *pCairo, gchar* pszMessage) cairo_restore(pCairo); } -// ============================================== -// Begin map_draw_cairo_* functions -// ============================================== - -// Background -static void map_draw_cairo_background(map_t* pMap, cairo_t *pCairo) -{ - // XXX: Don't hardcode background color - cairo_save(pCairo); - cairo_set_source_rgb (pCairo, 239/255.0, 239/255.0, 230/255.0); - cairo_rectangle(pCairo, 0, 0, pMap->MapDimensions.uWidth, pMap->MapDimensions.uHeight); - cairo_fill(pCairo); - cairo_restore(pCairo); -} - // // Draw a whole layer of line labels // diff --git a/src/map_draw_gdk.c b/src/map_draw_gdk.c index 062188b..99768cf 100644 --- a/src/map_draw_gdk.c +++ b/src/map_draw_gdk.c @@ -49,8 +49,6 @@ static void map_draw_gdk_layer_polygons(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, GPtrArray* pRoadsArray, maplayerstyle_t* pLayerStyle); static void map_draw_gdk_layer_lines(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, GPtrArray* pRoadsArray, maplayerstyle_t* pLayerStyle); -static void map_draw_gdk_layer_fill(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle); - static void map_draw_gdk_locations(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics); static void map_draw_gdk_locationset(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, locationset_t* pLocationSet, GPtrArray* pLocationsArray); @@ -155,7 +153,7 @@ void map_draw_gdk(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetric } // useful for filling the screen with a color. not much else. -static void map_draw_gdk_layer_fill(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle) +void map_draw_gdk_layer_fill(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle) { GdkGC* pGC = pMap->pTargetWidget->style->fg_gc[GTK_WIDGET_STATE(pMap->pTargetWidget)]; @@ -336,8 +334,6 @@ static void map_draw_gdk_layer_lines(map_t* pMap, GdkPixmap* pPixmap, rendermetr for(iString=0 ; iString<pRoadsArray->len ; iString++) { pRoad = g_ptr_array_index(pRoadsArray, iString); - - EOverlapType eOverlapType = map_rect_a_overlap_type_with_rect_b(&(pRoad->rWorldBoundingBox), &(pRenderMetrics->rWorldBoundingBox)); if(eOverlapType == OVERLAP_NONE) { continue; @@ -420,84 +416,3 @@ static void map_draw_gdk_locationset(map_t* pMap, GdkPixmap* pPixmap, rendermetr } } } - -#ifdef ROADSTER_DEAD_CODE -// GdkColor clr1; -// clr1.red = 255/255.0 * 65535; -// clr1.green = 80/255.0 * 65535; -// clr1.blue = 80/255.0 * 65535; -// GdkColor clr2; -// clr2.red = 255/255.0 * 65535; -// clr2.green = 255/255.0 * 65535; -// clr2.blue = 255/255.0 * 65535; -// -// gdk_gc_set_rgb_fg_color(pGC, &clr1); -// gdk_draw_rectangle(pPixmap, pGC, TRUE, -// nX-3,nY-3, -// 7, 7); -// gdk_gc_set_rgb_fg_color(pGC, &clr2); -// gdk_draw_rectangle(pPixmap, pGC, TRUE, -// nX-2,nY-2, -// 5, 5); -// gdk_gc_set_rgb_fg_color(pGC, &clr1); -// gdk_draw_rectangle(pPixmap, pGC, TRUE, -// nX-1,nY-1, -// 3, 3); - -// static void map_draw_gdk_tracks(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics) -// { -// gint i; -// for(i=0 ; i<pMap->pTracksArray->len ; i++) { -// gint hTrack = &g_array_index(pMap->pTracksArray, gint, i); -// -// GdkColor clr; -// clr.red = (gint)(0.5 * 65535.0); -// clr.green = (gint)(0.5 * 65535.0); -// clr.blue = (gint)(1.0 * 65535.0); -// gdk_gc_set_rgb_fg_color(pMap->pTargetWidget->style->fg_gc[GTK_WIDGET_STATE(pMap->pTargetWidget)], &clr); -// -// pointstring_t* pPointString = track_get_pointstring(hTrack); -// if(pPointString == NULL) continue; -// -// if(pPointString->pPointsArray->len >= 2) { -// -// if(pPointString->pPointsArray->len > MAX_GDK_LINE_SEGMENTS) { -// //g_warning("not drawing track with > %d segments\n", MAX_GDK_LINE_SEGMENTS); -// continue; -// } -// -// GdkPoint aPoints[MAX_GDK_LINE_SEGMENTS]; -// -// gdouble fMaxLat = MIN_LATITUDE; // init to the worst possible value so first point will override -// gdouble fMinLat = MAX_LATITUDE; -// gdouble fMaxLon = MIN_LONGITUDE; -// gdouble fMinLon = MAX_LONGITUDE; -// -// gint iPoint; -// for(iPoint=0 ; iPoint<pPointString->pPointsArray->len ; iPoint++) { -// mappoint_t* pPoint = g_ptr_array_index(pPointString->pPointsArray, iPoint); -// -// // find extents -// fMaxLat = max(pPoint->fLatitude,fMaxLat); -// fMinLat = min(pPoint->fLatitude,fMinLat); -// fMaxLon = max(pPoint->fLongitude,fMaxLon); -// fMinLon = min(pPoint->fLongitude,fMinLon); -// -// aPoints[iPoint].x = (gint)SCALE_X(pRenderMetrics, pPoint->fLongitude); -// aPoints[iPoint].y = (gint)SCALE_Y(pRenderMetrics, pPoint->fLatitude); -// } -// -// // rectangle overlap test -// if(fMaxLat < pRenderMetrics->rWorldBoundingBox.A.fLatitude -// || fMaxLon < pRenderMetrics->rWorldBoundingBox.A.fLongitude -// || fMinLat > pRenderMetrics->rWorldBoundingBox.B.fLatitude -// || fMinLon > pRenderMetrics->rWorldBoundingBox.B.fLongitude) -// { -// continue; // not visible -// } -// -// gdk_draw_lines(pPixmap, pMap->pTargetWidget->style->fg_gc[GTK_WIDGET_STATE(pMap->pTargetWidget)], aPoints, pPointString->pPointsArray->len); -// } -// } -// } -#endif diff --git a/src/map_draw_gdk.h b/src/map_draw_gdk.h index 85240b4..65985fb 100644 --- a/src/map_draw_gdk.h +++ b/src/map_draw_gdk.h @@ -29,4 +29,6 @@ void map_draw_gdk(map_t* pMap, GPtrArray* pTiles, rendermetrics_t* pRenderMetrics, GdkPixmap* pPixmap, gint nDrawFlags); void map_draw_gdk_xor_rect(map_t* pMap, GdkDrawable* pTargetDrawable, screenrect_t* pRect); +void map_draw_gdk_layer_fill(map_t* pMap, GdkPixmap* pPixmap, rendermetrics_t* pRenderMetrics, maplayerstyle_t* pLayerStyle); + #endif diff --git a/src/map_math.c b/src/map_math.c index 4b9126c..72b3ff6 100644 --- a/src/map_math.c +++ b/src/map_math.c @@ -166,9 +166,15 @@ gdouble map_get_straight_line_distance_in_degrees(mappoint_t* p1, mappoint_t* p2 return sqrt((fDeltaX*fDeltaX) + (fDeltaY*fDeltaY)); } +#define POINTS_EQUAL_ERROR (0.0002) + gboolean map_points_equal(mappoint_t* p1, mappoint_t* p2) { - return( p1->fLatitude == p2->fLatitude && p1->fLongitude == p2->fLongitude); + return( + ABS(p1->fLatitude - p2->fLatitude) < POINTS_EQUAL_ERROR && + ABS(p1->fLongitude - p2->fLongitude) < POINTS_EQUAL_ERROR); + + //return( p1->fLatitude == p2->fLatitude && p1->fLongitude == p2->fLongitude); } gboolean map_math_maprects_equal(maprect_t* pA, maprect_t* pB) diff --git a/src/map_tilemanager.c b/src/map_tilemanager.c index 7b4e97b..a3556dc 100644 --- a/src/map_tilemanager.c +++ b/src/map_tilemanager.c @@ -232,7 +232,9 @@ static void _map_tilemanager_tile_load_map_objects(maptile_t* pTile, maprect_t* " LEFT JOIN RoadName ON (%s.RoadNameID=RoadName.ID)" " WHERE" " MBRIntersects(GeomFromText('Polygon((%s %s,%s %s,%s %s,%s %s,%s %s))'), Coordinates)" - " ORDER BY TypeID, RoadNameID, X(StartPoint(Coordinates))", // XXX: add sorting by MBR x or y? + + // this improves our lazy stitching success rate + " ORDER BY TypeID, RoadNameID, X(StartPoint(Coordinates))", //pszRoadTableName, no ID column pszRoadTableName, pszRoadTableName, |