diff --git a/README.md b/README.md
index bb07ba38..2467097b 100644
--- a/README.md
+++ b/README.md
@@ -115,7 +115,7 @@ BaiduMapManager.initSDK('sIMQlfmOXhQmPLF1QMh4aBp8zZO9Lb2A');
| onMapPoiClick | func | undefined|
#### Overlay 覆盖物
- const { Marker, Cluster, Arc, Circle, Polyline, Polygon, Text, InfoWindow } = Overlay;
+ const { Marker, Cluster, Arc, Circle, Polyline, Polygon, InfoWindow, HeatMap } = Overlay;
##### 颜色取值说明
6 位(RRGGBB)或 8 位(AARRGGBB)
@@ -175,6 +175,9 @@ BaiduMapManager.initSDK('sIMQlfmOXhQmPLF1QMh4aBp8zZO9Lb2A');
| rotate | float | |
| location | object|{latitude: 0, longitude: 0}
+
+##### MarkerIcon 使用 View 作为 marker 的 icon
+
##### InfoWindow Props 属性
必须作为 Marker 的子组件
@@ -182,13 +185,25 @@ BaiduMapManager.initSDK('sIMQlfmOXhQmPLF1QMh4aBp8zZO9Lb2A');
| ----------------------- |:-----:| :-------:| -------
| offsetY | int | 0 | 相对于 point 在 y 轴的偏移量,仅 Android
+#### HeatMap Props 属性
+
+| Prop | Type | Default | Description
+| ----------------------- |:-----:| :-------:| -------
+| points | array | |
+| gradient | object| { colors: ['66FF00', 'FF0000'], startPoints: [0.2, 1.0] } | 颜色渐变对象
+
```jsx
-
+
+
+
+ ABC
+
+
@@ -197,7 +212,8 @@ BaiduMapManager.initSDK('sIMQlfmOXhQmPLF1QMh4aBp8zZO9Lb2A');
-
+ text
+
```
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapPackage.java b/android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapPackage.java
index 4fcfe934..e01c9c9c 100644
--- a/android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapPackage.java
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapPackage.java
@@ -27,6 +27,7 @@
import org.lovebing.reactnative.baidumap.module.GetDistanceModule;
import org.lovebing.reactnative.baidumap.module.MapAppModule;
import org.lovebing.reactnative.baidumap.uimanager.*;
+import org.lovebing.reactnative.baidumap.view.OverlayMarkerIcon;
/**
@@ -53,6 +54,7 @@ public List createViewManagers(
new MapViewManager(),
new OverlayClusterManager(),
new OverlayMarkerManager(),
+ new OverlayMarkerIconManager(),
new OverlayOverlayInfoWindowManager(),
new OverlayArcManager(),
new OverlayCircleManager(),
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 08138beb..c2acb921 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
@@ -7,6 +7,8 @@
package org.lovebing.reactnative.baidumap.listener;
+import android.util.Log;
+
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapPoi;
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerIconManager.java b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerIconManager.java
new file mode 100644
index 00000000..36256e00
--- /dev/null
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerIconManager.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016-present, lovebing.net.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+package org.lovebing.reactnative.baidumap.uimanager;
+
+import androidx.annotation.NonNull;
+import com.facebook.react.uimanager.ThemedReactContext;
+import com.facebook.react.uimanager.ViewGroupManager;
+import org.lovebing.reactnative.baidumap.view.OverlayMarkerIcon;
+
+/**
+ * @author lovebing
+ * @date 2020-06-07
+ */
+public class OverlayMarkerIconManager extends ViewGroupManager {
+
+ @NonNull
+ @Override
+ public String getName() {
+ return "BaiduMapOverlayMarkerIcon";
+ }
+
+ @NonNull
+ @Override
+ protected OverlayMarkerIcon createViewInstance(@NonNull ThemedReactContext reactContext) {
+ return new OverlayMarkerIcon(reactContext);
+ }
+}
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerManager.java b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerManager.java
index 773a43a4..dff6d5c3 100644
--- a/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerManager.java
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/uimanager/OverlayMarkerManager.java
@@ -19,6 +19,7 @@
import org.lovebing.reactnative.baidumap.util.LatLngUtil;
import org.lovebing.reactnative.baidumap.view.OverlayInfoWindow;
import org.lovebing.reactnative.baidumap.view.OverlayMarker;
+import org.lovebing.reactnative.baidumap.view.OverlayMarkerIcon;
public class OverlayMarkerManager extends ViewGroupManager {
@@ -87,6 +88,8 @@ public void setFlat(OverlayMarker overlayMarker, boolean flat) {
public void addView(OverlayMarker parent, View child, int index) {
if (child instanceof OverlayInfoWindow) {
parent.setOverlayInfoWindow((OverlayInfoWindow) child);
+ } else if (child instanceof OverlayMarkerIcon) {
+ parent.setIconView(child);
}
super.addView(parent, child, index);
}
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/util/BitmapUtil.java b/android/src/main/java/org/lovebing/reactnative/baidumap/util/BitmapUtil.java
new file mode 100644
index 00000000..dce8a0c7
--- /dev/null
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/util/BitmapUtil.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016-present, lovebing.net.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+package org.lovebing.reactnative.baidumap.util;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.view.View;
+
+import com.baidu.mapapi.map.BitmapDescriptor;
+import com.baidu.mapapi.map.BitmapDescriptorFactory;
+
+/**
+ * @author lovebing
+ * @date 2020-05-25
+ */
+public class BitmapUtil {
+
+ public static BitmapDescriptor createBitmapDescriptor(View view) {
+ return createBitmapDescriptor(view, 0, 0);
+ }
+
+ public static BitmapDescriptor createBitmapDescriptor(View view, int width, int height) {
+ if (width > 0 && height > 0) {
+ view.layout(0, 0, width, height);
+ } else if (view.getMeasuredWidth() == 0 || view.getMeasuredHeight() == 0) {
+ view.layout(0, 0, view.getMeasuredWidth() > 0 ? view.getMeasuredWidth() : 50, view.getMeasuredHeight() > 0 ? view.getMeasuredHeight() : 100);
+ }
+ view.buildDrawingCache();
+ BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(view.getDrawingCache());
+ view.destroyDrawingCache();
+ return bitmapDescriptor;
+ }
+
+ public static Bitmap resizeBitmap(Bitmap bitmap, int width, int height) {
+ float scaleWidth = ((float) width) / bitmap.getWidth();
+ float scaleHeight = ((float) height) / bitmap.getHeight();
+ Matrix matrix = new Matrix();
+ matrix.postScale(scaleWidth, scaleHeight);
+ return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
+ }
+}
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayHeatMap.java b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayHeatMap.java
index c329c22d..8f1994cd 100644
--- a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayHeatMap.java
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayHeatMap.java
@@ -69,7 +69,9 @@ public void addTopMap(BaiduMap baiduMap) {
@Override
public void removeFromMap(BaiduMap baiduMap) {
- heatMap.removeHeatMap();
- heatMap = null;
+ if (heatMap != null) {
+ heatMap.removeHeatMap();
+ heatMap = null;
+ }
}
}
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayInfoWindow.java b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayInfoWindow.java
index 6f51f262..efb3d1e5 100644
--- a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayInfoWindow.java
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayInfoWindow.java
@@ -8,13 +8,13 @@
package org.lovebing.reactnative.baidumap.view;
import android.content.Context;
-
import com.baidu.mapapi.map.BitmapDescriptor;
-import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.model.LatLng;
import com.facebook.react.views.view.ReactViewGroup;
+import org.lovebing.reactnative.baidumap.util.BitmapUtil;
+
/**
* @author lovebing Created on Dec 09, 2018
*/
@@ -52,18 +52,11 @@ public void setOffsetY(int offsetY) {
private void updateInfoWindow(LatLng location) {
if (infoWindow == null) {
- BitmapDescriptor bitmap;
- if (width > 0 && height > 0) {
- layout(0, 0, width, height);
- } else if (getMeasuredWidth() == 0 || getMeasuredHeight() == 0) {
- layout(0, 0, getMeasuredWidth() > 0 ? getMeasuredWidth() : 50, getMeasuredHeight() > 0 ? getMeasuredHeight() : 100);
- }
- buildDrawingCache();
- bitmap = BitmapDescriptorFactory.fromBitmap(getDrawingCache());
- if (bitmap == null) {
+ BitmapDescriptor bitmapDescriptor = BitmapUtil.createBitmapDescriptor(this, width, height);
+ if (bitmapDescriptor == null) {
return;
}
- infoWindow = new InfoWindow(bitmap, location, offsetY, new InfoWindow.OnInfoWindowClickListener() {
+ infoWindow = new InfoWindow(bitmapDescriptor, location, offsetY, new InfoWindow.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick() {
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarker.java b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarker.java
index 96e6b6e3..41b7cc88 100644
--- a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarker.java
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarker.java
@@ -10,12 +10,12 @@
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
-import android.graphics.Matrix;
import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
@@ -41,6 +41,7 @@
import org.lovebing.reactnative.baidumap.R;
import org.lovebing.reactnative.baidumap.model.IconInfo;
+import org.lovebing.reactnative.baidumap.util.BitmapUtil;
import java.util.Objects;
@@ -60,6 +61,7 @@ public class OverlayMarker extends ViewGroup implements OverlayView, ClusterItem
private OverlayInfoWindow overlayInfoWindow;
private volatile boolean loadingImage = false;
private InfoWindow titleInfoWindow;
+ private View iconView;
private final ControllerListener imageControllerListener =
new BaseControllerListener() {
@@ -157,6 +159,14 @@ public void setOverlayInfoWindow(OverlayInfoWindow overlayInfoWindow) {
this.overlayInfoWindow = overlayInfoWindow;
}
+ public void setIconView(View iconView) {
+ this.iconView = iconView;
+ if (marker != null) {
+ iconBitmapDescriptor = BitmapUtil.createBitmapDescriptor(iconView);
+ marker.setIcon(iconBitmapDescriptor);
+ }
+ }
+
public String getTitle() {
return title;
}
@@ -181,14 +191,6 @@ public void setPosition(LatLng position) {
}
}
- public BitmapDescriptor getIconBitmapDescriptor() {
- return iconBitmapDescriptor;
- }
-
- public void setIconBitmapDescriptor(BitmapDescriptor iconBitmapDescriptor) {
- this.iconBitmapDescriptor = iconBitmapDescriptor;
- }
-
public Float getRotate() {
return rotate;
}
@@ -200,10 +202,6 @@ public void setRotate(Float rotate) {
}
}
- public Boolean getFlat() {
- return flat;
- }
-
public void setFlat(Boolean flat) {
this.flat = flat;
if (marker != null) {
@@ -211,10 +209,6 @@ public void setFlat(Boolean flat) {
}
}
- public Boolean getPerspective() {
- return perspective;
- }
-
public void setPerspective(Boolean perspective) {
this.perspective = perspective;
if (marker != null) {
@@ -253,23 +247,16 @@ public void setIcon(IconInfo iconInfo) {
@Override
public BitmapDescriptor getBitmapDescriptor() {
BitmapDescriptor result;
- if (getIconBitmapDescriptor() != null) {
- result = getIconBitmapDescriptor();
+ if (iconBitmapDescriptor != null) {
+ result = iconBitmapDescriptor;
} else {
result = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
}
if (iconInfo != null
&& iconInfo.getWidth() > 0
&& iconInfo.getHeight() > 0) {
- int height = result.getBitmap().getHeight();
- int width = result.getBitmap().getWidth();
- float scaleWidth = ((float) iconInfo.getWidth()) / width;
- float scaleHeight = ((float) iconInfo.getHeight()) / height;
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
-
- Bitmap newBitmap = Bitmap.createBitmap(result.getBitmap(), 0, 0, width, height, matrix, true);
- result = BitmapDescriptorFactory.fromBitmap(newBitmap);
+ result = BitmapDescriptorFactory.fromBitmap(BitmapUtil.resizeBitmap(result.getBitmap(),
+ iconInfo.getWidth(), iconInfo.getHeight()));
}
return result;
}
@@ -297,6 +284,10 @@ public void removeFromMap(BaiduMap baiduMap) {
if (marker != null) {
marker.remove();
marker = null;
+ overlayInfoWindow = null;
+ titleInfoWindow = null;
+ iconView = null;
+ iconBitmapDescriptor = null;
}
}
@@ -315,12 +306,13 @@ public int hashCode() {
}
private void addOverlay(BaiduMap baiduMap) {
- BitmapDescriptor icon = getBitmapDescriptor();
+ if (iconView != null) {
+ iconBitmapDescriptor = BitmapUtil.createBitmapDescriptor(iconView);
+ }
MarkerOptions option = new MarkerOptions()
.position(position)
- .title(getTitle())
.alpha(getAlpha())
- .icon(icon);
+ .icon(getBitmapDescriptor());
if (rotate != null) {
option.rotate(rotate);
}
diff --git a/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarkerIcon.java b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarkerIcon.java
new file mode 100644
index 00000000..78d7f398
--- /dev/null
+++ b/android/src/main/java/org/lovebing/reactnative/baidumap/view/OverlayMarkerIcon.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2016-present, lovebing.net.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+package org.lovebing.reactnative.baidumap.view;
+
+import android.content.Context;
+import com.facebook.react.views.view.ReactViewGroup;
+
+/**
+ * @author lovebing
+ * @date 2020-06-07
+ */
+public class OverlayMarkerIcon extends ReactViewGroup {
+
+ public OverlayMarkerIcon(Context context) {
+ super(context);
+ }
+}
diff --git a/ios/RCTBaiduMap.xcodeproj/project.pbxproj b/ios/RCTBaiduMap.xcodeproj/project.pbxproj
index 75140cfd..6d1266b0 100644
--- a/ios/RCTBaiduMap.xcodeproj/project.pbxproj
+++ b/ios/RCTBaiduMap.xcodeproj/project.pbxproj
@@ -28,6 +28,8 @@
EF824B6F234A18AD009E6523 /* BMKCluster.m in Sources */ = {isa = PBXBuildFile; fileRef = EF824B6A234A18AD009E6523 /* BMKCluster.m */; };
EF824B70234A18AD009E6523 /* BMKClusterQuadtree.m in Sources */ = {isa = PBXBuildFile; fileRef = EF824B6B234A18AD009E6523 /* BMKClusterQuadtree.m */; };
EF824B72234A18AD009E6523 /* BMKClusterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF824B6E234A18AD009E6523 /* BMKClusterManager.m */; };
+ EF9F1D7D24783377007FB307 /* OverlayHeatMap.m in Sources */ = {isa = PBXBuildFile; fileRef = EF9F1D7C24783377007FB307 /* OverlayHeatMap.m */; };
+ EF9F1D802478DECC007FB307 /* OverlayHeatMapManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF9F1D7F2478DECC007FB307 /* OverlayHeatMapManager.m */; };
EFB77A4A234AF69B00A17DDF /* OverlayPolyline.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A45234AF69B00A17DDF /* OverlayPolyline.m */; };
EFB77A4B234AF69B00A17DDF /* OverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A47234AF69B00A17DDF /* OverlayView.m */; };
EFB77A4C234AF69B00A17DDF /* OverlayMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A48234AF69B00A17DDF /* OverlayMarker.m */; };
@@ -37,6 +39,8 @@
EFB77A65234B0B3B00A17DDF /* ClusterAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A64234B0B3B00A17DDF /* ClusterAnnotation.m */; };
EFB77A6A234B792F00A17DDF /* OverlayCluster.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A66234B792F00A17DDF /* OverlayCluster.m */; };
EFB77A6B234B792F00A17DDF /* OverlayClusterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB77A68234B792F00A17DDF /* OverlayClusterManager.m */; };
+ EFC6BFFB248D0FE4003DB9CE /* OverlayMarkerIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = EFC6BFFA248D0FE4003DB9CE /* OverlayMarkerIcon.m */; };
+ EFC6BFFE248D1093003DB9CE /* OverlayMarkerIconManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EFC6BFFD248D1093003DB9CE /* OverlayMarkerIconManager.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -93,6 +97,10 @@
EF824B6A234A18AD009E6523 /* BMKCluster.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKCluster.m; sourceTree = ""; };
EF824B6B234A18AD009E6523 /* BMKClusterQuadtree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterQuadtree.m; sourceTree = ""; };
EF824B6E234A18AD009E6523 /* BMKClusterManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterManager.m; sourceTree = ""; };
+ EF9F1D7B24783355007FB307 /* OverlayHeatMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OverlayHeatMap.h; sourceTree = ""; };
+ EF9F1D7C24783377007FB307 /* OverlayHeatMap.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OverlayHeatMap.m; sourceTree = ""; };
+ EF9F1D7E2478DEBA007FB307 /* OverlayHeatMapManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OverlayHeatMapManager.h; sourceTree = ""; };
+ EF9F1D7F2478DECC007FB307 /* OverlayHeatMapManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OverlayHeatMapManager.m; sourceTree = ""; };
EFB77A44234AF69A00A17DDF /* OverlayMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayMarker.h; sourceTree = ""; };
EFB77A45234AF69B00A17DDF /* OverlayPolyline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverlayPolyline.m; sourceTree = ""; };
EFB77A46234AF69B00A17DDF /* OverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayView.h; sourceTree = ""; };
@@ -111,6 +119,10 @@
EFB77A67234B792F00A17DDF /* OverlayCluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayCluster.h; sourceTree = ""; };
EFB77A68234B792F00A17DDF /* OverlayClusterManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverlayClusterManager.m; sourceTree = ""; };
EFB77A69234B792F00A17DDF /* OverlayClusterManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayClusterManager.h; sourceTree = ""; };
+ EFC6BFF9248D0FCB003DB9CE /* OverlayMarkerIcon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OverlayMarkerIcon.h; sourceTree = ""; };
+ EFC6BFFA248D0FE4003DB9CE /* OverlayMarkerIcon.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OverlayMarkerIcon.m; sourceTree = ""; };
+ EFC6BFFC248D1086003DB9CE /* OverlayMarkerIconManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OverlayMarkerIconManager.h; sourceTree = ""; };
+ EFC6BFFD248D1093003DB9CE /* OverlayMarkerIconManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OverlayMarkerIconManager.m; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -219,6 +231,10 @@
EF18EB27246FE35E005A2F4D /* OverlayPolygon.m */,
EF18EB32246FE856005A2F4D /* InfoWindow.h */,
EF18EB33246FE863005A2F4D /* InfoWindow.m */,
+ EF9F1D7C24783377007FB307 /* OverlayHeatMap.m */,
+ EF9F1D7B24783355007FB307 /* OverlayHeatMap.h */,
+ EFC6BFF9248D0FCB003DB9CE /* OverlayMarkerIcon.h */,
+ EFC6BFFA248D0FE4003DB9CE /* OverlayMarkerIcon.m */,
);
path = Views;
sourceTree = "";
@@ -238,6 +254,10 @@
EF18EB2A246FE383005A2F4D /* OverlayPolygonManager.m */,
EF18EB35246FE873005A2F4D /* InfoWindowManager.h */,
EF18EB36246FE885005A2F4D /* InfoWindowManager.m */,
+ EF9F1D7E2478DEBA007FB307 /* OverlayHeatMapManager.h */,
+ EF9F1D7F2478DECC007FB307 /* OverlayHeatMapManager.m */,
+ EFC6BFFC248D1086003DB9CE /* OverlayMarkerIconManager.h */,
+ EFC6BFFD248D1093003DB9CE /* OverlayMarkerIconManager.m */,
);
path = ViewManagers;
sourceTree = "";
@@ -354,12 +374,14 @@
EF7F66C42369F9B600D1D9DC /* BaiduMapAppModule.m in Sources */,
EF18EB1C246FC829005A2F4D /* OverlayArc.m in Sources */,
EF18EB1F246FC84C005A2F4D /* OverlayArcManager.m in Sources */,
+ EF9F1D802478DECC007FB307 /* OverlayHeatMapManager.m in Sources */,
EF18EB3C246FE899005A2F4D /* GetDistanceModule.m in Sources */,
EFB77A53234AF6E300A17DDF /* OverlayMarkerManager.m in Sources */,
EF18EAEB246FB87A005A2F4D /* OverlayCircle.m in Sources */,
EFB77A52234AF6E300A17DDF /* OverlayPolylineManager.m in Sources */,
EF18EB2B246FE383005A2F4D /* OverlayPolygonManager.m in Sources */,
EFB77A4A234AF69B00A17DDF /* OverlayPolyline.m in Sources */,
+ EF9F1D7D24783377007FB307 /* OverlayHeatMap.m in Sources */,
EF4ABB0D1DC378CF008E75C9 /* GeolocationModule.m in Sources */,
EFB77A4C234AF69B00A17DDF /* OverlayMarker.m in Sources */,
EF18EB37246FE885005A2F4D /* InfoWindowManager.m in Sources */,
@@ -374,7 +396,9 @@
EF18EB34246FE863005A2F4D /* InfoWindow.m in Sources */,
EFB77A6B234B792F00A17DDF /* OverlayClusterManager.m in Sources */,
EF18EAA0246F07A6005A2F4D /* BMKPointAnnotationPro.m in Sources */,
+ EFC6BFFB248D0FE4003DB9CE /* OverlayMarkerIcon.m in Sources */,
EFB77A6A234B792F00A17DDF /* OverlayCluster.m in Sources */,
+ EFC6BFFE248D1093003DB9CE /* OverlayMarkerIconManager.m in Sources */,
EF824B6F234A18AD009E6523 /* BMKCluster.m in Sources */,
EF824B70234A18AD009E6523 /* BMKClusterQuadtree.m in Sources */,
);
diff --git a/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.h b/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.h
new file mode 100644
index 00000000..acaf1627
--- /dev/null
+++ b/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.h
@@ -0,0 +1,19 @@
+//
+// OverlayHeatMapManager.h
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/5/23.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#ifndef OverlayHeatMapManager_h
+#define OverlayHeatMapManager_h
+
+#import "OverlayHeatMap.h"
+#import
+
+@interface OverlayHeatMapManager : RCTViewManager
+
+@end
+
+#endif /* OverlayHeatMapManager_h */
diff --git a/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.m b/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.m
new file mode 100644
index 00000000..59631ef5
--- /dev/null
+++ b/ios/RCTBaiduMap/ViewManagers/OverlayHeatMapManager.m
@@ -0,0 +1,24 @@
+//
+// OverlayHeatMapManager.m
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/5/23.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#import "OverlayHeatMapManager.h"
+
+@implementation OverlayHeatMapManager
+
+RCT_EXPORT_MODULE(BaiduMapOverlayHeatMap)
+
+RCT_EXPORT_VIEW_PROPERTY(points, NSArray*)
+RCT_EXPORT_VIEW_PROPERTY(gradient, NSDictionary*)
+
+- (UIView *)view {
+ OverlayHeatMap *heatMap = [OverlayHeatMap new];
+ heatMap.bridge = self.bridge;
+ return heatMap;
+}
+
+@end
diff --git a/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.h b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.h
new file mode 100644
index 00000000..ace67491
--- /dev/null
+++ b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.h
@@ -0,0 +1,19 @@
+//
+// OverlayMarkerIconManager.h
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/6/7.
+// Copyright © 2020 lovebing.org. All rights reserved.
+//
+
+#ifndef OverlayMarkerIconManager_h
+#define OverlayMarkerIconManager_h
+
+#import "OverlayMarkerIcon.h"
+#import
+
+@interface OverlayMarkerIconManager : RCTViewManager
+
+@end
+
+#endif /* OverlayMarkerIconManager_h */
diff --git a/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.m b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.m
new file mode 100644
index 00000000..cff1535b
--- /dev/null
+++ b/ios/RCTBaiduMap/ViewManagers/OverlayMarkerIconManager.m
@@ -0,0 +1,21 @@
+//
+// OverlayMarkerIconManager.m
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/6/7.
+// Copyright © 2020 lovebing.org. All rights reserved.
+//
+
+#import "OverlayMarkerIconManager.h"
+
+@implementation OverlayMarkerIconManager
+
+RCT_EXPORT_MODULE(BaiduMapOverlayMarkerIcon)
+
+- (UIView *)view {
+ OverlayMarkerIcon *markerIcon = [OverlayMarkerIcon new];
+ markerIcon.bridge = self.bridge;
+ return markerIcon;
+}
+
+@end
diff --git a/ios/RCTBaiduMap/Views/OverlayHeatMap.h b/ios/RCTBaiduMap/Views/OverlayHeatMap.h
new file mode 100644
index 00000000..b026a1c3
--- /dev/null
+++ b/ios/RCTBaiduMap/Views/OverlayHeatMap.h
@@ -0,0 +1,25 @@
+//
+// OverlayHeatMap.h
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/5/23.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#ifndef OverlayHeatMap_h
+#define OverlayHeatMap_h
+
+#import "OverlayView.h"
+#import "OverlayUtils.h"
+#import
+
+@interface OverlayHeatMap : OverlayView
+
+@property (nonatomic, weak) RCTBridge *bridge;
+@property (nonatomic, strong) NSArray *points;
+@property (nonatomic, strong) NSDictionary *gradient;
+@property (nonatomic, strong) BMKHeatMap *heatMap;
+
+@end
+
+#endif /* OverlayHeatMap_h */
diff --git a/ios/RCTBaiduMap/Views/OverlayHeatMap.m b/ios/RCTBaiduMap/Views/OverlayHeatMap.m
new file mode 100644
index 00000000..44aa12da
--- /dev/null
+++ b/ios/RCTBaiduMap/Views/OverlayHeatMap.m
@@ -0,0 +1,38 @@
+//
+// OverlayHeatMap.m
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/5/23.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#import "OverlayHeatMap.h"
+
+@implementation OverlayHeatMap
+
+- (NSString *)getType {
+ return @"heatMap";
+}
+
+- (void)addToMap:(BMKMapView *)mapView {
+ if (_heatMap == nil) {
+ _heatMap = [[BMKHeatMap alloc]init];
+ }
+ [self update];
+ [mapView addHeatMap:_heatMap] ;
+}
+
+- (void)update {
+ NSMutableArray *data = [NSMutableArray array];
+ for (NSDictionary *point in _points) {
+ BMKHeatMapNode *heatMapNode = [[BMKHeatMapNode alloc]init];
+ heatMapNode.pt = [OverlayUtils getCoorFromOption:point];
+ [data addObject:heatMapNode];
+ }
+ _heatMap.mData = data;
+}
+
+- (void)removeFromMap:(BMKMapView *)mapView {
+ [mapView removeHeatMap];
+}
+@end
diff --git a/ios/RCTBaiduMap/Views/OverlayMarker.m b/ios/RCTBaiduMap/Views/OverlayMarker.m
index 4ffd531b..09664267 100644
--- a/ios/RCTBaiduMap/Views/OverlayMarker.m
+++ b/ios/RCTBaiduMap/Views/OverlayMarker.m
@@ -10,6 +10,7 @@
#import
#import
#import "InfoWindow.h"
+#import "OverlayMarkerIcon.h"
@implementation OverlayMarker {
RCTImageLoaderCancellationBlock _reloadImageCancellationBlock;
@@ -117,6 +118,15 @@ - (void)insertReactSubview:(UIView *)subview atIndex:(NSInteger)atIndex {
[_annotation.customPopView addSubview:subview];
[_annotation updatePaopaoView];
});
+ } else if([subview isKindOfClass:[OverlayMarkerIcon class]]) {
+ UIGraphicsBeginImageContextWithOptions(subview.frame.size, YES, [UIScreen mainScreen].scale);
+ [subview.layer renderInContext:UIGraphicsGetCurrentContext()];
+ UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ dispatch_async(dispatch_get_main_queue(), ^{
+ _annotation.annotationView.image = nil;
+ [_annotation.annotationView addSubview:subview];
+ });
}
[super insertReactSubview:subview atIndex:atIndex];
}
@@ -127,6 +137,8 @@ - (void)removeReactSubview:(UIView *)subview {
dispatch_async(dispatch_get_main_queue(), ^{
_annotation.annotationView = nil;
});
+ } else if([subview isKindOfClass:[OverlayMarkerIcon class]]) {
+ [_annotation.annotationView removeReactSubview:subview];
}
[super removeReactSubview:subview];
}
diff --git a/ios/RCTBaiduMap/Views/OverlayMarkerIcon.h b/ios/RCTBaiduMap/Views/OverlayMarkerIcon.h
new file mode 100644
index 00000000..12a9260d
--- /dev/null
+++ b/ios/RCTBaiduMap/Views/OverlayMarkerIcon.h
@@ -0,0 +1,21 @@
+//
+// OverlayMarkerIcon.h
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/6/7.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#ifndef OverlayMarkerIcon_h
+#define OverlayMarkerIcon_h
+
+#import
+#import
+
+@interface OverlayMarkerIcon : UIView
+
+@property (nonatomic, weak) RCTBridge *bridge;
+
+@end
+
+#endif /* OverlayMarkerIcon_h */
diff --git a/ios/RCTBaiduMap/Views/OverlayMarkerIcon.m b/ios/RCTBaiduMap/Views/OverlayMarkerIcon.m
new file mode 100644
index 00000000..bed109c3
--- /dev/null
+++ b/ios/RCTBaiduMap/Views/OverlayMarkerIcon.m
@@ -0,0 +1,14 @@
+//
+// OverlayMarkerIcon.m
+// RCTBaiduMap
+//
+// Created by lovebing on 2020/6/7.
+// Copyright © 2020 lovebing.net. All rights reserved.
+//
+
+#import "OverlayMarkerIcon.h"
+
+@implementation OverlayMarkerIcon
+
+
+@end
diff --git a/js/Geolocation.js b/js/Geolocation.js
index 5c80bf53..72f032b4 100644
--- a/js/Geolocation.js
+++ b/js/Geolocation.js
@@ -6,9 +6,7 @@
*/
import {
- requireNativeComponent,
NativeModules,
- Platform,
DeviceEventEmitter
} from 'react-native';
diff --git a/js/MapApp.js b/js/MapApp.js
index ee89886d..856d3c2f 100644
--- a/js/MapApp.js
+++ b/js/MapApp.js
@@ -6,10 +6,7 @@
*/
import {
- requireNativeComponent,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ NativeModules
} from 'react-native';
import React, {
diff --git a/js/MapView.js b/js/MapView.js
index f3ef57d3..3018bbd8 100644
--- a/js/MapView.js
+++ b/js/MapView.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
import PropTypes from 'prop-types';
diff --git a/js/Overlay/Arc.js b/js/Overlay/Arc.js
index add33821..e86a089d 100644
--- a/js/Overlay/Arc.js
+++ b/js/Overlay/Arc.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/Circle.js b/js/Overlay/Circle.js
index 416090b2..d61f4e08 100644
--- a/js/Overlay/Circle.js
+++ b/js/Overlay/Circle.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/Cluster.js b/js/Overlay/Cluster.js
index 753fd2b9..fb7c1d9f 100644
--- a/js/Overlay/Cluster.js
+++ b/js/Overlay/Cluster.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/HeatMap.js b/js/Overlay/HeatMap.js
new file mode 100644
index 00000000..88bb8376
--- /dev/null
+++ b/js/Overlay/HeatMap.js
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2016-present, lovebing.org.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import {
+ requireNativeComponent,
+ View
+} from 'react-native';
+
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class HeatMap extends Component {
+ static propTypes = {
+ ...View.propTypes,
+ points: PropTypes.array,
+ gradient: PropTypes.object
+ };
+
+ static defaultProps = {
+ points: [{
+ latitude: 0,
+ longitude: 0
+ }],
+ gradient: {
+ colors: ['66FF00', 'FF0000'],
+ startPoints: [0.2, 1.0]
+ }
+ };
+
+ constructor() {
+ super();
+ }
+
+ render() {
+ return ;
+ }
+}
+const BaiduMapOverlayHeatMap = requireNativeComponent('BaiduMapOverlayHeatMap', HeatMap);
\ No newline at end of file
diff --git a/js/Overlay/InfoWindow.js b/js/Overlay/InfoWindow.js
index 01ae18be..d2fda0b9 100644
--- a/js/Overlay/InfoWindow.js
+++ b/js/Overlay/InfoWindow.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
@@ -31,9 +28,6 @@ export default class InfoWindow extends Component {
}
render() {
- if (Platform.OS === 'ios') {
- return ;
- }
return ;
}
}
diff --git a/js/Overlay/Marker.js b/js/Overlay/Marker.js
index cd3362b5..019e3475 100644
--- a/js/Overlay/Marker.js
+++ b/js/Overlay/Marker.js
@@ -5,12 +5,9 @@
* LICENSE file in the root directory of this source tree.
*/
- import {
+import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource';
diff --git a/js/Overlay/MarkerIcon.js b/js/Overlay/MarkerIcon.js
new file mode 100644
index 00000000..7668a0b1
--- /dev/null
+++ b/js/Overlay/MarkerIcon.js
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2016-present, lovebing.org.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import {
+ requireNativeComponent,
+ View
+} from 'react-native';
+
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class MarkerIcon extends Component {
+ static propTypes = {
+ ...View.propTypes
+ };
+
+ constructor() {
+ super();
+ }
+
+ render() {
+ return ;
+ }
+}
+const BaiduMapOverlayMarkerIcon = requireNativeComponent('BaiduMapOverlayMarkerIcon', MarkerIcon);
\ No newline at end of file
diff --git a/js/Overlay/Polygon.js b/js/Overlay/Polygon.js
index fe14d616..c2e7d677 100644
--- a/js/Overlay/Polygon.js
+++ b/js/Overlay/Polygon.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/Polyline.js b/js/Overlay/Polyline.js
index 91943d65..59f7cef7 100644
--- a/js/Overlay/Polyline.js
+++ b/js/Overlay/Polyline.js
@@ -7,10 +7,7 @@
import {
requireNativeComponent,
- View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ View
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/Text.js b/js/Overlay/Text.js
index 64741237..db72bf0f 100644
--- a/js/Overlay/Text.js
+++ b/js/Overlay/Text.js
@@ -8,9 +8,7 @@
import {
requireNativeComponent,
View,
- NativeModules,
- Platform,
- DeviceEventEmitter
+ Platform
} from 'react-native';
import React, { Component } from 'react';
diff --git a/js/Overlay/index.js b/js/Overlay/index.js
index 53ec1de0..fa60fdc2 100644
--- a/js/Overlay/index.js
+++ b/js/Overlay/index.js
@@ -13,6 +13,9 @@ import Text from './Text';
import Marker from './Marker';
import InfoWindow from './InfoWindow';
import Cluster from './Cluster';
+import HeatMap from './HeatMap';
+import MarkerIcon from './MarkerIcon';
+
export default {
Arc,
Circle,
@@ -21,5 +24,7 @@ export default {
Text,
Marker,
Cluster,
- InfoWindow
+ InfoWindow,
+ HeatMap,
+ MarkerIcon
};
\ No newline at end of file
diff --git a/package.json b/package.json
index 384bfe67..c3c8cc2f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-native-baidu-map",
- "version": "1.0.35",
+ "version": "1.0.36",
"description": "Baidu Map SDK modules and views for React Native(Android & iOS), support react native 0.61+. 百度地图 React Native 模块,支持 react native 0.61+,已更新到最新的百度地图 SDK 版本。",
"main": "index.js",
"scripts": {
diff --git a/react-native-baidu-map.podspec b/react-native-baidu-map.podspec
index 694fe01a..5737750c 100644
--- a/react-native-baidu-map.podspec
+++ b/react-native-baidu-map.podspec
@@ -9,7 +9,7 @@
Pod::Spec.new do |s|
s.name = "react-native-baidu-map"
- s.version = "1.0.35"
+ s.version = "1.0.36"
s.summary = "Baidu Map for React Native"
s.description = <<-DESC
@@ -41,7 +41,7 @@ Pod::Spec.new do |s|
# Supports git, hg, bzr, svn and HTTP.
#
- s.source = { :http => "http://repo.codeboot.net/pod/http/react-native-baidu-map/1.0.35/source.zip" }
+ s.source = { :http => "http://repo.codeboot.net/pod/http/react-native-baidu-map/1.0.36/source.zip" }
s.source_files = "ios/RCTBaiduMap/**/*.{h,m}"
s.exclude_files = ""