Subversion Repositories Projects

Rev

Rev 315 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 315 Rev 334
1
/***************************************************************************
1
/***************************************************************************
2
 *   Copyright (C) 2009 by Manuel Schrape                                  *
2
 *   Copyright (C) 2009 by Manuel Schrape                                  *
3
 *   manuel.schrape@gmx.de                                                 *
3
 *   manuel.schrape@gmx.de                                                 *
4
 *                                                                         *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License.        *
7
 *   the Free Software Foundation; either version 2 of the License.        *
8
 *                                                                         *
8
 *                                                                         *
9
 *   This program is distributed in the hope that it will be useful,       *
9
 *   This program is distributed in the hope that it will be useful,       *
10
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
10
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
11
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12
 *   GNU General Public License for more details.                          *
12
 *   GNU General Public License for more details.                          *
13
 *                                                                         *
13
 *                                                                         *
14
 *   You should have received a copy of the GNU General Public License     *
14
 *   You should have received a copy of the GNU General Public License     *
15
 *   along with this program; if not, write to the                         *
15
 *   along with this program; if not, write to the                         *
16
 *   Free Software Foundation, Inc.,                                       *
16
 *   Free Software Foundation, Inc.,                                       *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18
 ***************************************************************************/
18
 ***************************************************************************/
19
#include "dlg_Map.h"
19
#include "dlg_Map.h"
20
 
20
 
21
dlg_Map::dlg_Map(QWidget *parent) : QDialog(parent)
21
dlg_Map::dlg_Map(QWidget *parent) : QDialog(parent)
22
{
22
{
23
    setupUi(this);
23
    setupUi(this);
24
 
24
 
25
    // Kartenwahl ausschalten
25
    // Kartenwahl ausschalten
26
    lb_Maps->setVisible(false);
26
    //lb_Maps->setVisible(false);
27
    cb_Maps->setVisible(false);
27
    //cb_Maps->setVisible(false);
-
 
28
 
-
 
29
    cb_Maps->removeItem(5);
-
 
30
    cb_Maps->removeItem(4);
-
 
31
    cb_Maps->removeItem(3);
-
 
32
    cb_Maps->removeItem(2);
28
 
33
 
29
    // Noch nicht eingebaut also Button weg.
34
    // Noch nicht eingebaut also Button weg.
30
    pb_SendWaypoints->setVisible(false);
35
    pb_SendWaypoints->setVisible(false);
31
 
36
 
32
    pb_Add->setEnabled(false);
37
    pb_Add->setEnabled(false);
33
    pb_Goto->setEnabled(false);
38
    pb_Goto->setEnabled(false);
34
}
39
}
35
 
40
 
36
// Karte erstellen und anzeigen
41
// Karte erstellen und anzeigen
37
void dlg_Map::create_Map(cSettings *t_Settings)
42
void dlg_Map::create_Map(cSettings *t_Settings)
38
{
43
{
39
    o_Settings = t_Settings;
44
    o_Settings = t_Settings;
40
 
45
 
41
    cb_CenterPos->setChecked(o_Settings->Map.GotoPosition);
46
    cb_CenterPos->setChecked(o_Settings->Map.GotoPosition);
42
    cb_ShowRoute->setChecked(o_Settings->Map.ShowTrack);
47
    cb_ShowRoute->setChecked(o_Settings->Map.ShowTrack);
43
 
48
 
44
    connect(sl_Zoom,   SIGNAL(valueChanged(int)), this, SLOT(slot_Zoom(int)));
49
    connect(sl_Zoom,   SIGNAL(valueChanged(int)), this, SLOT(slot_Zoom(int)));
45
    connect(pb_Add,    SIGNAL(clicked()), this, SLOT(slot_AddWayPoint()));
50
    connect(pb_Add,    SIGNAL(clicked()), this, SLOT(slot_AddWayPoint()));
46
    connect(pb_Delete, SIGNAL(clicked()), this, SLOT(slot_DeleteWayPoints()));
51
    connect(pb_Delete, SIGNAL(clicked()), this, SLOT(slot_DeleteWayPoints()));
47
    connect(pb_Goto,   SIGNAL(clicked()), this, SLOT(slot_GotoTarget()));
52
    connect(pb_Goto,   SIGNAL(clicked()), this, SLOT(slot_GotoTarget()));
48
    connect(cb_Maps,   SIGNAL(currentIndexChanged(int)), this, SLOT(slot_ChangeMap(int)));
53
    connect(cb_Maps,   SIGNAL(currentIndexChanged(int)), this, SLOT(slot_ChangeMap(int)));
49
    connect(this,      SIGNAL(rejected()), this, SLOT(slot_Close()));
54
    connect(this,      SIGNAL(rejected()), this, SLOT(slot_Close()));
50
 
55
 
51
    o_Map = new MapControl(w_Map->size());
56
    o_Map = new MapControl(w_Map->size());
52
    o_Map->enablePersistentCache(o_Settings->DIR.Cache);
57
    o_Map->enablePersistentCache(o_Settings->DIR.Cache);
53
    o_Map->showScale(true);
58
    o_Map->showScale(true);
54
 
59
 
55
    o_Adapter = new OSMMapAdapter();
60
    o_Adapter = new OSMMapAdapter();
56
 
61
 
57
    o_Layer = new MapLayer("MapLayer", o_Adapter);
62
    o_Layer = new MapLayer("MapLayer", o_Adapter);
58
    o_Click = new GeometryLayer("Click", o_Adapter);
63
    o_Click = new GeometryLayer("Click", o_Adapter);
59
    o_Route = new GeometryLayer("Poute", o_Adapter);
64
    o_Route = new GeometryLayer("Poute", o_Adapter);
60
 
65
 
61
    o_Map->addLayer(o_Layer);
66
    o_Map->addLayer(o_Layer);
62
    o_Map->addLayer(o_Click);
67
    o_Map->addLayer(o_Click);
63
    o_Map->addLayer(o_Route);
68
    o_Map->addLayer(o_Route);
64
 
69
 
65
    o_Map->setZoom(17);
70
    o_Map->setZoom(17);
66
//    o_Map->setView(QPointF(13.85615670,52.50787020));
71
//    o_Map->setView(QPointF(13.85615670,52.50787020));
67
    o_Map->setView(QPointF(13.5,52.5));
72
    o_Map->setView(QPointF(13.5,52.5));
68
 
73
 
69
    connect(o_Map, SIGNAL(mouseEventCoordinate(const QMouseEvent*, const QPointF)), this, SLOT(slot_Click(const QMouseEvent*, const QPointF)));
74
    connect(o_Map, SIGNAL(mouseEventCoordinate(const QMouseEvent*, const QPointF)), this, SLOT(slot_Click(const QMouseEvent*, const QPointF)));
70
 
75
 
71
    l_Map->addWidget(o_Map);
76
    l_Map->addWidget(o_Map);
72
 
77
 
73
    sl_Zoom->setValue(17);
78
    sl_Zoom->setValue(17);
74
 
79
 
75
    Pen[0] = new QPen(QColor(0,0,255,255));
80
    Pen[0] = new QPen(QColor(0,0,255,255));
76
    Pen[0]->setWidth(2);
81
    Pen[0]->setWidth(2);
77
    Pen[1] = new QPen(QColor(255,0,0,255));
82
    Pen[1] = new QPen(QColor(255,0,0,255));
78
    Pen[1]->setWidth(2);
83
    Pen[1]->setWidth(2);
79
}
84
}
80
 
85
 
81
// Position zum Flug-Track hinzufügen
86
// Position zum Flug-Track hinzufügen
82
void dlg_Map::add_Position(double x, double y)
87
void dlg_Map::add_Position(double x, double y)
83
{
88
{
84
    sWayPoint WayPoint;
89
    sWayPoint WayPoint;
85
 
90
 
86
    WayPoint.Longitude = x;
91
    WayPoint.Longitude = x;
87
    WayPoint.Latitude = y;
92
    WayPoint.Latitude = y;
88
    WayPoint.Time = sb_Time->value();
93
    WayPoint.Time = sb_Time->value();
89
 
94
 
90
    l_WayPoint.append(WayPoint);
95
    l_WayPoint.append(WayPoint);
91
 
96
 
92
    o_Route->removeGeometry(l_RouteFL);
97
    o_Route->removeGeometry(l_RouteFL);
93
    p_RouteFL.append(new Point(x,y));
98
    p_RouteFL.append(new Point(x,y));
94
 
99
 
95
    o_Click->removeGeometry(LastPos);
100
    o_Click->removeGeometry(LastPos);
96
 
101
 
97
    Point* P = new CirclePoint(x, y, "P1", Point::Middle, Pen[0]);
102
    Point* P = new CirclePoint(x, y, "P1", Point::Middle, Pen[0]);
98
    LastPos = P;
103
    LastPos = P;
99
    P->setBaselevel(17);
104
    P->setBaselevel(17);
100
    o_Click->addGeometry(P);
105
    o_Click->addGeometry(P);
101
 
106
 
102
    if (cb_CenterPos->isChecked())
107
    if (cb_CenterPos->isChecked())
103
    {
108
    {
104
        o_Map->setView(QPointF(x, y));
109
        o_Map->setView(QPointF(x, y));
105
    }
110
    }
106
 
111
 
107
    if (cb_ShowRoute->isChecked())
112
    if (cb_ShowRoute->isChecked())
108
    {
113
    {
109
        l_RouteFL = new LineString(p_RouteFL, "", Pen[1]);
114
        l_RouteFL = new LineString(p_RouteFL, "", Pen[1]);
110
 
115
 
111
        o_Route->addGeometry(l_RouteFL);
116
        o_Route->addGeometry(l_RouteFL);
112
    }
117
    }
113
    o_Map->updateRequestNew();
118
    o_Map->updateRequestNew();
114
}
119
}
115
 
120
 
116
// Zoom der Karte ändern
121
// Zoom der Karte ändern
117
void dlg_Map::slot_Zoom(int t_Zoom)
122
void dlg_Map::slot_Zoom(int t_Zoom)
118
{
123
{
119
    o_Map->setZoom(t_Zoom);
124
    o_Map->setZoom(t_Zoom);
120
}
125
}
121
 
126
 
122
// Waypoint zur Liste hinzufügen
127
// Waypoint zur Liste hinzufügen
123
void dlg_Map::slot_AddWayPoint()
128
void dlg_Map::slot_AddWayPoint()
124
{
129
{
125
    o_Route->removeGeometry(l_RouteWP);
130
    o_Route->removeGeometry(l_RouteWP);
126
 
131
 
127
    p_RouteWP.append(LastClick);
132
    p_RouteWP.append(LastClick);
128
    l_RouteWP = new LineString(p_RouteWP, "", Pen[0]);
133
    l_RouteWP = new LineString(p_RouteWP, "", Pen[0]);
129
 
134
 
130
    o_Route->addGeometry(l_RouteWP);
135
    o_Route->addGeometry(l_RouteWP);
131
    o_Map->updateRequestNew();
136
    o_Map->updateRequestNew();
132
}
137
}
133
 
138
 
134
// Waypoint-Liste löschen
139
// Waypoint-Liste löschen
135
void dlg_Map::slot_DeleteWayPoints()
140
void dlg_Map::slot_DeleteWayPoints()
136
{
141
{
137
    o_Route->removeGeometry(l_RouteWP);
142
    o_Route->removeGeometry(l_RouteWP);
138
    p_RouteWP.clear();
143
    p_RouteWP.clear();
139
    l_WayPoint.clear();
144
    l_WayPoint.clear();
140
    o_Map->updateRequestNew();
145
    o_Map->updateRequestNew();
141
}
146
}
142
 
147
 
143
// Zum Zielpunkt fliegen
148
// Zum Zielpunkt fliegen
144
void dlg_Map::slot_GotoTarget()
149
void dlg_Map::slot_GotoTarget()
145
{
150
{
146
    sWayPoint Target;
151
    sWayPoint Target;
147
 
152
 
148
    Target.Longitude = LastClick->longitude();
153
    Target.Longitude = LastClick->longitude();
149
    Target.Latitude = LastClick->latitude();
154
    Target.Latitude = LastClick->latitude();
150
    Target.Time = sb_Time->value();
155
    Target.Time = sb_Time->value();
151
 
156
 
152
    emit(set_Target(Target));
157
    emit(set_Target(Target));
153
}
158
}
154
 
159
 
155
// Click in der Karte
160
// Click in der Karte
156
void dlg_Map::slot_Click(const QMouseEvent* Event, const QPointF Coord)
161
void dlg_Map::slot_Click(const QMouseEvent* Event, const QPointF Coord)
157
{
162
{
158
    if ((Event->type() == QEvent::MouseButtonPress) && ((Event->button() == Qt::RightButton) || (Event->button() == Qt::MidButton)))
163
    if ((Event->type() == QEvent::MouseButtonPress) && ((Event->button() == Qt::RightButton) || (Event->button() == Qt::MidButton)))
159
    {
164
    {
160
        sl_Zoom->setValue(o_Adapter->adaptedZoom());
165
        sl_Zoom->setValue(o_Adapter->adaptedZoom());
161
    }
166
    }
162
 
167
 
163
    // Überwachen ob Karte verschoben wird
168
    // Überwachen ob Karte verschoben wird
164
    if ((Event->type() == QEvent::MouseButtonPress) && (Event->button() == Qt::LeftButton))
169
    if ((Event->type() == QEvent::MouseButtonPress) && (Event->button() == Qt::LeftButton))
165
    {
170
    {
166
        MapCenter = o_Map->currentCoordinate();
171
        MapCenter = o_Map->currentCoordinate();
167
    }
172
    }
168
 
173
 
169
    // Nur wenn nicht Verschoben dann einen Punkt setzen
174
    // Nur wenn nicht Verschoben dann einen Punkt setzen
170
    if ((Event->type() == QEvent::MouseButtonRelease) && (Event->button() == Qt::LeftButton))
175
    if ((Event->type() == QEvent::MouseButtonRelease) && (Event->button() == Qt::LeftButton))
171
    {
176
    {
172
        if (o_Map->currentCoordinate() == MapCenter)
177
        if (o_Map->currentCoordinate() == MapCenter)
173
        {
178
        {
174
            pb_Add->setEnabled(true);
179
            pb_Add->setEnabled(true);
175
            pb_Goto->setEnabled(true);
180
            pb_Goto->setEnabled(true);
176
 
181
 
177
            o_Click->removeGeometry(ClickPoint);
182
            o_Click->removeGeometry(ClickPoint);
178
 
183
 
179
            ClickPoint = new CirclePoint(Coord.x(), Coord.y(), 6, "P1", Point::Middle, Pen[1]);
184
            ClickPoint = new CirclePoint(Coord.x(), Coord.y(), 6, "P1", Point::Middle, Pen[1]);
180
//            LastPoint = P;
185
//            LastPoint = P;
181
 
186
 
182
            LastClick = new Point(Coord.x(), Coord.y());
187
            LastClick = new Point(Coord.x(), Coord.y());
183
 
188
 
184
            ClickPoint->setBaselevel(o_Adapter->adaptedZoom());
189
            ClickPoint->setBaselevel(o_Adapter->adaptedZoom());
185
            o_Click->addGeometry(ClickPoint);
190
            o_Click->addGeometry(ClickPoint);
186
        }
191
        }
187
    }
192
    }
188
 
193
 
189
    o_Map->updateRequestNew();
194
    o_Map->updateRequestNew();
190
//    qDebug(QString("%1").arg(Coord.x()).toLatin1().data());
195
//    qDebug(QString("%1").arg(Coord.x()).toLatin1().data());
191
//    qDebug(QString("%1").arg(Coord.y()).toLatin1().data());
196
//    qDebug(QString("%1").arg(Coord.y()).toLatin1().data());
192
}
197
}
193
 
198
 
194
// auf Veränderung der Fenstergröße reagieren
199
// auf Veränderung der Fenstergröße reagieren
195
void dlg_Map::resizeEvent ( QResizeEvent * event )
200
void dlg_Map::resizeEvent ( QResizeEvent * event )
196
{
201
{
197
    event = event;
202
    event = event;
198
    o_Map->resize(w_Map->size() - QSize(20,20));
203
    o_Map->resize(w_Map->size() - QSize(20,20));
199
}
204
}
200
 
205
 
201
// Karte wechseln
206
// Karte wechseln
202
void dlg_Map::slot_ChangeMap(int t_Set)
207
void dlg_Map::slot_ChangeMap(int t_Set)
203
{
208
{
204
    int zoom = o_Adapter->adaptedZoom();
209
    int zoom = o_Adapter->adaptedZoom();
205
    QPointF a = o_Map->currentCoordinate();
210
    QPointF a = o_Map->currentCoordinate();
206
 
211
 
207
    o_Map->setZoom(0);
212
    o_Map->setZoom(0);
208
 
213
 
209
    switch(t_Set)
214
    switch(t_Set)
210
    {
215
    {
211
        case 0 : // OpenStreetMap
216
        case 0 : // OpenStreetMap
212
        {
217
        {
213
            o_Adapter = new OSMMapAdapter();
218
            o_Adapter = new OSMMapAdapter();
214
        }
219
        }
215
        break;
220
        break;
-
 
221
        case 1 : // Yahoo Sat
-
 
222
        {
-
 
223
            o_Adapter = new WMSMapAdapter("openaerialmap.org", "/wms/wms.asp?wms=WorldMap&LAYERS=world&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&SRS=EPSG:4326&TRANSPARENT=FALSE", 256);
-
 
224
        }
-
 
225
        break;
216
        case 1 : // Google Maps
226
        case 2 : // Google Maps
217
        {
227
        {
218
            o_Adapter = new GoogleMapAdapter();
228
            o_Adapter = new GoogleMapAdapter();
219
        }
229
        }
220
        break;
230
        break;
221
        case 2 : // Google Sat
231
        case 3 : // Google Sat
222
        {
232
        {
223
            o_Adapter = new GoogleSatMapAdapter();
233
            o_Adapter = new GoogleSatMapAdapter();
224
        }
234
        }
225
        break;
235
        break;
226
        case 3 : // Yahoo Maps
236
        case 4 : // Yahoo Maps
227
        {
237
        {
228
            o_Adapter = new YahooMapAdapter();
238
            o_Adapter = new YahooMapAdapter();
229
        }
239
        }
230
        break;
240
        break;
231
        case 4 : // Yahoo Sat
-
 
232
        {
-
 
233
            o_Adapter = new YahooMapAdapter("us.maps3.yimg.com", "/aerial.maps.yimg.com/png?v=1.7&t=a&s=256&x=%2&y=%3&z=%1");
-
 
234
        }
-
 
235
        case 5 : // Yahoo Sat
241
        case 5 : // Yahoo Sat
236
        {
242
        {
237
            o_Adapter = new WMSMapAdapter("openaerialmap.org", "/wms/wms.asp?wms=WorldMap&LAYERS=world&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&SRS=EPSG:4326&TRANSPARENT=FALSE", 256);
243
            o_Adapter = new YahooMapAdapter("us.maps3.yimg.com", "/aerial.maps.yimg.com/png?v=1.7&t=a&s=256&x=%2&y=%3&z=%1");
238
        }
244
        }
239
        break;
245
        break;
240
    }
246
    }
241
 
247
 
242
    o_Layer->setMapAdapter(o_Adapter);
248
    o_Layer->setMapAdapter(o_Adapter);
243
    o_Click->setMapAdapter(o_Adapter);
249
    o_Click->setMapAdapter(o_Adapter);
244
    o_Route->setMapAdapter(o_Adapter);
250
    o_Route->setMapAdapter(o_Adapter);
245
 
251
 
246
    o_Map->updateRequestNew();
252
    o_Map->updateRequestNew();
247
    o_Map->setZoom(zoom);
253
    o_Map->setZoom(zoom);
248
}
254
}
249
 
255
 
250
// Fenster wird geschlossen.
256
// Fenster wird geschlossen.
251
void dlg_Map::slot_Close()
257
void dlg_Map::slot_Close()
252
{
258
{
253
    o_Settings->Map.GotoPosition = cb_CenterPos->isChecked();
259
    o_Settings->Map.GotoPosition = cb_CenterPos->isChecked();
254
    o_Settings->Map.ShowTrack    = cb_ShowRoute->isChecked();
260
    o_Settings->Map.ShowTrack    = cb_ShowRoute->isChecked();
255
    emit set_Settings(o_Settings);
261
    emit set_Settings(o_Settings);
256
}
262
}
257
 
263
 
258
 
264