Skip to content

Instantly share code, notes, and snippets.

@rjuevesano
Created March 23, 2018 02:25
Show Gist options
  • Save rjuevesano/654271c08e5017535465137039d5bf2e to your computer and use it in GitHub Desktop.
Save rjuevesano/654271c08e5017535465137039d5bf2e to your computer and use it in GitHub Desktop.
Baidu map for android. Allows you to get current location, set mode, set zoom, set trafficEnabled, set heatMapEnabled and set marker.
package <PACKAGE_NAME>
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
public class BaiduMapViewManager extends SimpleViewManager<MapView> implements BDLocationListener {
public MapView mapView;
public BaiduMap mBaiduMap;
public LocationClient mLocationClient = null;
private boolean isFristLocation = true;
public static final String RCT_CLASS = "RCTBaiduMap";
public static final String TAG = "RCTBaiduMap";
private Context mContext;
protected ThemedReactContext context;
public BaiduMapViewManager(Context context) {
mContext = context;
}
@Override
public String getName() {
return RCT_CLASS;
}
@ReactProp(name="mode", defaultInt = 1)
public void setMode(MapView mapView, int type) {
Log.i(TAG, "mode:" + type);
mapView.getMap().setMapType(type);
}
@ReactProp(name="zoom", defaultInt = 1)
public void setZoom(MapView mapView, int type){
Log.e(TAG, "setZoom:" + type);
MapStatus.Builder builder = new MapStatus.Builder();
builder.zoom(type);
mapView.getMap().animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
@ReactProp(name="trafficEnabled", defaultBoolean = false)
public void setTrafficEnabled(MapView mapView, boolean isEnabled) {
Log.e(TAG, "trafficEnabled:" + isEnabled);
mapView.getMap().setTrafficEnabled(isEnabled);
}
@ReactProp(name="heatMapEnabled", defaultBoolean = false)
public void setHeatMapEnabled(MapView mapView, boolean isEnabled) {
Log.e(TAG, "heatMapEnabled" + isEnabled);
mapView.getMap().setBaiduHeatMapEnabled(isEnabled);
}
@ReactProp(name="marker")
public void setMarker(MapView mapView, ReadableArray array) {
Log.d(TAG, "marker:" + array);
if (array != null) {
for (int i = 0; i < array.size(); i++) {
ReadableMap sub = array.getMap(i);
LatLng point = new LatLng(sub.getDouble("latitude"), sub.getDouble("longitude"));
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_location);
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap)
.draggable(true);
mBaiduMap.addOverlay(option);
}
}
}
@Override
protected MapView createViewInstance(ThemedReactContext reactContext) {
this.context = reactContext;
if (mapView == null) {
isFristLocation = true;
mapView = new MapView(this.context);
mBaiduMap = mapView.getMap();
mBaiduMap.setMyLocationEnabled(true);
mLocationClient = new LocationClient(mContext.getApplicationContext());
mLocationClient.registerLocationListener(this);
initLocation();
mLocationClient.start();
} else {
mapView.onResume();
}
return mapView;
}
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mapView == null)
return;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFristLocation) {
isFristLocation = false;
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder
.target(ll)
.zoom(18.0f);
mapView.getMap().animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll");
option.setScanSpan(1000);
option.setIsNeedAddress(true);
option.setOpenGps(true);
mLocationClient.setLocOption(option);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment