mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-04-11 03:02:20 +02:00
OP37/GCS MapLib - Upgraded to new google versions.
Zoom now as no limit. Other changes: OPMapWidget: SetZoom(double) accepts any value. Ex:19.4 double ZoomReal() returns the true zoom. double ZoomDigi() returns the current digital zoom. double ZoomTotal() returns digital+true zoom. SIGNAL: void zoomChanged(double ZoomTotal,double ZoomReal,double ZoomDigi); git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1727 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
7598973824
commit
aec96a3867
@ -37,18 +37,22 @@ namespace core {
|
||||
|
||||
ProviderStrings::ProviderStrings()
|
||||
{
|
||||
// VersionGoogleMap = "m@132";
|
||||
// VersionGoogleSatellite = "69";
|
||||
// VersionGoogleLabels = "h@132";
|
||||
// VersionGoogleTerrain = "t@125,r@132";
|
||||
// Google version strings
|
||||
VersionGoogleMap = "m@130";
|
||||
VersionGoogleSatellite = "66";
|
||||
VersionGoogleLabels = "h@130";
|
||||
VersionGoogleTerrain = "t@125,r@130";
|
||||
VersionGoogleMap = "m@132";
|
||||
VersionGoogleSatellite = "69";
|
||||
VersionGoogleLabels = "h@132";
|
||||
VersionGoogleTerrain = "t@125,r@132";
|
||||
SecGoogleWord = "Galileo";
|
||||
|
||||
// Google (China) version strings
|
||||
VersionGoogleMapChina = "m@130";
|
||||
VersionGoogleSatelliteChina = "s@66";
|
||||
VersionGoogleLabelsChina = "h@130";
|
||||
VersionGoogleTerrainChina = "t@125,r@130";
|
||||
VersionGoogleMapChina = "m@132";
|
||||
VersionGoogleSatelliteChina = "s@69";
|
||||
VersionGoogleLabelsChina = "h@132";
|
||||
VersionGoogleTerrainChina = "t@125,r@132";
|
||||
|
||||
// Google (Korea) version strings
|
||||
VersionGoogleMapKorea = "kr1.12";
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
namespace mapcontrol
|
||||
{
|
||||
MapGraphicItem::MapGraphicItem(internals::Core *core, Configuration *configuration):core(core),config(configuration),MapRenderTransform(1), maxZoom(17),minZoom(2),zoomReal(0),isSelected(false),rotation(0)
|
||||
MapGraphicItem::MapGraphicItem(internals::Core *core, Configuration *configuration):core(core),config(configuration),MapRenderTransform(1), maxZoom(17),minZoom(2),zoomReal(0),isSelected(false),rotation(0),zoomDigi(0)
|
||||
{
|
||||
|
||||
showTileGridLines=false;
|
||||
@ -128,6 +128,7 @@ namespace mapcontrol
|
||||
if(MapRenderTransform!=1)
|
||||
{
|
||||
QTransform transform;
|
||||
transform.translate(-((boundingRect().width()*MapRenderTransform)-(boundingRect().width()))/2,-((boundingRect().height()*MapRenderTransform)-(boundingRect().height()))/2);
|
||||
transform.scale(MapRenderTransform,MapRenderTransform);
|
||||
painter->setWorldTransform(transform);
|
||||
{
|
||||
@ -149,7 +150,9 @@ namespace mapcontrol
|
||||
if(MapRenderTransform!=1)
|
||||
{
|
||||
QTransform transform;
|
||||
transform.translate(-((boundingRect().width()*MapRenderTransform)-(boundingRect().width()))/2,-((boundingRect().height()*MapRenderTransform)-(boundingRect().height()))/2);
|
||||
transform.scale(MapRenderTransform,MapRenderTransform);
|
||||
|
||||
painter->setWorldTransform(transform);
|
||||
{
|
||||
DrawMap2D(painter);
|
||||
@ -276,6 +279,7 @@ namespace mapcontrol
|
||||
|
||||
void MapGraphicItem::wheelEvent(QGraphicsSceneWheelEvent *event)
|
||||
{
|
||||
|
||||
if(!IsMouseOverMarker() && !IsDragging())
|
||||
{
|
||||
if(core->GetmouseLastZoom().X() != event->pos().x() && core->mouseLastZoom.Y() != event->pos().y())
|
||||
@ -311,11 +315,11 @@ namespace mapcontrol
|
||||
|
||||
if(event->delta() > 0)
|
||||
{
|
||||
SetZoom(Zoom()+1);
|
||||
SetZoom(ZoomTotal()+1);
|
||||
}
|
||||
else if(event->delta() < 0)
|
||||
{
|
||||
SetZoom(Zoom()-1);
|
||||
SetZoom(ZoomTotal()-1);
|
||||
}
|
||||
|
||||
core->MouseWheelZooming = false;
|
||||
@ -323,7 +327,6 @@ namespace mapcontrol
|
||||
}
|
||||
void MapGraphicItem::DrawMap2D(QPainter *painter)
|
||||
{
|
||||
|
||||
if(!lastimage.isNull())
|
||||
painter->drawImage(core->GetrenderOffset().X()-lastimagepoint.X(),core->GetrenderOffset().Y()-lastimagepoint.Y(),lastimage);
|
||||
|
||||
@ -333,21 +336,13 @@ namespace mapcontrol
|
||||
{
|
||||
core->SettilePoint (core->GetcenterTileXYLocation());
|
||||
core->SettilePoint(Point(core->GettilePoint().X()+ i,core->GettilePoint().Y()+j));
|
||||
|
||||
|
||||
|
||||
{
|
||||
internals::Tile* t = core->Matrix.TileAt(core->GettilePoint());
|
||||
//qDebug()<<"OPMapControl::DrawMap2D tile:"<<t->GetPos().ToString()<<" as "<<t->Overlays.count()<<" overlays";
|
||||
//Tile t = core->Matrix[tileToDraw];
|
||||
if(true)
|
||||
{
|
||||
//qDebug()<< "opmapcontrol:draw2d TileHasValue:"<<t->GetPos().ToString();
|
||||
core->tileRect.SetX(core->GettilePoint().X()*core->tileRect.Width());
|
||||
core->tileRect.SetY(core->GettilePoint().Y()*core->tileRect.Height());
|
||||
core->tileRect.Offset(core->GetrenderOffset());
|
||||
//qDebug()<<core->GetrenderOffset().ToString();
|
||||
|
||||
if(core->GetCurrentRegion().IntersectsWith(core->tileRect))
|
||||
{
|
||||
bool found = false;
|
||||
@ -364,7 +359,7 @@ namespace mapcontrol
|
||||
found = true;
|
||||
{
|
||||
painter->drawPixmap(core->tileRect.X(),core->tileRect.Y(), core->tileRect.Width(), core->tileRect.Height(),PureImageProxy::FromStream(img));
|
||||
|
||||
// qDebug()<<"tile:"<<core->tileRect.X()<<core->tileRect.Y();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -416,6 +411,10 @@ namespace mapcontrol
|
||||
}
|
||||
}
|
||||
// painter->drawRect(core->GetrenderOffset().X()-lastimagepoint.X()-3,core->GetrenderOffset().Y()-lastimagepoint.Y()-3,lastimage.width(),lastimage.height());
|
||||
// painter->setPen(Qt::red);
|
||||
// painter->drawLine(-10,-10,10,10);
|
||||
// painter->drawLine(10,10,-10,-10);
|
||||
// painter->drawRect(boundingRect().adjusted(100,100,-100,-100));
|
||||
}
|
||||
|
||||
|
||||
@ -424,17 +423,24 @@ namespace mapcontrol
|
||||
core::Point ret = core->FromLatLngToLocal(point);
|
||||
if(MapRenderTransform!=1)
|
||||
{
|
||||
ret.SetX((int) (ret.X() / MapRenderTransform));
|
||||
ret.SetY((int) (ret.Y() / MapRenderTransform));
|
||||
ret.SetX((int) (ret.X() * MapRenderTransform));
|
||||
ret.SetY((int) (ret.Y() * MapRenderTransform));
|
||||
ret.SetX(ret.X()-((boundingRect().width()*MapRenderTransform)-(boundingRect().width()))/2);
|
||||
ret.SetY(ret.Y()-((boundingRect().height()*MapRenderTransform)-(boundingRect().height()))/2);
|
||||
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
internals::PointLatLng MapGraphicItem::FromLocalToLatLng(int x, int y)
|
||||
{
|
||||
if(MapRenderTransform!=-1)
|
||||
if(MapRenderTransform!=1)
|
||||
{
|
||||
x = (int) (x * MapRenderTransform);
|
||||
y = (int) (y * MapRenderTransform);
|
||||
x=x+((boundingRect().width()*MapRenderTransform)-(boundingRect().width()))/2;
|
||||
y=y+((boundingRect().height()*MapRenderTransform)-(boundingRect().height()))/2;
|
||||
|
||||
x = (int) (x / MapRenderTransform);
|
||||
y = (int) (y / MapRenderTransform);
|
||||
}
|
||||
return core->FromLocalToLatLng(x, y);
|
||||
}
|
||||
@ -443,34 +449,48 @@ namespace mapcontrol
|
||||
{
|
||||
return zoomReal;
|
||||
}
|
||||
double MapGraphicItem::ZoomDigi()
|
||||
{
|
||||
return zoomDigi;
|
||||
}
|
||||
double MapGraphicItem::ZoomTotal()
|
||||
{
|
||||
return zoomDigi+zoomReal;
|
||||
}
|
||||
|
||||
void MapGraphicItem::SetZoom(double const& value)
|
||||
{
|
||||
if(zoomReal != value)
|
||||
if(ZoomTotal() != value)
|
||||
{
|
||||
if(value > MaxZoom())
|
||||
{
|
||||
zoomReal = MaxZoom();
|
||||
zoomDigi =value-MaxZoom();
|
||||
}
|
||||
else
|
||||
if(value < MinZoom())
|
||||
{
|
||||
zoomDigi=0;
|
||||
zoomReal = MinZoom();
|
||||
}
|
||||
else
|
||||
{
|
||||
zoomDigi=0;
|
||||
zoomReal = value;
|
||||
}
|
||||
|
||||
float remainder = (float)std::fmod((float) value, (float) 1);
|
||||
if(remainder != 0)
|
||||
double integer;
|
||||
double remainder = modf (value , &integer);
|
||||
if(zoomDigi!=0||remainder != 0)
|
||||
{
|
||||
float scaleValue = remainder + 1;
|
||||
float scaleValue = zoomDigi+remainder + 1;
|
||||
{
|
||||
MapRenderTransform = scaleValue;
|
||||
// qDebug()<<"scale="<<scaleValue<<"zoomdigi:"<<ZoomDigi()<<"integer:"<<integer;
|
||||
}
|
||||
|
||||
SetZoomStep((qint32)(value - remainder));
|
||||
|
||||
if(integer>MaxZoom())
|
||||
integer=MaxZoom();
|
||||
SetZoomStep((qint32)(integer));
|
||||
// core->GoToCurrentPositionOnZoom();
|
||||
this->update();
|
||||
|
||||
}
|
||||
@ -491,24 +511,26 @@ namespace mapcontrol
|
||||
}
|
||||
void MapGraphicItem::SetZoomStep(int const& value)
|
||||
{
|
||||
if(value-core->Zoom()>0 && value<= MaxZoom())
|
||||
double integer;
|
||||
double remainder = modf (value , &integer);
|
||||
if(integer-core->Zoom()>0 && value<= MaxZoom())
|
||||
ConstructLastImage(value-core->Zoom());
|
||||
else
|
||||
lastimage=QImage();
|
||||
if(value > MaxZoom())
|
||||
{
|
||||
core->SetZoom(MaxZoom());
|
||||
emit zoomChanged(MaxZoom());
|
||||
emit zoomChanged(MaxZoom()+ZoomDigi(),Zoom(),ZoomDigi());
|
||||
}
|
||||
else if(value < MinZoom())
|
||||
{
|
||||
core->SetZoom(MinZoom());
|
||||
emit zoomChanged(MinZoom());
|
||||
emit zoomChanged(MinZoom()+ZoomDigi(),Zoom(),ZoomDigi());
|
||||
}
|
||||
else
|
||||
{
|
||||
core->SetZoom(value);
|
||||
emit zoomChanged(value);
|
||||
emit zoomChanged(value+ZoomDigi(),Zoom(),ZoomDigi());;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -98,6 +98,9 @@ namespace mapcontrol
|
||||
void ConstructLastImage(int const& zoomdiff);
|
||||
internals::PureProjection* Projection()const{return core->Projection();}
|
||||
double Zoom();
|
||||
double ZoomDigi();
|
||||
double ZoomTotal();
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
|
||||
void mousePressEvent ( QGraphicsSceneMouseEvent * event );
|
||||
@ -142,6 +145,7 @@ namespace mapcontrol
|
||||
internals::PointLatLng selectionStart;
|
||||
internals::PointLatLng selectionEnd;
|
||||
double zoomReal;
|
||||
double zoomDigi;
|
||||
QRectF maprect;
|
||||
bool isSelected;
|
||||
bool isMouseOverMarker;
|
||||
@ -200,7 +204,7 @@ namespace mapcontrol
|
||||
*
|
||||
* @param zoom
|
||||
*/
|
||||
void zoomChanged(double zoom);
|
||||
void zoomChanged(double zoomtotal,double zoomreal,double zoomdigi);
|
||||
};
|
||||
}
|
||||
#endif // MAPGRAPHICITEM_H
|
||||
|
@ -41,7 +41,7 @@ namespace mapcontrol
|
||||
mscene.addItem(map);
|
||||
this->setScene(&mscene);
|
||||
this->adjustSize();
|
||||
connect(map,SIGNAL(zoomChanged(double)),this,SIGNAL(zoomChanged(double)));
|
||||
connect(map,SIGNAL(zoomChanged(double,double,double)),this,SIGNAL(zoomChanged(double,double,double)));
|
||||
connect(map->core,SIGNAL(OnCurrentPositionChanged(internals::PointLatLng)),this,SIGNAL(OnCurrentPositionChanged(internals::PointLatLng)));
|
||||
connect(map->core,SIGNAL(OnEmptyTileError(int,core::Point)),this,SIGNAL(OnEmptyTileError(int,core::Point)));
|
||||
connect(map->core,SIGNAL(OnMapDrag()),this,SIGNAL(OnMapDrag()));
|
||||
@ -142,6 +142,7 @@ namespace mapcontrol
|
||||
{
|
||||
return currentmouseposition;
|
||||
}
|
||||
|
||||
void OPMapWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QGraphicsView::mouseMoveEvent(event);
|
||||
|
@ -151,7 +151,7 @@ namespace mapcontrol
|
||||
// Q_PROPERTY(int MaxZoom READ MaxZoom WRITE SetMaxZoom)
|
||||
Q_PROPERTY(int MinZoom READ MinZoom WRITE SetMinZoom)
|
||||
Q_PROPERTY(bool ShowTileGridLines READ ShowTileGridLines WRITE SetShowTileGridLines)
|
||||
Q_PROPERTY(double Zoom READ Zoom WRITE SetZoom)
|
||||
Q_PROPERTY(double Zoom READ ZoomTotal WRITE SetZoom)
|
||||
Q_PROPERTY(qreal Rotate READ Rotate WRITE SetRotate)
|
||||
Q_ENUMS(internals::MouseWheelZoomType::Types)
|
||||
Q_ENUMS(internals::GeoCoderStatusCode::Types)
|
||||
@ -217,7 +217,9 @@ namespace mapcontrol
|
||||
internals::PointLatLng CurrentPosition()const{return map->core->CurrentPosition();}
|
||||
void SetCurrentPosition(internals::PointLatLng const& value){map->core->SetCurrentPosition(value);}
|
||||
|
||||
double Zoom(){return map->Zoom();}
|
||||
double ZoomReal(){return map->Zoom();}
|
||||
double ZoomDigi(){return map->ZoomDigi();}
|
||||
double ZoomTotal(){return map->ZoomTotal();}
|
||||
void SetZoom(double const& value){map->SetZoom(value);}
|
||||
|
||||
qreal Rotate(){return map->rotation;}
|
||||
@ -361,7 +363,7 @@ namespace mapcontrol
|
||||
void mouseMoveEvent ( QMouseEvent * event );
|
||||
// private slots:
|
||||
signals:
|
||||
void zoomChanged(double zoom);
|
||||
void zoomChanged(double zoomt,double zoom, double zoomd);
|
||||
/**
|
||||
* @brief fires when one of the WayPoints numbers changes (not fired if due to a auto-renumbering)
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user