本帖最后由 lee_ 于 2015-8-28 17:07 编辑
图表应用 >> 高级统计图 >> gis地图 >> gis地图之地址定位
1.描述
设计器中提供了两个不同的gis地图,分别是百度地图和google地图,但是由于google今年好像一直被强,导致大部分访问不了google地图,所以可能出现部分用户使用的是谷歌地图的经纬度的坐标,而因为google不能访问的原因,即使换成百度地图因为经纬度计算的差异,导致数据失去精准。
如图:
虽然看上去并没有很大差异,但是对于诸如一些需要精确定位的用户可能会比较麻烦。
2.准备工作
使用自定义函数将原始google地图的经纬度转换为百度地图的经纬度,以下是代码部分。
package com.fr.function;
import com.fr.script.AbstractFunction;
/**
* Created by pan on 2015/8/26.
*/
public class TranslateToBaidu extends AbstractFunction{
private static final double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
private static final double pi = 3.14159265358979324;
private static final double a = 6378245.0;
private static final double ee = 0.00669342162296594323;
public Object run(Object[] args){
/*获取google地图的经纬度坐标*/
double lon_lat[] = new double[2];
String []temp = null;
temp = args[0].toString().split(",");
lon_lat[0] = Double.valueOf(temp[0]);
lon_lat[1] = Double.valueOf(temp[1]);
double x = lon_lat[0], y = lon_lat[1];
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
double bd_lon = z * Math.cos(theta) + 0.0065;
double bd_lat = z * Math.sin(theta) + 0.006;
String result = String.valueOf(bd_lon)+","+String.valueOf(bd_lat);
return result;
}
}
修复之后的百度地图:
3.另外附送百度地图的经纬度转换到google地图的代码部分:double x = bd_lon - 0.0065, y = bd_lat - 0.006;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
double theta =Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
double gg_lon = z * Math.cos(theta);
double gg_lat = z * Math.sin(theta);
ps:模板内部配置部分
另外附送一个关于google地图百度地图和gps转换的文档链接:http://my.oschina.net/Thinkeryjgfn/blog/402565
|