Skip to content

Commit c7d4fea

Browse files
committed
[commit] 增加GPS转换工具
1 parent c551cca commit c7d4fea

File tree

8 files changed

+122
-207
lines changed

8 files changed

+122
-207
lines changed

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 使用方式
22
* 这个library还在功能迭代中,功能不尽完善...
33
```gradle
4-
compile 'com.code19.library:library:0.0.5'
4+
compile 'com.code19.library:library:0.0.6'
55
```
66
# 常用工具类
77
- 每一个Android开发者在日常开发中都会积累一些自己的代码片段
@@ -56,7 +56,18 @@ compile 'com.code19.library:library:0.0.5'
5656
* base64Decode Base64解密
5757
* XorEncode 异或加密
5858
* XorDecode 异或解密
59-
59+
60+
- CoordinateTransformUtil.java GPS坐标转换工具
61+
* 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具
62+
* bd09towgs84 百度坐标系(BD-09)转WGS坐标(百度坐标纬度,百度坐标经度),WGS84坐标数组
63+
* wgs84tobd09 WGS坐标转百度坐标系(BD-09)(WGS84坐标系的经度,WGS84坐标系的纬度),百度坐标数组
64+
* gcj02tobd09 火星坐标系(GCJ-02)转百度坐标系(BD-09)(火星坐标经度,火星坐标纬度),百度坐标数组
65+
* bd09togcj02 百度坐标系(BD-09)转火星坐标系(GCJ-02)(百度坐标纬度,百度坐标经度),火星坐标数组
66+
* wgs84togcj02 WGS84转GCJ02(火星坐标系)(WGS84坐标系的经度,WGS84坐标系的纬度),火星坐标数组
67+
* gcj02towgs84 GCJ02(火星坐标系)转GPS84(火星坐标系的经度,火星坐标系纬度),WGS84坐标数组
68+
* transformlat 纬度转换
69+
* transformlng 经度转换
70+
* out_of_china 判断是否在国内,不在国内不做偏移
6071
- DateUtil.java 日期工具类
6172
* formatDataTime 格式化日期时间
6273
* formatDate 格式化日期

library/build.gradle

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
apply plugin: 'com.android.library'
2-
apply plugin: 'com.github.dcendents.android-maven' //插件
3-
apply plugin: 'com.jfrog.bintray' //插件
2+
apply plugin: 'com.github.dcendents.android-maven'
3+
apply plugin: 'com.jfrog.bintray'
44

5-
version = "0.0.5" //版本号,更新代码后修改这个值
5+
version = "0.0.6" //版本号,更新代码后修改这个值
66
android {
77
compileSdkVersion 23
88
buildToolsVersion "23.0.3"
@@ -28,29 +28,27 @@ dependencies {
2828
compile 'com.google.code.gson:gson:2+'
2929
compile 'com.android.support:design:23.4.0'
3030
}
31-
def siteUrl = 'https://github.com/h4de5ing/AndroidCommon'
31+
def siteUrl = 'https://github.com/h4de5ing/AndroidCommon' //网站
3232
def gitUrl = 'https://github.com/h4de5ing/AndroidCommon.git' // Git仓库的url
3333
group = "com.code19.library"
34-
install{
34+
install {
3535
repositories.mavenInstaller {
3636
pom {
3737
project {
3838
packaging 'aar'
39-
// Add your description here
4039
name 'Android common library' //项目的描述
4140
url siteUrl
42-
// Set your license
4341
licenses {
4442
license {
4543
name 'The Apache Software License, Version 2.0'
4644
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
4745
}
4846
}
4947
developers {
50-
developer {
51-
id 'h4de5ing' //开发者id
52-
name 'h4de5ing' //开发者名称
53-
email 'android@19code.com' //开发者邮箱
48+
developer { //开发者信息
49+
id 'h4de5ing'
50+
name 'h4de5ing'
51+
email 'android@19code.com'
5452
}
5553
}
5654
scm {
@@ -80,7 +78,7 @@ artifacts {
8078
}
8179
Properties properties = new Properties()
8280
properties.load(project.rootProject.file('local.properties').newDataInputStream())
83-
bintray {
81+
bintray { //用户名和上传key的位置
8482
user = properties.getProperty("bintray.user")
8583
key = properties.getProperty("bintray.apikey")
8684
configurations = ['archives']

library/src/main/java/com/code19/library/AppUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public static boolean hasPermission(Context context, String permission) {
144144
.getPackageName())) {
145145
return true;
146146
}
147-
Log.d(Config.TAG, "Have you declared permission " + permission + " in AndroidManifest.xml ?");
147+
Log.d("AppUtils", "Have you declared permission " + permission + " in AndroidManifest.xml ?");
148148
}
149149
} catch (Exception e) {
150150
e.printStackTrace();

library/src/main/java/com/code19/library/Config.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

library/src/main/java/com/code19/library/CoordinateTransformUtil.java

Lines changed: 84 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -17,170 +17,100 @@
1717
package com.code19.library;
1818

1919
/**
20-
* 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具
21-
*
2220
* https://github.com/wandergis/coordtransform javaScript Version
2321
*/
2422
public class CoordinateTransformUtil {
25-
static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
26-
// π
27-
static double pi = 3.1415926535897932384626;
28-
// 长半轴
29-
static double a = 6378245.0;
30-
// 扁率
31-
static double ee = 0.00669342162296594323;
23+
static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
24+
static double pi = 3.1415926535897932384626;
25+
static double a = 6378245.0;
26+
static double ee = 0.00669342162296594323;
3227

33-
/**
34-
* 百度坐标系(BD-09)转WGS坐标
35-
*
36-
* @param lng 百度坐标纬度
37-
* @param lat 百度坐标经度
38-
* @return WGS84坐标数组
39-
*/
40-
public static double[] bd09towgs84(double lng, double lat) {
41-
double[] gcj = bd09togcj02(lng, lat);
42-
double[] wgs84 = gcj02towgs84(gcj[0], gcj[1]);
43-
return wgs84;
44-
}
28+
public static double[] bd09towgs84(double lng, double lat) {
29+
double[] gcj = bd09togcj02(lng, lat);
30+
double[] wgs84 = gcj02towgs84(gcj[0], gcj[1]);
31+
return wgs84;
32+
}
4533

46-
/**
47-
* WGS坐标转百度坐标系(BD-09)
48-
*
49-
* @param lng WGS84坐标系的经度
50-
* @param lat WGS84坐标系的纬度
51-
* @return 百度坐标数组
52-
*/
53-
public static double[] wgs84tobd09(double lng, double lat) {
54-
double[] gcj = wgs84togcj02(lng, lat);
55-
double[] bd09 = gcj02tobd09(gcj[0], gcj[1]);
56-
return bd09;
57-
}
34+
public static double[] wgs84tobd09(double lng, double lat) {
35+
double[] gcj = wgs84togcj02(lng, lat);
36+
double[] bd09 = gcj02tobd09(gcj[0], gcj[1]);
37+
return bd09;
38+
}
5839

59-
/**
60-
* 火星坐标系(GCJ-02)转百度坐标系(BD-09)
61-
*
62-
* @see <谷歌、高德——>百度
63-
* @param lng 火星坐标经度
64-
* @param lat 火星坐标纬度
65-
* @return 百度坐标数组
66-
*/
67-
public static double[] gcj02tobd09(double lng, double lat) {
68-
double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_pi);
69-
double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_pi);
70-
double bd_lng = z * Math.cos(theta) + 0.0065;
71-
double bd_lat = z * Math.sin(theta) + 0.006;
72-
return new double[] { bd_lng, bd_lat };
73-
}
40+
public static double[] gcj02tobd09(double lng, double lat) {
41+
double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_pi);
42+
double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_pi);
43+
double bd_lng = z * Math.cos(theta) + 0.0065;
44+
double bd_lat = z * Math.sin(theta) + 0.006;
45+
return new double[]{bd_lng, bd_lat};
46+
}
7447

75-
/**
76-
* 百度坐标系(BD-09)转火星坐标系(GCJ-02)
77-
*
78-
* @see <百度——>谷歌、高德
79-
* @param bd_lon 百度坐标纬度
80-
* @param bd_lat 百度坐标经度
81-
* @return 火星坐标数组
82-
*/
83-
public static double[] bd09togcj02(double bd_lon, double bd_lat) {
84-
double x = bd_lon - 0.0065;
85-
double y = bd_lat - 0.006;
86-
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
87-
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
88-
double gg_lng = z * Math.cos(theta);
89-
double gg_lat = z * Math.sin(theta);
90-
return new double[] { gg_lng, gg_lat };
91-
}
48+
public static double[] bd09togcj02(double bd_lon, double bd_lat) {
49+
double x = bd_lon - 0.0065;
50+
double y = bd_lat - 0.006;
51+
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
52+
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
53+
double gg_lng = z * Math.cos(theta);
54+
double gg_lat = z * Math.sin(theta);
55+
return new double[]{gg_lng, gg_lat};
56+
}
9257

93-
/**
94-
* WGS84转GCJ02(火星坐标系)
95-
*
96-
* @param lng WGS84坐标系的经度
97-
* @param lat WGS84坐标系的纬度
98-
* @return 火星坐标数组
99-
*/
100-
public static double[] wgs84togcj02(double lng, double lat) {
101-
if (out_of_china(lng, lat)) {
102-
return new double[] { lng, lat };
103-
}
104-
double dlat = transformlat(lng - 105.0, lat - 35.0);
105-
double dlng = transformlng(lng - 105.0, lat - 35.0);
106-
double radlat = lat / 180.0 * pi;
107-
double magic = Math.sin(radlat);
108-
magic = 1 - ee * magic * magic;
109-
double sqrtmagic = Math.sqrt(magic);
110-
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);
111-
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);
112-
double mglat = lat + dlat;
113-
double mglng = lng + dlng;
114-
return new double[] { mglng, mglat };
115-
}
58+
public static double[] wgs84togcj02(double lng, double lat) {
59+
if (out_of_china(lng, lat)) {
60+
return new double[]{lng, lat};
61+
}
62+
double dlat = transformlat(lng - 105.0, lat - 35.0);
63+
double dlng = transformlng(lng - 105.0, lat - 35.0);
64+
double radlat = lat / 180.0 * pi;
65+
double magic = Math.sin(radlat);
66+
magic = 1 - ee * magic * magic;
67+
double sqrtmagic = Math.sqrt(magic);
68+
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);
69+
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);
70+
double mglat = lat + dlat;
71+
double mglng = lng + dlng;
72+
return new double[]{mglng, mglat};
73+
}
11674

117-
/**
118-
* GCJ02(火星坐标系)转GPS84
119-
*
120-
* @param lng 火星坐标系的经度
121-
* @param lat 火星坐标系纬度
122-
* @return WGS84坐标数组
123-
*/
124-
public static double[] gcj02towgs84(double lng, double lat) {
125-
if (out_of_china(lng, lat)) {
126-
return new double[] { lng, lat };
127-
}
128-
double dlat = transformlat(lng - 105.0, lat - 35.0);
129-
double dlng = transformlng(lng - 105.0, lat - 35.0);
130-
double radlat = lat / 180.0 * pi;
131-
double magic = Math.sin(radlat);
132-
magic = 1 - ee * magic * magic;
133-
double sqrtmagic = Math.sqrt(magic);
134-
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);
135-
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);
136-
double mglat = lat + dlat;
137-
double mglng = lng + dlng;
138-
return new double[] { lng * 2 - mglng, lat * 2 - mglat };
139-
}
75+
public static double[] gcj02towgs84(double lng, double lat) {
76+
if (out_of_china(lng, lat)) {
77+
return new double[]{lng, lat};
78+
}
79+
double dlat = transformlat(lng - 105.0, lat - 35.0);
80+
double dlng = transformlng(lng - 105.0, lat - 35.0);
81+
double radlat = lat / 180.0 * pi;
82+
double magic = Math.sin(radlat);
83+
magic = 1 - ee * magic * magic;
84+
double sqrtmagic = Math.sqrt(magic);
85+
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);
86+
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);
87+
double mglat = lat + dlat;
88+
double mglng = lng + dlng;
89+
return new double[]{lng * 2 - mglng, lat * 2 - mglat};
90+
}
14091

141-
/**
142-
* 纬度转换
143-
*
144-
* @param lng
145-
* @param lat
146-
* @return
147-
*/
148-
public static double transformlat(double lng, double lat) {
149-
double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
150-
ret += (20.0 * Math.sin(6.0 * lng * pi) + 20.0 * Math.sin(2.0 * lng * pi)) * 2.0 / 3.0;
151-
ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0;
152-
ret += (160.0 * Math.sin(lat / 12.0 * pi) + 320 * Math.sin(lat * pi / 30.0)) * 2.0 / 3.0;
153-
return ret;
154-
}
92+
public static double transformlat(double lng, double lat) {
93+
double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
94+
ret += (20.0 * Math.sin(6.0 * lng * pi) + 20.0 * Math.sin(2.0 * lng * pi)) * 2.0 / 3.0;
95+
ret += (20.0 * Math.sin(lat * pi) + 40.0 * Math.sin(lat / 3.0 * pi)) * 2.0 / 3.0;
96+
ret += (160.0 * Math.sin(lat / 12.0 * pi) + 320 * Math.sin(lat * pi / 30.0)) * 2.0 / 3.0;
97+
return ret;
98+
}
15599

156-
/**
157-
* 经度转换
158-
*
159-
* @param lng
160-
* @param lat
161-
* @return
162-
*/
163-
public static double transformlng(double lng, double lat) {
164-
double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
165-
ret += (20.0 * Math.sin(6.0 * lng * pi) + 20.0 * Math.sin(2.0 * lng * pi)) * 2.0 / 3.0;
166-
ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0;
167-
ret += (150.0 * Math.sin(lng / 12.0 * pi) + 300.0 * Math.sin(lng / 30.0 * pi)) * 2.0 / 3.0;
168-
return ret;
169-
}
100+
public static double transformlng(double lng, double lat) {
101+
double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
102+
ret += (20.0 * Math.sin(6.0 * lng * pi) + 20.0 * Math.sin(2.0 * lng * pi)) * 2.0 / 3.0;
103+
ret += (20.0 * Math.sin(lng * pi) + 40.0 * Math.sin(lng / 3.0 * pi)) * 2.0 / 3.0;
104+
ret += (150.0 * Math.sin(lng / 12.0 * pi) + 300.0 * Math.sin(lng / 30.0 * pi)) * 2.0 / 3.0;
105+
return ret;
106+
}
170107

171-
/**
172-
* 判断是否在国内,不在国内不做偏移
173-
*
174-
* @param lng
175-
* @param lat
176-
* @return
177-
*/
178-
public static boolean out_of_china(double lng, double lat) {
179-
if (lng < 72.004 || lng > 137.8347) {
180-
return true;
181-
} else if (lat < 0.8293 || lat > 55.8271) {
182-
return true;
183-
}
184-
return false;
185-
}
108+
public static boolean out_of_china(double lng, double lat) {
109+
if (lng < 72.004 || lng > 137.8347) {
110+
return true;
111+
} else if (lat < 0.8293 || lat > 55.8271) {
112+
return true;
113+
}
114+
return false;
115+
}
186116
}

library/src/main/java/com/code19/library/DeviceUtils.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -363,15 +363,5 @@ public static String[] getGoogleAccounts(Context ctx) {
363363
return null;
364364
}
365365

366-
public static boolean isRunningOnEmulator() {
367-
return Build.BRAND.contains("generic")
368-
|| Build.DEVICE.contains("generic")
369-
|| Build.PRODUCT.contains("sdk")
370-
|| Build.HARDWARE.contains("goldfish")
371-
|| Build.MANUFACTURER.contains("Genymotion")
372-
|| Build.PRODUCT.contains("vbox86p")
373-
|| Build.DEVICE.contains("vbox86p")
374-
|| Build.HARDWARE.contains("vbox86");
375-
}
376366

377367
}

0 commit comments

Comments
 (0)