132 lines
3.3 KiB
C++
132 lines
3.3 KiB
C++
#include <crs.h>
|
|
#include <webmercator.h>
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
namespace LAMPMainWidget
|
|
{
|
|
PointXY WebMercator::forward(const LAMPMainWidget::PointXY& point) const
|
|
{
|
|
PointXY result{};
|
|
PointXY originXy = CRS::forward(point);
|
|
|
|
QSizeF sz = extent().size();
|
|
result.setX(sz.width() / 2 + originXy.x());
|
|
result.setY(sz.height() / 2 - originXy.y());
|
|
|
|
return result;
|
|
}
|
|
|
|
PointXY WebMercator::inverse(const LAMPMainWidget::PointXY& point) const
|
|
{
|
|
PointXY originXy{};
|
|
QSizeF sz = extent().size();
|
|
|
|
originXy.setX(point.x() - sz.width() / 2);
|
|
originXy.setY(sz.height() / 2 - point.y());
|
|
|
|
return CRS::inverse(originXy);
|
|
}
|
|
|
|
QString WebMercator::proj4Cvt() const
|
|
{
|
|
return QString{"+proj=webmerc +datum=WGS84"};
|
|
}
|
|
|
|
QString WebMercator::wktDef() const
|
|
{
|
|
return QString{
|
|
R"(
|
|
PROJCS["WGS 84 / Pseudo-Mercator",
|
|
GEOGCS["WGS 84",
|
|
DATUM["WGS_1984",
|
|
SPHEROID["WGS 84",6378137,298.257223563,
|
|
AUTHORITY["EPSG","7030"]],
|
|
AUTHORITY["EPSG","6326"]],
|
|
PRIMEM["Greenwich",0,
|
|
AUTHORITY["EPSG","8901"]],
|
|
UNIT["degree",0.0174532925199433,
|
|
AUTHORITY["EPSG","9122"]],
|
|
AUTHORITY["EPSG","4326"]],
|
|
PROJECTION["Mercator_1SP"],
|
|
PARAMETER["central_meridian",0],
|
|
PARAMETER["scale_factor",1],
|
|
PARAMETER["false_easting",0],
|
|
PARAMETER["false_northing",0],
|
|
UNIT["metre",1,
|
|
AUTHORITY["EPSG","9001"]],
|
|
AXIS["X",EAST],
|
|
AXIS["Y",NORTH],
|
|
EXTENSION["PROJ4",
|
|
"+proj=merc
|
|
+a=6378137
|
|
+b=6378137
|
|
+lat_ts=0.0
|
|
+lon_0=0.0
|
|
+x_0=0.0
|
|
+y_0=0
|
|
+k=1.0
|
|
+units=m
|
|
+nadgrids=@null
|
|
+wktext
|
|
+no_defs"],
|
|
AUTHORITY["EPSG","3857"]
|
|
])"
|
|
};
|
|
}
|
|
|
|
QRectF
|
|
WebMercator::extent() const
|
|
{
|
|
return QRectF{0, 0, 40075016.686, 40075016.686};
|
|
}
|
|
|
|
QString
|
|
WebMercator::proj4Def() const
|
|
{
|
|
/* return QString{
|
|
R"(
|
|
+proj=merc
|
|
+a=6378137
|
|
+b=6378137
|
|
+lat_ts=0.0
|
|
+lon_0=0.0
|
|
+x_0=0.0
|
|
+y_0=0
|
|
+k=1.0
|
|
+units=m
|
|
+nadgrids=@null
|
|
+wktext
|
|
+no_defs)"
|
|
};
|
|
*/
|
|
|
|
return QString{
|
|
R"(
|
|
PROJCS["unnamed",
|
|
GEOGCS["WGS 84",
|
|
DATUM["WGS_1984",
|
|
SPHEROID["WGS 84",6378137,298.257223563,
|
|
AUTHORITY["EPSG","7030"]],
|
|
AUTHORITY["EPSG","6326"]],
|
|
PRIMEM["Greenwich",0,
|
|
AUTHORITY["EPSG","8901"]],
|
|
UNIT["degree",0.0174532925199433,
|
|
AUTHORITY["EPSG","9122"]],
|
|
AUTHORITY["EPSG","4326"]],
|
|
PROJECTION["Mercator_1SP"],
|
|
PARAMETER["central_meridian",0],
|
|
PARAMETER["scale_factor",1],
|
|
PARAMETER["false_easting",0],
|
|
PARAMETER["false_northing",0],
|
|
UNIT["metre",1,
|
|
AUTHORITY["EPSG","9001"]],
|
|
AXIS["Easting",EAST],
|
|
AXIS["Northing",NORTH]]
|
|
)"
|
|
};
|
|
|
|
|
|
|
|
}
|
|
}
|