[core] Add batch conversion of latLngs to/from screenCoords (#15891)
* [core] Add batch conversion of latLng vs screenCoord * [core] Take the simple approach
This commit is contained in:
@@ -354,12 +354,24 @@ TEST(Annotations, QueryRenderedFeatures) {
|
||||
|
||||
test.frontend.render(test.map);
|
||||
|
||||
auto features = test.frontend.getRenderer()->queryRenderedFeatures(test.map.pixelForLatLng({ 0, 0 }));
|
||||
// Batch conversion of latLngs to pixels
|
||||
auto points = test.map.pixelsForLatLngs({{0, 0}, {50, 0}});
|
||||
ASSERT_EQ(2, points.size());
|
||||
// Single conversion of latLng to pixel
|
||||
auto point0 = test.map.pixelForLatLng({0, 0});
|
||||
ASSERT_NEAR(points[0].x, point0.x, 1e-8);
|
||||
ASSERT_NEAR(points[0].y, point0.y, 1e-8);
|
||||
|
||||
auto point1 = test.map.pixelForLatLng({50, 0});
|
||||
ASSERT_NEAR(points[1].x, point1.x, 1e-8);
|
||||
ASSERT_NEAR(points[1].y, point1.y, 1e-8);
|
||||
|
||||
auto features = test.frontend.getRenderer()->queryRenderedFeatures(point0);
|
||||
EXPECT_EQ(features.size(), 1u);
|
||||
EXPECT_EQ(features[0].id.is<NullValue>(), false);
|
||||
EXPECT_EQ(features[0].id, uint64_t(0));
|
||||
|
||||
auto features2 = test.frontend.getRenderer()->queryRenderedFeatures(test.map.pixelForLatLng({ 50, 0 }));
|
||||
auto features2 = test.frontend.getRenderer()->queryRenderedFeatures(point1);
|
||||
EXPECT_EQ(features2.size(), 1u);
|
||||
EXPECT_EQ(features[0].id.is<NullValue>(), false);
|
||||
EXPECT_EQ(features2[0].id, uint64_t(1));
|
||||
@@ -452,19 +464,37 @@ TEST(Annotations, ViewFrustumCulling) {
|
||||
const LatLng center = { 5.0, 5.0 };
|
||||
test.map.jumpTo(CameraOptions().withCenter(center).withZoom(3.0));
|
||||
|
||||
LatLng tl = test.map.latLngForPixel(ScreenCoordinate(0, 0));
|
||||
LatLng br = test.map.latLngForPixel(ScreenCoordinate(viewSize.width, viewSize.height));
|
||||
// Batch conversion of pixels to latLngs
|
||||
const std::vector<LatLng> batchLatLngs =
|
||||
test.map.latLngsForPixels({ScreenCoordinate(0, 0),
|
||||
ScreenCoordinate(viewSize.width, viewSize.height),
|
||||
ScreenCoordinate(viewSize.width, 0),
|
||||
ScreenCoordinate(0, viewSize.height)});
|
||||
ASSERT_EQ(4, batchLatLngs.size());
|
||||
|
||||
std::vector<LatLng> latLngs = {
|
||||
tl,
|
||||
test.map.latLngForPixel(ScreenCoordinate(viewSize.width, 0)),
|
||||
test.map.latLngForPixel(ScreenCoordinate(0, viewSize.height)),
|
||||
br,
|
||||
center};
|
||||
// Single conversion of pixel to latLng
|
||||
LatLng tl = test.map.latLngForPixel(ScreenCoordinate(0, 0));
|
||||
ASSERT_NEAR(batchLatLngs[0].latitude(), tl.latitude(), 1e-8);
|
||||
ASSERT_NEAR(batchLatLngs[0].longitude(), tl.longitude(), 1e-8);
|
||||
|
||||
LatLng br = test.map.latLngForPixel(ScreenCoordinate(viewSize.width, viewSize.height));
|
||||
ASSERT_NEAR(batchLatLngs[1].latitude(), br.latitude(), 1e-8);
|
||||
ASSERT_NEAR(batchLatLngs[1].longitude(), br.longitude(), 1e-8);
|
||||
|
||||
LatLng bl = test.map.latLngForPixel(ScreenCoordinate(viewSize.width, 0));
|
||||
ASSERT_NEAR(batchLatLngs[2].latitude(), bl.latitude(), 1e-8);
|
||||
ASSERT_NEAR(batchLatLngs[2].longitude(), bl.longitude(), 1e-8);
|
||||
|
||||
LatLng tr = test.map.latLngForPixel(ScreenCoordinate(0, viewSize.height));
|
||||
ASSERT_NEAR(batchLatLngs[3].latitude(), tr.latitude(), 1e-8);
|
||||
ASSERT_NEAR(batchLatLngs[3].longitude(), tr.longitude(), 1e-8);
|
||||
|
||||
std::vector<LatLng> latLngs = {tl, bl, tr, br, center};
|
||||
|
||||
std::vector<mbgl::AnnotationID> ids;
|
||||
for (auto latLng : latLngs) {
|
||||
ids.push_back(test.map.addAnnotation(SymbolAnnotation { { latLng.longitude(), latLng.latitude() }, "default_marker" }));
|
||||
ids.push_back(
|
||||
test.map.addAnnotation(SymbolAnnotation{{latLng.longitude(), latLng.latitude()}, "default_marker"}));
|
||||
}
|
||||
|
||||
std::vector<std::pair<CameraOptions, std::vector<uint64_t>>> expectedVisibleForCamera = {
|
||||
@@ -550,4 +580,3 @@ TEST(Annotations, ChangeMaxZoom) {
|
||||
test.map.jumpTo(CameraOptions().withZoom(*test.map.getBounds().maxZoom));
|
||||
test.checkRendering("line_annotation_max_zoom");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user