diff --git a/src/blackgui/editors/coordinateform.cpp b/src/blackgui/editors/coordinateform.cpp index c3638b9c8..309a8cb27 100644 --- a/src/blackgui/editors/coordinateform.cpp +++ b/src/blackgui/editors/coordinateform.cpp @@ -178,7 +178,7 @@ namespace BlackGui void CCoordinateForm::locationEntered() { - const QString l = ui->le_Location->text().trimmed().toUpper(); + const QString l = ui->le_Location->text().trimmed().simplified().toUpper(); // location based on swift data if (sApp && sApp->hasWebDataServices()) @@ -203,6 +203,29 @@ namespace BlackGui return; } } + // 33°59′42″S 150°57′06″E + if (l.contains(' ')) + { + QString lat, lng; + const QStringList parts = l.split(' '); + for (const QString &p : parts) + { + if (p.contains('S') || p.contains('N')) + { + lat = p; + } + else if (p.contains('E') || p.contains('W')) + { + lng = p; + } + } + if (!lat.isEmpty() && !lng.isEmpty()) + { + CCoordinateGeodetic c = m_coordinate; + c.setLatLongFromWgs84(lat, lng); + this->setCoordinate(c); + } + } } void CCoordinateForm::latEntered() diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index e78a5c9fb..a65f982d6 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -330,11 +330,21 @@ namespace BlackMisc this->setLatLong(latitude, this->longitude()); } + void CCoordinateGeodetic::setLatitudeFromWgs84(const QString &wgs) + { + this->setLatitude(CLatitude::fromWgs84(wgs)); + } + void CCoordinateGeodetic::setLongitude(const CLongitude &longitude) { this->setLatLong(this->latitude(), longitude); } + void CCoordinateGeodetic::setLongitudeFromWgs84(const QString &wgs) + { + this->setLongitude(CLongitude::fromWgs84(wgs)); + } + void CCoordinateGeodetic::setLatLong(const CLatitude &latitude, const CLongitude &longitude) { m_x = latitude.cos() * longitude.cos(); @@ -342,6 +352,12 @@ namespace BlackMisc m_z = latitude.sin(); } + void CCoordinateGeodetic::setLatLongFromWgs84(const QString &latitude, const QString &longitude) + { + this->setLatitudeFromWgs84(latitude); + this->setLongitudeFromWgs84(longitude); + } + void CCoordinateGeodetic::setGeodeticHeightToNull() { this->setGeodeticHeight(CAltitude::null()); diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index f349055f5..81e754e90 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -277,12 +277,21 @@ namespace BlackMisc //! Set latitude void setLatitude(const CLatitude &latitude); + //! Set latitude + void setLatitudeFromWgs84(const QString &wgs); + //! Set longitude void setLongitude(const CLongitude &longitude); + //! Set longitude + void setLongitudeFromWgs84(const QString &wgs); + //! Set latitude and longitude void setLatLong(const CLatitude &latitude, const CLongitude &longitude); + //! Set latitude and longitude + void setLatLongFromWgs84(const QString &latitude, const QString &longitude); + //! Set height (ellipsoidal or geodetic height) void setGeodeticHeight(const Aviation::CAltitude &height) { m_geodeticHeight = height; }