1 //
2 //  AIRGoogleMap.h
3 //  AirMaps
4 //
5 //  Created by Gil Birman on 9/1/16.
6 //
7 
8 #ifdef HAVE_GOOGLE_MAPS
9 
10 #import <UIKit/UIKit.h>
11 #import <React/RCTComponent.h>
12 #import <React/RCTBridge.h>
13 #import <GoogleMaps/GoogleMaps.h>
14 #import <MapKit/MapKit.h>
15 #import "AIRGMSMarker.h"
16 #import "RCTConvert+AirMap.h"
17 
18 @interface AIRGoogleMap : GMSMapView
19 
20 // TODO: don't use MK region?
21 @property (nonatomic, weak) RCTBridge *bridge;
22 @property (nonatomic, assign) MKCoordinateRegion initialRegion;
23 @property (nonatomic, assign) MKCoordinateRegion region;
24 @property (nonatomic, assign) GMSCameraPosition *cameraProp;   // Because the base class already has a "camera" prop.
25 @property (nonatomic, strong) GMSCameraPosition *initialCamera;
26 @property (nonatomic, assign) NSString *customMapStyleString;
27 @property (nonatomic, assign) UIEdgeInsets mapPadding;
28 @property (nonatomic, assign) NSString *paddingAdjustmentBehaviorString;
29 @property (nonatomic, copy) RCTBubblingEventBlock onMapReady;
30 @property (nonatomic, copy) RCTBubblingEventBlock onMapLoaded;
31 @property (nonatomic, copy) RCTBubblingEventBlock onKmlReady;
32 @property (nonatomic, copy) RCTBubblingEventBlock onPress;
33 @property (nonatomic, copy) RCTBubblingEventBlock onLongPress;
34 @property (nonatomic, copy) RCTBubblingEventBlock onPanDrag;
35 @property (nonatomic, copy) RCTBubblingEventBlock onUserLocationChange;
36 @property (nonatomic, copy) RCTBubblingEventBlock onMarkerPress;
37 @property (nonatomic, copy) RCTBubblingEventBlock onChange;
38 @property (nonatomic, copy) RCTBubblingEventBlock onPoiClick;
39 @property (nonatomic, copy) RCTDirectEventBlock onRegionChange;
40 @property (nonatomic, copy) RCTDirectEventBlock onRegionChangeComplete;
41 @property (nonatomic, copy) RCTDirectEventBlock onIndoorLevelActivated;
42 @property (nonatomic, copy) RCTDirectEventBlock onIndoorBuildingFocused;
43 @property (nonatomic, strong) NSMutableArray *markers;
44 @property (nonatomic, strong) NSMutableArray *polygons;
45 @property (nonatomic, strong) NSMutableArray *polylines;
46 @property (nonatomic, strong) NSMutableArray *circles;
47 @property (nonatomic, strong) NSMutableArray *heatmaps;
48 @property (nonatomic, strong) NSMutableArray *tiles;
49 @property (nonatomic, strong) NSMutableArray *overlays;
50 
51 @property (nonatomic, assign) BOOL showsBuildings;
52 @property (nonatomic, assign) BOOL showsTraffic;
53 @property (nonatomic, assign) BOOL showsCompass;
54 @property (nonatomic, assign) BOOL scrollEnabled;
55 @property (nonatomic, assign) BOOL zoomEnabled;
56 @property (nonatomic, assign) BOOL rotateEnabled;
57 @property (nonatomic, assign) BOOL scrollDuringRotateOrZoomEnabled;
58 @property (nonatomic, assign) BOOL pitchEnabled;
59 @property (nonatomic, assign) BOOL zoomTapEnabled;
60 @property (nonatomic, assign) BOOL showsUserLocation;
61 @property (nonatomic, assign) BOOL showsMyLocationButton;
62 @property (nonatomic, assign) BOOL showsIndoors;
63 @property (nonatomic, assign) BOOL showsIndoorLevelPicker;
64 @property (nonatomic, assign) NSString *kmlSrc;
65 
66 - (void)didPrepareMap;
67 - (void)mapViewDidFinishTileRendering;
68 - (BOOL)didTapMarker:(GMSMarker *)marker;
69 - (void)didTapPolyline:(GMSPolyline *)polyline;
70 - (void)didTapPolygon:(GMSPolygon *)polygon;
71 - (void)didTapAtCoordinate:(CLLocationCoordinate2D)coordinate;
72 - (void)didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate;
73 - (void)didChangeCameraPosition:(GMSCameraPosition *)position isGesture:(BOOL)isGesture;
74 - (void)idleAtCameraPosition:(GMSCameraPosition *)position isGesture:(BOOL)isGesture;
75 - (void)didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *) name location:(CLLocationCoordinate2D) location;
76 - (NSArray *)getMapBoundaries;
77 
78 + (MKCoordinateRegion)makeGMSCameraPositionFromMap:(GMSMapView *)map andGMSCameraPosition:(GMSCameraPosition *)position;
79 + (GMSCameraPosition*)makeGMSCameraPositionFromMap:(GMSMapView *)map andMKCoordinateRegion:(MKCoordinateRegion)region;
80 
81 - (NSDictionary*) getMarkersFramesWithOnlyVisible:(BOOL)onlyVisible;
82 
83 @end
84 
85 #endif
86