- Make returning LatLngs unwrapped by default. - PointAnnotation and ShapeAnnotation are always wrapped so they can be selected via intersection from the visible tile boundaries. - Fixes LatLng::wrap() calculation. - Fixes LatLng::unwrapForShortestPath() calculation. The new unwrapForShortestPath algorithm unwraps the start coordinate either forwards or backwards depending on the end coordinate value, so we can always cross the antimeridian when needed and still obtain a wrapped end coordinate in the end. Fixes #4214.
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
#ifndef MBGL_ANNOTATION_SHAPE_ANNOTATION
|
|
#define MBGL_ANNOTATION_SHAPE_ANNOTATION
|
|
|
|
#include <mbgl/annotation/annotation.hpp>
|
|
#include <mbgl/style/types.hpp>
|
|
|
|
#include <mbgl/util/geo.hpp>
|
|
|
|
#include <mapbox/variant.hpp>
|
|
|
|
namespace mbgl {
|
|
|
|
using AnnotationSegment = std::vector<LatLng>;
|
|
using AnnotationSegments = std::vector<AnnotationSegment>;
|
|
|
|
struct FillAnnotationProperties {
|
|
float opacity = 1;
|
|
Color color = {{ 0, 0, 0, 1 }};
|
|
Color outlineColor = {{ 0, 0, 0, -1 }};
|
|
};
|
|
|
|
struct LineAnnotationProperties {
|
|
float opacity = 1;
|
|
float width = 1;
|
|
Color color = {{ 0, 0, 0, 1 }};
|
|
};
|
|
|
|
class ShapeAnnotation {
|
|
public:
|
|
using Properties = mapbox::util::variant<
|
|
FillAnnotationProperties, // creates a fill annotation
|
|
LineAnnotationProperties, // creates a line annotation
|
|
std::string>; // creates an annotation whose type and properties are sourced from a style layer
|
|
|
|
ShapeAnnotation(const AnnotationSegments& segments_, const Properties& properties_)
|
|
: segments(wrapCoordinates(segments_)), properties(properties_) {}
|
|
|
|
const AnnotationSegments segments;
|
|
const Properties properties;
|
|
|
|
private:
|
|
AnnotationSegments wrapCoordinates(const AnnotationSegments& segments_) {
|
|
AnnotationSegments wrappedSegments;
|
|
// Wrap all segments coordinates.
|
|
for (const auto& segment_ : segments_) {
|
|
AnnotationSegment wrappedSegment;
|
|
for (const auto& latLng_ : segment_) {
|
|
wrappedSegment.push_back(latLng_.wrapped());
|
|
}
|
|
wrappedSegments.push_back(wrappedSegment);
|
|
}
|
|
return wrappedSegments;
|
|
}
|
|
};
|
|
|
|
} // namespace mbgl
|
|
|
|
#endif
|