PIGeoPosition as PIVariant support

This commit is contained in:
2023-01-29 20:27:43 +03:00
parent 3391d88460
commit df4dcd7f32
2 changed files with 25 additions and 2 deletions

View File

@@ -308,8 +308,7 @@ PIVariant::Type PIVariant::typeFromID(uint type_id) {
uint PIVariant::typeIDFromName(const PIString & tname) { uint PIVariant::typeIDFromName(const PIString & tname) {
PIVariant::Type t = typeFromName(tname); PIVariant::Type t = typeFromName(tname);
if (t == pivInvalid) return 0; if (t == pivCustom || t == pivInvalid) return tname.hash();
if (t == pivCustom) return tname.hash();
return typeIDFromType(t); return typeIDFromType(t);
} }

View File

@@ -28,6 +28,7 @@
#include "piconstchars.h" #include "piconstchars.h"
#include "pidatetime.h" #include "pidatetime.h"
#include "pigeoposition.h"
#include "piline.h" #include "piline.h"
#include "pimathmatrix.h" #include "pimathmatrix.h"
#include "pinetworkaddress.h" #include "pinetworkaddress.h"
@@ -1113,6 +1114,29 @@ REGISTER_VARIANT(PIMathMatrixd)
REGISTER_VARIANT(PIVariantMap); REGISTER_VARIANT(PIVariantMap);
REGISTER_VARIANT(PIVariantVector); REGISTER_VARIANT(PIVariantVector);
REGISTER_VARIANT(PIGeoPosition);
REGISTER_VARIANT_CAST(PIGeoPosition, PIString) {
PIGeoPosition g(v);
g.setEllipsoidModel(PIEllipsoidModel::WGS84Ellipsoid());
g.transformTo(PIGeoPosition::Geodetic);
return PIString::fromNumber(g.latitudeGeodetic(), 'f', 8) + ", " + PIString::fromNumber(g.longitude(), 'f', 8) + ", " +
PIString::fromNumber(g.height(), 'f', 2);
};
REGISTER_VARIANT_CAST(PIString, PIGeoPosition) {
PIStringList sl = v.split(",");
if (sl.size() == 2) sl << "0";
if (sl.size() >= 3) {
return PIGeoPosition({sl[0].toDouble(), sl[1].toDouble(), sl[2].toDouble()}, PIGeoPosition::Geodetic);
}
sl = v.split(";");
if (sl.size() == 2) sl << "0";
if (sl.size() >= 3) {
return PIGeoPosition({sl[0].toDouble(), sl[1].toDouble(), sl[2].toDouble()}, PIGeoPosition::Geodetic);
}
return PIGeoPosition({0., 0., 0.}, PIGeoPosition::Geodetic);
};
//! \relatesalso PIBinaryStream //! \relatesalso PIBinaryStream
//! \~english Store operator. //! \~english Store operator.