summaryrefslogtreecommitdiff
path: root/src/mbgl
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-04-21 17:23:09 -0700
committerMinh Nguyễn <mxn@1ec5.org>2016-04-22 16:39:25 -0700
commit466ed55200ffb3a9bc5954b59d87c7dd5630e5ac (patch)
tree9daedf21439b49b82ea911883eae04ecd2ae3b79 /src/mbgl
parent5939dd5b412fcc1ef857711a137589aa865bd442 (diff)
downloadqtlocation-mapboxgl-466ed55200ffb3a9bc5954b59d87c7dd5630e5ac.tar.gz
[core, ios, osx] cameraThatFitsCoordinateBounds
Added an API to get a camera that you can pass into -[MGLMapView setCamera:] that fits the given coordinate bounds, by analogy with -[MKMapView regionThatFits:] or -[MKMapView mapRectThatFits:edgePadding:]. Added mbgl::Map::getCameraOptions() for getting the current camera options more conveniently.
Diffstat (limited to 'src/mbgl')
-rw-r--r--src/mbgl/map/map.cpp8
-rw-r--r--src/mbgl/map/transform.cpp10
-rw-r--r--src/mbgl/map/transform.hpp2
3 files changed, 18 insertions, 2 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index aab09a98e9..46eaa5049b 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -375,6 +375,10 @@ bool Map::isPanning() const {
}
#pragma mark -
+
+CameraOptions Map::getCameraOptions(optional<EdgeInsets> padding) const {
+ return impl->transform.getCameraOptions(padding);
+}
void Map::jumpTo(const CameraOptions& camera) {
impl->transform.jumpTo(camera);
@@ -466,7 +470,7 @@ void Map::setLatLngZoom(const LatLng& latLng, double zoom, optional<EdgeInsets>
update(Update::RecalculateStyle);
}
-CameraOptions Map::cameraForLatLngBounds(const LatLngBounds& bounds, optional<EdgeInsets> padding) {
+CameraOptions Map::cameraForLatLngBounds(const LatLngBounds& bounds, optional<EdgeInsets> padding) const {
AnnotationSegment segment = {
bounds.northwest(),
bounds.southwest(),
@@ -476,7 +480,7 @@ CameraOptions Map::cameraForLatLngBounds(const LatLngBounds& bounds, optional<Ed
return cameraForLatLngs(segment, padding);
}
-CameraOptions Map::cameraForLatLngs(const std::vector<LatLng>& latLngs, optional<EdgeInsets> padding) {
+CameraOptions Map::cameraForLatLngs(const std::vector<LatLng>& latLngs, optional<EdgeInsets> padding) const {
CameraOptions options;
if (latLngs.empty()) {
return options;
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 136209c937..7dcfee65dc 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -62,6 +62,16 @@ bool Transform::resize(const std::array<uint16_t, 2> size) {
#pragma mark - Camera
+CameraOptions Transform::getCameraOptions(optional<EdgeInsets> padding) const {
+ CameraOptions camera;
+ camera.center = getLatLng(padding);
+ camera.padding = padding;
+ camera.zoom = getZoom();
+ camera.angle = getAngle();
+ camera.pitch = getPitch();
+ return camera;
+}
+
/**
* Change any combination of center, zoom, bearing, and pitch, without
* a transition. The map will retain the current values for any options
diff --git a/src/mbgl/map/transform.hpp b/src/mbgl/map/transform.hpp
index 79421117b6..7d3bdceb99 100644
--- a/src/mbgl/map/transform.hpp
+++ b/src/mbgl/map/transform.hpp
@@ -26,6 +26,8 @@ public:
bool resize(std::array<uint16_t, 2> size);
// Camera
+ /** Returns the current camera options. */
+ CameraOptions getCameraOptions(optional<EdgeInsets>) const;
/** Instantaneously, synchronously applies the given camera options. */
void jumpTo(const CameraOptions&);