本文整理汇总了C++中QGeoCoordinate::altitude方法的典型用法代码示例。如果您正苦于以下问题:C++ QGeoCoordinate::altitude方法的具体用法?C++ QGeoCoordinate::altitude怎么用?C++ QGeoCoordinate::altitude使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QGeoCoordinate
的用法示例。
在下文中一共展示了QGeoCoordinate::altitude方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: coordinateInterpolation
QGeoCoordinate QGeoProjection::coordinateInterpolation(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress)
{
QDoubleVector2D s = QGeoProjection::coordToMercator(from);
QDoubleVector2D e = QGeoProjection::coordToMercator(to);
double x = s.x();
if (0.5 < qAbs(e.x() - s.x())) {
// handle dateline crossing
double ex = e.x();
double sx = s.x();
if (ex < sx)
sx -= 1.0;
else if (sx < ex)
ex -= 1.0;
x = (1.0 - progress) * sx + progress * ex;
if (!qFuzzyIsNull(x) && (x < 0.0))
x += 1.0;
} else {
x = (1.0 - progress) * s.x() + progress * e.x();
}
double y = (1.0 - progress) * s.y() + progress * e.y();
QGeoCoordinate result = QGeoProjection::mercatorToCoord(QDoubleVector2D(x, y));
result.setAltitude((1.0 - progress) * from.altitude() + progress * to.altitude());
return result;
}
示例2: positionUpdated
void GeolocationClientQt::positionUpdated(const QGeoPositionInfo &geoPosition)
{
if (!geoPosition.isValid())
return;
QGeoCoordinate coord = geoPosition.coordinate();
double latitude = coord.latitude();
double longitude = coord.longitude();
bool providesAltitude = (geoPosition.coordinate().type() == QGeoCoordinate::Coordinate3D);
double altitude = coord.altitude();
double accuracy = geoPosition.attribute(QGeoPositionInfo::HorizontalAccuracy);
bool providesAltitudeAccuracy = geoPosition.hasAttribute(QGeoPositionInfo::VerticalAccuracy);
double altitudeAccuracy = geoPosition.attribute(QGeoPositionInfo::VerticalAccuracy);
bool providesHeading = geoPosition.hasAttribute(QGeoPositionInfo::Direction);
double heading = geoPosition.attribute(QGeoPositionInfo::Direction);
bool providesSpeed = geoPosition.hasAttribute(QGeoPositionInfo::GroundSpeed);
double speed = geoPosition.attribute(QGeoPositionInfo::GroundSpeed);
double timeStampInSeconds = geoPosition.timestamp().toMSecsSinceEpoch() / 1000;
m_lastPosition = GeolocationPosition::create(timeStampInSeconds, latitude, longitude,
accuracy, providesAltitude, altitude,
providesAltitudeAccuracy, altitudeAccuracy,
providesHeading, heading, providesSpeed, speed);
WebCore::Page* page = QWebPagePrivate::core(m_page);
page->geolocationController()->positionChanged(m_lastPosition.get());
}
示例3: nsGeoPosition
void
QTMLocationProvider::positionUpdated(const QGeoPositionInfo &geoPosition)
{
if (!geoPosition.isValid()) {
NS_WARNING("Invalida geoposition received");
return;
}
QGeoCoordinate coord = geoPosition.coordinate();
double latitude = coord.latitude();
double longitude = coord.longitude();
double altitude = coord.altitude();
double accuracy = geoPosition.attribute(QGeoPositionInfo::HorizontalAccuracy);
double altitudeAccuracy = geoPosition.attribute(QGeoPositionInfo::VerticalAccuracy);
double heading = geoPosition.attribute(QGeoPositionInfo::Direction);
bool providesSpeed = geoPosition.hasAttribute(QGeoPositionInfo::GroundSpeed);
double speed = geoPosition.attribute(QGeoPositionInfo::GroundSpeed);
nsRefPtr<nsGeoPosition> p =
new nsGeoPosition(latitude, longitude,
altitude, accuracy,
altitudeAccuracy, heading,
speed, geoPosition.timestamp().toTime_t());
if (mCallback) {
mCallback->Update(p);
}
}
示例4: dragEnded
/*!
\internal
*/
void QDeclarativeRectangleMapItem::dragEnded()
{
QPointF newTopLeftPoint = QPointF(x(),y());
QGeoCoordinate newTopLeft = map()->screenPositionToCoordinate(newTopLeftPoint, false);
if (newTopLeft.isValid()) {
// calculate new geo width while checking for dateline crossing
const double lonW = bottomRight_.longitude() > topLeft_.longitude() ?
bottomRight_.longitude() - topLeft_.longitude() :
bottomRight_.longitude() + 360 - topLeft_.longitude();
const double latH = qAbs(bottomRight_.latitude() - topLeft_.latitude());
QGeoCoordinate newBottomRight;
// prevent dragging over valid min and max latitudes
if (QLocationUtils::isValidLat(newTopLeft.latitude() - latH)) {
newBottomRight.setLatitude(newTopLeft.latitude() - latH);
} else {
newBottomRight.setLatitude(QLocationUtils::clipLat(newTopLeft.latitude() - latH));
newTopLeft.setLatitude(newBottomRight.latitude() + latH);
}
// handle dateline crossing
newBottomRight.setLongitude(QLocationUtils::wrapLong(newTopLeft.longitude() + lonW));
newBottomRight.setAltitude(newTopLeft.altitude());
topLeft_ = newTopLeft;
bottomRight_ = newBottomRight;
geometry_.setPreserveGeometry(true, newTopLeft);
borderGeometry_.setPreserveGeometry(true, newTopLeft);
geometry_.markSourceDirty();
borderGeometry_.markSourceDirty();
updateMapItem();
emit topLeftChanged(topLeft_);
emit bottomRightChanged(bottomRight_);
}
}
示例5: positionUpdated
void PointInPolygonWidget::positionUpdated(const QGeoPositionInfo &info)
{
QGeoPositionInfo pos_info = info;
QGeoCoordinate pos = pos_info.coordinate();
if (pos.isValid()) {
ui->xNewPoint->setValue(pos.latitude());
ui->yNewPoint->setValue(pos.longitude());
ui->xPoint->setValue(pos.latitude());
ui->yPoint->setValue(pos.longitude());
double dist = 0;
if (is_first_distance_) {
dist_acc_ = 0;
is_first_distance_ = false;
} else {
if (std::fabs(pos.altitude()) < 1e-3) {
pos.setAltitude(last_position_.coordinate().altitude());
pos_info.setCoordinate(pos);
}
dist = pos_info.coordinate().distanceTo(last_position_.coordinate());
if (dist > 10) {
dist_acc_ += dist;
}
}
last_position_ = pos_info;
}
}
示例6: calculatePeripheralPoints
static void calculatePeripheralPoints(QList<QGeoCoordinate> &path, const QGeoCoordinate ¢er, qreal distance, int steps)
{
// Calculate points based on great-circle distance
// Calculation is the same as GeoCoordinate's atDistanceAndAzimuth function
// but tweaked here for computing multiple points
// pre-calculate
qreal latRad = qgeocoordinate_degToRad(center.latitude());
qreal lonRad = qgeocoordinate_degToRad(center.longitude());
qreal cosLatRad = std::cos(latRad);
qreal sinLatRad = std::sin(latRad);
qreal ratio = (distance / (qgeocoordinate_EARTH_MEAN_RADIUS * 1000.0));
qreal cosRatio = std::cos(ratio);
qreal sinRatio = std::sin(ratio);
qreal sinLatRad_x_cosRatio = sinLatRad * cosRatio;
qreal cosLatRad_x_sinRatio = cosLatRad * sinRatio;
for (int i = 0; i < steps; ++i) {
qreal azimuthRad = 2 * M_PI * i / steps;
qreal resultLatRad = std::asin(sinLatRad_x_cosRatio
+ cosLatRad_x_sinRatio * std::cos(azimuthRad));
qreal resultLonRad = lonRad + std::atan2(std::sin(azimuthRad) * cosLatRad_x_sinRatio,
cosRatio - sinLatRad * std::sin(resultLatRad));
qreal lat2 = qgeocoordinate_radToDeg(resultLatRad);
qreal lon2 = qgeocoordinate_radToDeg(resultLonRad);
if (lon2 < -180.0) {
lon2 += 360.0;
} else if (lon2 > 180.0) {
lon2 -= 360.0;
}
path << QGeoCoordinate(lat2, lon2, center.altitude());
}
}
示例7: setCoordinate
void QDeclarativeCoordinate::setCoordinate(const QGeoCoordinate &coordinate)
{
QGeoCoordinate previousCoordinate = m_coordinate;
m_coordinate = coordinate;
// Comparing two NotANumbers is false which is not wanted here
if (coordinate.altitude() != previousCoordinate.altitude() &&
!(qIsNaN(coordinate.altitude()) && qIsNaN(previousCoordinate.altitude()))) {
emit altitudeChanged(m_coordinate.altitude());
}
if (coordinate.latitude() != previousCoordinate.latitude() &&
!(qIsNaN(coordinate.latitude()) && qIsNaN(previousCoordinate.latitude()))) {
emit latitudeChanged(m_coordinate.latitude());
}
if (coordinate.longitude() != previousCoordinate.longitude() &&
!(qIsNaN(coordinate.longitude()) && qIsNaN(previousCoordinate.longitude()))) {
emit longitudeChanged(m_coordinate.longitude());
}
}
示例8: if
QGeoCoordinate QGeoCoordinateInterpolator2D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress)
{
if (start == end) {
if (progress < 0.5) {
return start;
} else {
return end;
}
}
QGeoCoordinate s2 = start;
QGeoCoordinate e2 = end;
QDoubleVector2D s = QGeoProjection::coordToMercator(s2);
QDoubleVector2D e = QGeoProjection::coordToMercator(e2);
double x = s.x();
if (0.5 < qAbs(e.x() - s.x())) {
// handle dateline crossing
double ex = e.x();
double sx = s.x();
if (ex < sx)
sx -= 1.0;
else if (sx < ex)
ex -= 1.0;
x = (1.0 - progress) * sx + progress * ex;
if (!qFuzzyIsNull(x) && (x < 0.0))
x += 1.0;
} else {
x = (1.0 - progress) * s.x() + progress * e.x();
}
double y = (1.0 - progress) * s.y() + progress * e.y();
QGeoCoordinate result = QGeoProjection::mercatorToCoord(QDoubleVector2D(x, y));
result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude());
return result;
}
示例9:
QDebug operator<<(QDebug dbg, const QGeoCoordinate &coord)
{
double lat = coord.latitude();
double lng = coord.longitude();
dbg.nospace() << "QGeoCoordinate(";
if (qIsNaN(lat))
dbg.nospace() << '?';
else
dbg.nospace() << lat;
dbg.nospace() << ", ";
if (qIsNaN(lng))
dbg.nospace() << '?';
else
dbg.nospace() << lng;
if (coord.type() == QGeoCoordinate::Coordinate3D) {
dbg.nospace() << ", ";
dbg.nospace() << coord.altitude();
}
dbg.nospace() << ')';
return dbg;
}
示例10: geometryChanged
/*!
\internal
*/
void QDeclarativeRectangleMapItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
{
if (updatingGeometry_ || newGeometry.topLeft() == oldGeometry.topLeft()) {
QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
return;
}
QDoubleVector2D newTopLeftPoint = QDoubleVector2D(x(),y());
QGeoCoordinate newTopLeft = map()->itemPositionToCoordinate(newTopLeftPoint, false);
if (newTopLeft.isValid()) {
// calculate new geo width while checking for dateline crossing
const double lonW = bottomRight_.longitude() > topLeft_.longitude() ?
bottomRight_.longitude() - topLeft_.longitude() :
bottomRight_.longitude() + 360 - topLeft_.longitude();
const double latH = qAbs(bottomRight_.latitude() - topLeft_.latitude());
QGeoCoordinate newBottomRight;
// prevent dragging over valid min and max latitudes
if (QLocationUtils::isValidLat(newTopLeft.latitude() - latH)) {
newBottomRight.setLatitude(newTopLeft.latitude() - latH);
} else {
newBottomRight.setLatitude(QLocationUtils::clipLat(newTopLeft.latitude() - latH));
newTopLeft.setLatitude(newBottomRight.latitude() + latH);
}
// handle dateline crossing
newBottomRight.setLongitude(QLocationUtils::wrapLong(newTopLeft.longitude() + lonW));
newBottomRight.setAltitude(newTopLeft.altitude());
topLeft_ = newTopLeft;
bottomRight_ = newBottomRight;
geometry_.setPreserveGeometry(true, newTopLeft);
borderGeometry_.setPreserveGeometry(true, newTopLeft);
markSourceDirtyAndUpdate();
emit topLeftChanged(topLeft_);
emit bottomRightChanged(bottomRight_);
}
// Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
// call to this function.
}
示例11: newLocationInfoReceived
void TRMainWindow::newLocationInfoReceived(const QGeoPositionInfo positionInfo)
{
QGeoCoordinate currentCoords = positionInfo.coordinate();
if(m_lastKnownPosition || !(currentCoords == *m_lastKnownPosition))
{
// We need to write to the file, let's initialize it
if(m_outputKMLFile == NULL)
{
// File initialization
QString timeStamp = positionInfo.timestamp().toString(Qt::ISODate);
QString fileTimeStamp = positionInfo.timestamp().toString("hhmmssddMMyy");
m_outputKMLFile = new QFile("c://Data//trackroute_"+fileTimeStamp+".kml");
m_outputKMLFile->open(QIODevice::WriteOnly | QIODevice::Text);
// File writer initialization
if(m_kmlFileWriter == NULL)
{
// Header
m_kmlFileWriter = new QXmlStreamWriter(m_outputKMLFile);
m_kmlFileWriter->writeStartDocument();
m_kmlFileWriter->writeNamespace("http://www.opengis.net/kml/2.2","kml");
// Document
m_kmlFileWriter->writeStartElement("Document");
m_kmlFileWriter->writeTextElement("name","TrackRoute Path File");
m_kmlFileWriter->writeTextElement("description","Pathfile generated by Trackroute on: "+timeStamp);
// Style
m_kmlFileWriter->writeStartElement("Style");
m_kmlFileWriter->writeAttribute("id","yellowLineGreenPoly");
// LineStyle
m_kmlFileWriter->writeStartElement("LineStyle");
m_kmlFileWriter->writeTextElement("color","7f00ffff");
m_kmlFileWriter->writeTextElement("width","4");
m_kmlFileWriter->writeEndElement();
// PolyStyle
m_kmlFileWriter->writeStartElement("PolyStyle");
m_kmlFileWriter->writeTextElement("color","7f00ff00");
m_kmlFileWriter->writeEndElement();
// End Style
m_kmlFileWriter->writeEndElement();
// Placemark
m_kmlFileWriter->writeStartElement("Placemark");
m_kmlFileWriter->writeTextElement("name","TrackRoute Path "+timeStamp);
m_kmlFileWriter->writeTextElement("description","Path generated by Trackroute on: "+timeStamp);
m_kmlFileWriter->writeTextElement("styleUrl","#yellowLineGreenPoly");
// LineString
m_kmlFileWriter->writeStartElement("LineString");
m_kmlFileWriter->writeTextElement("extrude","1");
m_kmlFileWriter->writeTextElement("tessellate","1");
m_kmlFileWriter->writeTextElement("altitudeMode","absolute");
// Coordinates
m_kmlFileWriter->writeStartElement("coordinates");
}
}
// Update data
m_numberOfUpdatesReceived++;
m_currentSpeed = positionInfo.attribute(QGeoPositionInfo::GroundSpeed);
m_currentSpeed = m_currentSpeed > 0 ? m_currentSpeed:0;
m_totalSpeed += m_currentSpeed;
m_averageSpeed = m_totalSpeed / m_numberOfUpdatesReceived;
QString coordString = currentCoords.toString();
// Update UI
ui->latLonDataLabel->setText(coordString.left(coordString.lastIndexOf(",")));
ui->altitudeDataLabel->setText(QString::number(currentCoords.altitude())+" m");
ui->wptNumberDataLabel->setText(QString::number(m_numberOfUpdatesReceived));
ui->currentSpdDataLabel->setText(QString::number(m_currentSpeed)+" km/h");
ui->averageSpdDataLabel->setText(QString::number(m_averageSpeed)+" km/h");
// Write to the KML file
QString locationData = QString::number(currentCoords.latitude()).append(",").append(QString::number(currentCoords.longitude()))
.append(",").append(QString::number(currentCoords.altitude())).append(" ");
m_kmlFileWriter->writeCharacters(locationData);
m_outputKMLFile->flush();
}
m_lastKnownPosition = ¤tCoords;
}
示例12: setPosition
void QDeclarativePosition::setPosition(const QGeoPositionInfo &info)
{
// timestamp
const QDateTime pTimestamp = m_info.timestamp();
const QDateTime timestamp = info.timestamp();
bool emitTimestampChanged = pTimestamp != timestamp;
// coordinate
const QGeoCoordinate pCoordinate = m_info.coordinate();
const QGeoCoordinate coordinate = info.coordinate();
bool emitCoordinateChanged = pCoordinate != coordinate;
bool emitLatitudeValidChanged = exclusiveNaN(pCoordinate.latitude(), coordinate.latitude());
bool emitLongitudeValidChanged = exclusiveNaN(pCoordinate.longitude(), coordinate.longitude());
bool emitAltitudeValidChanged = exclusiveNaN(pCoordinate.altitude(), coordinate.altitude());
// direction
const qreal pDirection = m_info.attribute(QGeoPositionInfo::Direction);
const qreal direction = info.attribute(QGeoPositionInfo::Direction);
bool emitDirectionChanged = !equalOrNaN(pDirection, direction);
bool emitDirectionValidChanged = exclusiveNaN(pDirection, direction);
// ground speed
const qreal pSpeed = m_info.attribute(QGeoPositionInfo::GroundSpeed);
const qreal speed = info.attribute(QGeoPositionInfo::GroundSpeed);
bool emitSpeedChanged = !equalOrNaN(pSpeed, speed);
bool emitSpeedValidChanged = exclusiveNaN(pSpeed, speed);
// vertical speed
const qreal pVerticalSpeed = m_info.attribute(QGeoPositionInfo::VerticalSpeed);
const qreal verticalSpeed = info.attribute(QGeoPositionInfo::VerticalSpeed);
bool emitVerticalSpeedChanged = !equalOrNaN(pVerticalSpeed, verticalSpeed);
bool emitVerticalSpeedValidChanged = exclusiveNaN(pVerticalSpeed, verticalSpeed);
// magnetic variation
const qreal pMagneticVariation = m_info.attribute(QGeoPositionInfo::MagneticVariation);
const qreal magneticVariation = info.attribute(QGeoPositionInfo::MagneticVariation);
bool emitMagneticVariationChanged = !equalOrNaN(pMagneticVariation, magneticVariation);
bool emitMagneticVariationValidChanged = exclusiveNaN(pMagneticVariation, magneticVariation);
// horizontal accuracy
const qreal pHorizontalAccuracy = m_info.attribute(QGeoPositionInfo::HorizontalAccuracy);
const qreal horizontalAccuracy = info.attribute(QGeoPositionInfo::HorizontalAccuracy);
bool emitHorizontalAccuracyChanged = !equalOrNaN(pHorizontalAccuracy, horizontalAccuracy);
bool emitHorizontalAccuracyValidChanged = exclusiveNaN(pHorizontalAccuracy, horizontalAccuracy);
// vertical accuracy
const qreal pVerticalAccuracy = m_info.attribute(QGeoPositionInfo::VerticalAccuracy);
const qreal verticalAccuracy = info.attribute(QGeoPositionInfo::VerticalAccuracy);
bool emitVerticalAccuracyChanged = !equalOrNaN(pVerticalAccuracy, verticalAccuracy);
bool emitVerticalAccuracyValidChanged = exclusiveNaN(pVerticalAccuracy, verticalAccuracy);
m_info = info;
if (emitTimestampChanged)
emit timestampChanged();
if (emitCoordinateChanged)
emit coordinateChanged();
if (emitLatitudeValidChanged)
emit latitudeValidChanged();
if (emitLongitudeValidChanged)
emit longitudeValidChanged();
if (emitAltitudeValidChanged)
emit altitudeValidChanged();
if (emitDirectionChanged)
emit directionChanged();
if (emitDirectionValidChanged)
emit directionValidChanged();
if (emitSpeedChanged)
emit speedChanged();
if (emitSpeedValidChanged)
emit speedValidChanged();
if (emitVerticalSpeedChanged)
emit verticalSpeedChanged();
if (emitVerticalSpeedValidChanged)
emit verticalSpeedValidChanged();
if (emitHorizontalAccuracyChanged)
emit horizontalAccuracyChanged();
if (emitHorizontalAccuracyValidChanged)
emit horizontalAccuracyValidChanged();
if (emitVerticalAccuracyChanged)
emit verticalAccuracyChanged();
if (emitVerticalAccuracyValidChanged)
emit verticalAccuracyValidChanged();
if (emitMagneticVariationChanged)
emit magneticVariationChanged();
if (emitMagneticVariationValidChanged)
emit magneticVariationValidChanged();
}