diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/listener/MapListener.java b/android/src/main/java/org/lovebing/reactnative/baidumap/listener/MapListener.java index b69f2a68..a0025d68 100644 --- a/android/src/main/java/org/lovebing/reactnative/baidumap/listener/MapListener.java +++ b/android/src/main/java/org/lovebing/reactnative/baidumap/listener/MapListener.java @@ -116,6 +116,8 @@ private WritableMap getEventParams(MapStatus mapStatus) { target.putDouble("latitude", mapStatus.target.latitude); target.putDouble("longitude", mapStatus.target.longitude); writableMap.putMap("target", target); + writableMap.putDouble("latitudeDelta", mapStatus.bound.northeast.latitude - mapStatus.bound.southwest.latitude); + writableMap.putDouble("longitudeDelta", mapStatus.bound.northeast.longitude - mapStatus.bound.southwest.longitude); writableMap.putDouble("zoom", mapStatus.zoom); writableMap.putDouble("overlook", mapStatus.overlook); return writableMap; diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/MapViewManager.java b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/MapViewManager.java index 6a540fde..7a26e13f 100644 --- a/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/MapViewManager.java +++ b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/MapViewManager.java @@ -115,6 +115,11 @@ public void setShowsUserLocation(MapView mapView, boolean showsUserLocation) { mapView.getMap().setMyLocationEnabled(showsUserLocation); } + @ReactProp(name = "showMapPoi") + public void showMapPoi(MapView mapView, boolean showMapPoi) { + mapView.getMap().showMapPoi(showMapPoi); + } + @ReactProp(name = "locationData") public void setLocationData(MapView mapView, ReadableMap readableMap) { LocationData locationData = ConvertUtils.convert(readableMap, LocationData.class); diff --git a/ios/RCTBaiduMap/BaiduMapViewManager.m b/ios/RCTBaiduMap/BaiduMapViewManager.m index 34991d30..f5cd89aa 100644 --- a/ios/RCTBaiduMap/BaiduMapViewManager.m +++ b/ios/RCTBaiduMap/BaiduMapViewManager.m @@ -7,6 +7,7 @@ // #import "BaiduMapViewManager.h" +#import "BMKPointAnnotationPro.h" @implementation BaiduMapViewManager; @@ -18,6 +19,7 @@ @implementation BaiduMapViewManager; RCT_EXPORT_VIEW_PROPERTY(mapType, int) RCT_EXPORT_VIEW_PROPERTY(zoom, float) RCT_EXPORT_VIEW_PROPERTY(showsUserLocation, BOOL); +RCT_EXPORT_VIEW_PROPERTY(showMapPoi, BOOL); RCT_EXPORT_VIEW_PROPERTY(scrollGesturesEnabled, BOOL) RCT_EXPORT_VIEW_PROPERTY(zoomGesturesEnabled, BOOL) RCT_EXPORT_VIEW_PROPERTY(trafficEnabled, BOOL) @@ -138,11 +140,11 @@ - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id - (void)mapStatusDidChanged: (BMKMapView *)mapView { CLLocationCoordinate2D targetGeoPt = [mapView getMapStatus].targetGeoPt; + BMKCoordinateRegion region = mapView.region; NSDictionary* event = @{ @"type": @"onMapStatusChange", @"params": @{ @@ -181,7 +184,9 @@ - (void)mapStatusDidChanged: (BMKMapView *)mapView { @"latitude": @(targetGeoPt.latitude), @"longitude": @(targetGeoPt.longitude) }, - @"zoom": @"", + @"latitudeDelta": @(region.span.latitudeDelta), + @"longitudeDelta": @(region.span.longitudeDelta), + @"zoom": @(mapView.zoomLevel), @"overlook": @"" } }; diff --git a/ios/RCTBaiduMap/ViewManagers/OverlayMarkerManager.m b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerManager.m index 7b90b76c..f7eb285d 100644 --- a/ios/RCTBaiduMap/ViewManagers/OverlayMarkerManager.m +++ b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerManager.m @@ -13,6 +13,7 @@ @implementation OverlayMarkerManager RCT_EXPORT_MODULE(BaiduMapOverlayMarker) RCT_EXPORT_VIEW_PROPERTY(location, NSDictionary*) RCT_EXPORT_VIEW_PROPERTY(title, NSString*) +RCT_EXPORT_VIEW_PROPERTY(icon, RCTImageSource*) - (UIView *)view { OverlayMarker *marker = [OverlayMarker new]; diff --git a/ios/RCTBaiduMap/Views/OverlayMarker.h b/ios/RCTBaiduMap/Views/OverlayMarker.h index 5ab98c2f..8cff35fc 100644 --- a/ios/RCTBaiduMap/Views/OverlayMarker.h +++ b/ios/RCTBaiduMap/Views/OverlayMarker.h @@ -13,12 +13,14 @@ #import "OverlayUtils.h" #import #import +#import @interface OverlayMarker : OverlayView @property (nonatomic, weak) RCTBridge *bridge; @property (nonatomic, strong) NSDictionary *location; @property (nonatomic, strong) NSString *title; +@property (nonatomic, strong) RCTImageSource *icon; @property (nonatomic, strong) BMKPointAnnotation *annotation; @end diff --git a/ios/RCTBaiduMap/Views/OverlayMarker.m b/ios/RCTBaiduMap/Views/OverlayMarker.m index 059730a8..e3fef628 100644 --- a/ios/RCTBaiduMap/Views/OverlayMarker.m +++ b/ios/RCTBaiduMap/Views/OverlayMarker.m @@ -7,6 +7,9 @@ // #import "OverlayMarker.h" +#import "BMKPointAnnotationPro.h" +#import +#import "RCBMImageAnnotView.h" @implementation OverlayMarker @@ -26,15 +29,15 @@ - (void)removeFromMap:(BMKMapView *)mapView { [mapView removeAnnotation:[self getAnnotation]]; } -- (BMKPointAnnotation *)getAnnotation { +- (BMKPointAnnotationPro *)getAnnotation { if (_annotation == nil) { - _annotation = [[BMKPointAnnotation alloc] init]; + _annotation = [[BMKPointAnnotationPro alloc] init]; [self updateAnnotation:_annotation]; } return _annotation; } -- (void)updateAnnotation:(BMKPointAnnotation *)annotation { +- (void)updateAnnotation:(BMKPointAnnotationPro *)annotation { CLLocationCoordinate2D coor = [OverlayUtils getCoorFromOption:_location]; if(_title.length == 0) { annotation.title = nil; @@ -42,6 +45,14 @@ - (void)updateAnnotation:(BMKPointAnnotation *)annotation { annotation.title = _title; } annotation.coordinate = coor; + + annotation.getAnnotationView = ^BMKAnnotationView * _Nonnull(BMKPointAnnotation * _Nonnull annotation) { + RCBMImageAnnotView *annotV = [[RCBMImageAnnotView alloc] initWithAnnotation:annotation reuseIdentifier:@"dontCare"]; + annotV.bridge = self.bridge; + NSLog(@"self.icon:%@",self.icon); + annotV.source = self.icon; + return annotV; + }; } @end diff --git a/js/Overlay/Marker.js b/js/Overlay/Marker.js index 1b64ea05..4e8f464a 100644 --- a/js/Overlay/Marker.js +++ b/js/Overlay/Marker.js @@ -40,13 +40,19 @@ export default class Marker extends Component { super(); } + //对icon的处理方式不同,ios上需要完整的object(包括uri size scale),android上只要uri render() { - let icon; - if (this.props.icon) { - icon = resolveAssetSource(this.props.icon) || {}; - icon = icon.uri || this.props.icon; + if (Platform.OS === 'ios') { + const icon = resolveAssetSource(this.props.icon); + return ; + } else { + let icon; + if (this.props.icon) { + icon = resolveAssetSource(this.props.icon) || {}; + icon = icon.uri || this.props.icon; + } + return ; } - return ; } } const BaiduMapOverlayMarker = requireNativeComponent('BaiduMapOverlayMarker', Marker);