Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
Revert "use array of structs rather than parallel arrays for annotati…
Browse files Browse the repository at this point in the history
…ons"

This reverts commit 2435c1a (#1710), which needs to be revisited in light of #1655, which is a much higher priority at the moment.
  • Loading branch information
1ec5 committed Jun 15, 2015
1 parent a08bcb6 commit 714b68f
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 45 deletions.
22 changes: 0 additions & 22 deletions include/mbgl/annotation/point_annotation.hpp

This file was deleted.

6 changes: 3 additions & 3 deletions include/mbgl/map/map.hpp
Expand Up @@ -21,7 +21,6 @@ class View;
class MapData;
class MapContext;
class StillImage;
class PointAnnotation;

namespace util {
template <class T> class Thread;
Expand Down Expand Up @@ -112,8 +111,9 @@ class Map : private util::noncopyable {
// Annotations
void setDefaultPointAnnotationSymbol(const std::string&);
double getTopOffsetPixelsForAnnotationSymbol(const std::string&);
uint32_t addPointAnnotation(const PointAnnotation&);
std::vector<uint32_t> addPointAnnotations(const std::vector<PointAnnotation>&);
uint32_t addPointAnnotation(const LatLng&, const std::string& symbol);
std::vector<uint32_t> addPointAnnotations(const std::vector<LatLng>&,
const std::vector<std::string>& symbols);
void removeAnnotation(uint32_t);
void removeAnnotations(const std::vector<uint32_t>&);
std::vector<uint32_t> getAnnotationsInBounds(const LatLngBounds&);
Expand Down
9 changes: 5 additions & 4 deletions platform/default/glfw_view.cpp
@@ -1,4 +1,3 @@
#include <mbgl/annotation/point_annotation.hpp>
#include <mbgl/platform/default/glfw_view.hpp>
#include <mbgl/platform/gl.hpp>
#include <mbgl/platform/log.hpp>
Expand Down Expand Up @@ -131,7 +130,8 @@ void GLFWView::onKey(GLFWwindow *window, int key, int /*scancode*/, int action,
}

void GLFWView::addRandomPointAnnotations(int count) {
std::vector<mbgl::PointAnnotation> points;
std::vector<mbgl::LatLng> points;
std::vector<std::string> markers;

const auto sw = map->latLngForPixel({ 0, 0 });
const auto ne = map->latLngForPixel({ double(width), double(height) });
Expand All @@ -140,10 +140,11 @@ void GLFWView::addRandomPointAnnotations(int count) {
const double lon = sw.longitude + (ne.longitude - sw.longitude) * (double(std::rand()) / RAND_MAX);
const double lat = sw.latitude + (ne.latitude - sw.latitude) * (double(std::rand()) / RAND_MAX);

points.emplace_back(mbgl::LatLng{ lat, lon }, "default_marker");
points.push_back({ lat, lon });
markers.push_back("default_marker");
}

map->addPointAnnotations(points);
map->addPointAnnotations(points, markers);
}

void GLFWView::onScroll(GLFWwindow *window, double /*xOffset*/, double yOffset) {
Expand Down
14 changes: 9 additions & 5 deletions platform/ios/MGLMapView.mm
Expand Up @@ -8,7 +8,6 @@
#import <OpenGLES/EAGL.h>

#include <mbgl/mbgl.hpp>
#include <mbgl/annotation/point_annotation.hpp>
#include <mbgl/platform/platform.hpp>
#include <mbgl/platform/darwin/reachability.h>
#include <mbgl/storage/default_file_source.hpp>
Expand Down Expand Up @@ -1670,26 +1669,31 @@ - (void)addAnnotations:(NSArray *)annotations
{
if ( ! annotations) return;

std::vector<mbgl::PointAnnotation> points;
points.reserve(annotations.count);
std::vector<mbgl::LatLng> latLngs;
latLngs.reserve(annotations.count);

std::vector<std::string> symbols;
symbols.reserve(annotations.count);

BOOL delegateImplementsSymbolLookup = [self.delegate respondsToSelector:@selector(mapView:symbolNameForAnnotation:)];

for (id <MGLAnnotation> annotation in annotations)
{
assert([annotation conformsToProtocol:@protocol(MGLAnnotation)]);

latLngs.push_back(MGLLatLngFromLocationCoordinate2D(annotation.coordinate));

NSString *symbolName = nil;

if (delegateImplementsSymbolLookup)
{
symbolName = [self.delegate mapView:self symbolNameForAnnotation:annotation];
}

points.emplace_back(MGLLatLngFromLocationCoordinate2D(annotation.coordinate), (symbolName ? [symbolName UTF8String] : ""));
symbols.push_back((symbolName ? [symbolName UTF8String] : ""));
}

std::vector<uint32_t> annotationIDs = _mbglMap->addPointAnnotations(points);
std::vector<uint32_t> annotationIDs = _mbglMap->addPointAnnotations(latLngs, symbols);

for (size_t i = 0; i < annotationIDs.size(); ++i)
{
Expand Down
11 changes: 6 additions & 5 deletions src/mbgl/map/annotation.cpp
Expand Up @@ -85,7 +85,8 @@ vec2<double> AnnotationManager::projectPoint(const LatLng& point) {
}

std::pair<std::vector<TileID>, AnnotationIDs>
AnnotationManager::addPointAnnotations(const std::vector<PointAnnotation>& points,
AnnotationManager::addPointAnnotations(const std::vector<LatLng>& points,
const std::vector<std::string>& symbols,
const MapData& data) {
std::lock_guard<std::mutex> lock(mtx);

Expand All @@ -102,22 +103,22 @@ AnnotationManager::addPointAnnotations(const std::vector<PointAnnotation>& point

std::vector<TileID> affectedTiles;

for (const PointAnnotation& point : points) {
for (size_t i = 0; i < points.size(); ++i) {
const uint32_t annotationID = nextID();

// track the annotation global ID and its geometry
auto anno_it = annotations.emplace(
annotationID,
std::make_unique<Annotation>(AnnotationType::Point,
AnnotationSegments({ { point.position } })));
AnnotationSegments({ { points[i] } })));

const uint8_t maxZoom = data.transform.getMaxZoom();

// side length of map at this zoom
uint32_t z2 = 1 << maxZoom;

// projection conversion into unit space
const vec2<double> p = projectPoint(point.position);
const vec2<double> p = projectPoint(points[i]);

uint32_t x = p.x * z2;
uint32_t y = p.y * z2;
Expand All @@ -133,7 +134,7 @@ AnnotationManager::addPointAnnotations(const std::vector<PointAnnotation>& point

// at render time we style the annotation according to its {sprite} field
const std::map<std::string, std::string> properties = {
{ "sprite", (point.icon.length() ? point.icon : defaultPointAnnotationSymbol) }
{ "sprite", (symbols[i].length() ? symbols[i] : defaultPointAnnotationSymbol) }
};

auto feature =
Expand Down
3 changes: 1 addition & 2 deletions src/mbgl/map/annotation.hpp
Expand Up @@ -2,7 +2,6 @@
#define MBGL_MAP_ANNOTATIONS

#include <mbgl/map/tile_id.hpp>
#include <mbgl/annotation/point_annotation.hpp>
#include <mbgl/util/geo.hpp>
#include <mbgl/util/noncopyable.hpp>
#include <mbgl/util/vec.hpp>
Expand Down Expand Up @@ -30,7 +29,7 @@ class AnnotationManager : private util::noncopyable {

void setDefaultPointAnnotationSymbol(const std::string& symbol);
std::pair<std::vector<TileID>, AnnotationIDs> addPointAnnotations(
const std::vector<PointAnnotation>&, const MapData&);
const std::vector<LatLng>&, const std::vector<std::string>& symbols, const MapData&);
std::vector<TileID> removeAnnotations(const AnnotationIDs&, const MapData&);
AnnotationIDs getAnnotationsInBounds(const LatLngBounds&, const MapData&) const;
LatLngBounds getBoundsForAnnotations(const AnnotationIDs&) const;
Expand Down
8 changes: 4 additions & 4 deletions src/mbgl/map/map.cpp
Expand Up @@ -235,12 +235,12 @@ double Map::getTopOffsetPixelsForAnnotationSymbol(const std::string& symbol) {
return context->invokeSync<double>(&MapContext::getTopOffsetPixelsForAnnotationSymbol, symbol);
}

uint32_t Map::addPointAnnotation(const PointAnnotation& annotation) {
return addPointAnnotations({ annotation }).front();
uint32_t Map::addPointAnnotation(const LatLng& point, const std::string& symbol) {
return addPointAnnotations({ point }, { symbol }).front();
}

std::vector<uint32_t> Map::addPointAnnotations(const std::vector<PointAnnotation>& annotations) {
auto result = data->annotationManager.addPointAnnotations(annotations, *data);
std::vector<uint32_t> Map::addPointAnnotations(const std::vector<LatLng>& points, const std::vector<std::string>& symbols) {
auto result = data->annotationManager.addPointAnnotations(points, symbols, *data);
context->invoke(&MapContext::updateAnnotationTiles, result.first);
return result.second;
}
Expand Down

0 comments on commit 714b68f

Please sign in to comment.