Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,12 @@ Cluster 示例
| Promise getCurrentPosition(String coorType) | coorType 可为 `bd09ll` 或 `gcj02`,默认 `bd09ll`|`{"latitude": 0.0, "longitude": 0.0, "address": "", "province": "", "cityCode": "", "city": "", "district": "", "streetName": "", "streetNumber": ""}` Android: `{"latitude": 0.0, "longitude": 0.0, "direction": -1, "altitude": 0.0, "radius": 0.0, "address": "", "countryCode": "", "country": "", "province": "", "cityCode": "", "city": "", "district": "", "street": "", "streetNumber": "", "buildingId": "", "buildingName": ""}`
| startLocating(function listener, String coorType) | 开始持续定位 |
| stopLocating | 停止持续定位 |

| convertCoor({longitude,latitude}, CoorType from, CoorType to) | 支持坐标系转换: WGS84->BD09LL, WGS84->GCJ02, BD09LL->GCJ02, GCJ02->BD09LL|{ longitude: 113.965453, latitude: 22.535045 }
convertCoor 样例
```jsx
Geolocation.convertCoor({latitude:param.lat,longitude:param.lng},CoorTypes.BD09ll,CoorTypes.GCJ02).then((data)=>{
});
```
#### GetDistance Methods
| Method | Result
| ------------------------- | -------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
Expand All @@ -33,8 +35,15 @@
import com.facebook.react.bridge.WritableMap;
import org.lovebing.reactnative.baidumap.support.AppUtils;


import java.util.List;

import static com.baidu.mapapi.CoordType.BD09LL;
import static com.baidu.mapapi.CoordType.GCJ02;
import static com.baidu.mapapi.utils.CoordinateConverter.CoordType.COMMON;
import static com.baidu.mapapi.utils.CoordinateConverter.CoordType.GPS;


/**
* Created by lovebing on 2016/10/28.
*/
Expand Down Expand Up @@ -96,6 +105,137 @@ protected LatLng getBaiduCoorFromGPSCoor(LatLng sourceLatLng) {

}

@ReactMethod
public void getGCJ02CoorFromWGS84Coor(double lat, double lng,Promise promise) {
WritableMap params = Arguments.createMap();
CoordType coord = SDKInitializer.getCoordType();
boolean isSetCoord = false;


if (coord != BD09LL){
SDKInitializer.setCoordType(BD09LL);
isSetCoord = true;
}
LatLng src=new LatLng(lat,lng);
CoordinateConverter converter = new CoordinateConverter()
.from(GPS)
.coord(src);
//转换坐标
LatLng tempdest = converter.convert();


if (isSetCoord){
SDKInitializer.setCoordType(coord);
}



if (coord != GCJ02){
SDKInitializer.setCoordType(GCJ02);
isSetCoord = true;
}

CoordinateConverter descconverter = new CoordinateConverter()
.from(CoordinateConverter.CoordType.BD09LL)
.coord(tempdest);
//转换坐标
LatLng dest = descconverter.convert();
params.putDouble("latitude", dest.latitude);
params.putDouble("longitude", dest.longitude);
if (isSetCoord){
SDKInitializer.setCoordType(coord);

}
//System.out.println("getGCJ02CoorFromWGS84Coor lat:"+lat+"lng:"+lng+" to "+"lat:"+dest.latitude+" lng:"+dest.longitude);

promise.resolve(params);
}

@ReactMethod
public void getBD09LLCoorFromWGS84Coor(double lat, double lng,Promise promise) {
WritableMap params = Arguments.createMap();
CoordType coord = SDKInitializer.getCoordType();
boolean isSetCoord = false;

if (coord!= BD09LL){
SDKInitializer.setCoordType(BD09LL);

isSetCoord = true;
}
LatLng src = new LatLng(lat,lng);
CoordinateConverter converter = new CoordinateConverter()
.from(GPS)
.coord(src);
//转换坐标
LatLng dest = converter.convert();
params.putDouble("latitude", dest.latitude);
params.putDouble("longitude", dest.longitude);
if (isSetCoord){
SDKInitializer.setCoordType(coord);

}
//System.out.println("getBD09LLCoorFromWGS84Coor lat:"+lat+"lng:"+lng+" to "+"lat:"+dest.latitude+" lng:"+dest.longitude);

promise.resolve(params);
}


@ReactMethod
public void getGCJ02CoorFromBD09LLCoor(double lat, double lng,Promise promise) {

WritableMap params = Arguments.createMap();
CoordType coord = SDKInitializer.getCoordType();
boolean isSetCoord = false;

if (coord != GCJ02){
SDKInitializer.setCoordType(GCJ02);

isSetCoord =true;
}
LatLng src = new LatLng(lat,lng);
CoordinateConverter converter = new CoordinateConverter()
.from(CoordinateConverter.CoordType.BD09LL)
.coord(src);
//转换坐标
LatLng dest = converter.convert();
params.putDouble("latitude", dest.latitude);
params.putDouble("longitude", dest.longitude);
if (isSetCoord){
SDKInitializer.setCoordType(coord);

}
//System.out.println("getGCJ02CoorFromBD09LLCoor lat:"+lat+"lng:"+lng+" to "+"lat:"+dest.latitude+" lng:"+dest.longitude);
promise.resolve(params);

}
@ReactMethod
public void getBD09LLCoorFromGCJ02Coor(double lat, double lng,Promise promise) {
WritableMap params = Arguments.createMap();
CoordType coord = SDKInitializer.getCoordType();
boolean isSetCoord = false;

if (coord != BD09LL){
SDKInitializer.setCoordType(BD09LL);

isSetCoord= true;
}
LatLng src = new LatLng(lat,lng);
CoordinateConverter converter = new CoordinateConverter()
.from(COMMON)
.coord(src);
//转换坐标
LatLng dest = converter.convert();
params.putDouble("latitude", dest.latitude);
params.putDouble("longitude", dest.longitude);
if (isSetCoord){
SDKInitializer.setCoordType(coord);

}
//System.out.println("getBD09LLCoorFromGCJ02Coor lat:"+lat+"lng:"+lng+" to "+"lat:"+dest.latitude+" lng:"+dest.longitude);

promise.resolve(params);
}

@ReactMethod
public void convertGPSCoor(double lat, double lng, Promise promise) {
Log.i("convertGPSCoor", "convertGPSCoor");
Expand Down
2 changes: 2 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ import _MapTypes from './js/MapTypes';
import _Geolocation from './js/Geolocation';
import _GetDistance from './js/GetDistance';
import _Overlay from './js/Overlay/index';
import _CoorTypes from './js/CoorTypes';

export const CoorTypes = _CoorTypes;
export const MapView = _MapView;
export const MapTypes = _MapTypes;
export const Geolocation = _Geolocation;
Expand Down
64 changes: 63 additions & 1 deletion ios/RCTBaiduMap/GeolocationModule.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//

#import "GeolocationModule.h"

#import <BaiduMapAPI_Utils/BMKUtilsComponent.h>

@implementation GeolocationModule

Expand Down Expand Up @@ -106,6 +106,68 @@ - (NSMutableDictionary *)getLocationEventData:(BMKLocation* _Nullable)location o
resolve(coor);
}



RCT_EXPORT_METHOD(getGCJ02CoorFromWGS84Coor:(double)lat lng:(double)lng
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
CLLocationCoordinate2D src = CLLocationCoordinate2DMake(lat, lng);
CLLocationCoordinate2D desc = BMKCoordTrans(src, BMK_COORDTYPE_GPS,BMK_COORDTYPE_COMMON);
NSDictionary* coor = @{
@"latitude": @(desc.latitude),
@"longitude": @(desc.longitude)
};
NSLog(@"getGCJ02CoorFromWGS84Coor lat:%f lng:%f to lat:%f lng:%f",lat,lng,desc.latitude,desc.longitude);

resolve(coor);
}


RCT_EXPORT_METHOD(getBD09LLCoorFromWGS84Coor:(double)lat lng:(double)lng
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
CLLocationCoordinate2D src = CLLocationCoordinate2DMake(lat, lng);
CLLocationCoordinate2D desc = BMKCoordTrans(src, BMK_COORDTYPE_GPS,BMK_COORDTYPE_BD09LL);
NSDictionary* coor = @{
@"latitude": @(desc.latitude),
@"longitude": @(desc.longitude)
};

NSLog(@"getBD09LLCoorFromWGS84Coor lat:%f lng:%f to lat:%f lng:%f",lat,lng,desc.latitude,desc.longitude);
resolve(coor);
}



RCT_EXPORT_METHOD(getGCJ02CoorFromBD09LLCoor:(double)lat lng:(double)lng
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
CLLocationCoordinate2D src = CLLocationCoordinate2DMake(lat, lng);
CLLocationCoordinate2D desc = BMKCoordTrans(src, BMK_COORDTYPE_BD09LL,BMK_COORDTYPE_COMMON);
NSDictionary* coor = @{
@"latitude": @(desc.latitude),
@"longitude": @(desc.longitude)
};

NSLog(@"getGCJ02CoorFromBD09LLCoor lat:%f lng:%f to lat:%f lng:%f",lat,lng,desc.latitude,desc.longitude);
resolve(coor);
}


RCT_EXPORT_METHOD(getBD09LLCoorFromGCJ02Coor:(double)lat lng:(double)lng
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {

CLLocationCoordinate2D src = CLLocationCoordinate2DMake(lat, lng);
CLLocationCoordinate2D desc = BMKCoordTrans(src,BMK_COORDTYPE_COMMON,BMK_COORDTYPE_BD09LL);
NSDictionary* coor = @{
@"latitude": @(desc.latitude),
@"longitude": @(desc.longitude)
};
NSLog(@"getBD09LLCoorFromGCJ02Coor lat:%f lng:%f to lat:%f lng:%f",lat,lng,desc.latitude,desc.longitude);
resolve(coor);
}

RCT_EXPORT_METHOD(geocode:(NSString *)city addr:(NSString *)addr) {

[self getGeocodesearch].delegate = self;
Expand Down
3 changes: 2 additions & 1 deletion js/CoorTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@

export default {
BD09ll: 'bd09ll',
GCJ02: 'gcj02'
GCJ02: 'gcj02',
WGS84:'wgs84'
};
58 changes: 57 additions & 1 deletion js/Geolocation.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import React, {
Component,
PropTypes
} from 'react';

import CoorTypes from './CoorTypes'

const _module = NativeModules.BaiduGeolocationModule;

Expand Down Expand Up @@ -125,5 +125,61 @@ export default {
_locatingUpdateListener.handler.remove();
_locatingUpdateListener.handler = null;
}
},
convertCoor(source,fromCoorType,toCoorType ) {
return new Promise((resolve, reject) => {
if (fromCoorType==CoorTypes.WGS84){
if (toCoorType==CoorTypes.BD09ll){
try {
_module.getBD09LLCoorFromWGS84Coor(source.latitude,source.longitude).then((data)=>{
resolve(data);
});
}
catch (e) {
reject(e);
return;
}

}else if (toCoorType==CoorTypes.GCJ02){
try {
_module.getGCJ02CoorFromWGS84Coor(source.latitude,source.longitude).then((data)=>{
resolve(data);
});
}
catch (e) {
reject(e);
return;
}

}
}else if (fromCoorType==CoorTypes.BD09ll && toCoorType==CoorTypes.GCJ02){
try {
_module.getGCJ02CoorFromBD09LLCoor(source.latitude,source.longitude).then((data)=>{
resolve(data);
});
}
catch (e) {
reject(e);
return;
}
}
else if (fromCoorType==CoorTypes.GCJ02 && toCoorType==CoorTypes.BD09ll){
try {
_module.getBD09LLCoorFromGCJ02Coor(source.latitude,source.longitude).then((data)=>{
resolve(data);
});
}
catch (e) {
reject(e);
return;
}
}else{
reject("不支持");
return;
}

});

}

};