Geohash的最简单的解释就是:将一个经纬度信息,转换成一个可以排序,可以比较的字符串编码
import javaioFile;
import javaioFileInputStream;
import javautilBitSet;
import javautilHashMap;
public class Geohash {
private static int numbits = 6 5;
final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
final static HashMap<Character, Integer> lookup = new HashMap<Character, Integer>();
static {
int i = 0;
for (char c : digits)
lookupput(c, i++);
}
public static void main(String[] args) throws Exception{
Systemoutprintln(new Geohash()encode(45, 125));
}
public double[] decode(String geohash) {
StringBuilder buffer = new StringBuilder();
for (char c : geohashtoCharArray()) {
int i = lookupget(c) + 32;
bufferappend( IntegertoString(i, 2)substring(1) );
}
BitSet lonset = new BitSet();
BitSet latset = new BitSet();
//even bits
int j =0;
for (int i=0; i< numbits2;i+=2) {
boolean isSet = false;
if ( i < bufferlength() )
isSet = buffercharAt(i) == '1';
lonsetset(j++, isSet);
}
//odd bits
j=0;
for (int i=1; i< numbits2;i+=2) {
boolean isSet = false;
if ( i < bufferlength() )
isSet = buffercharAt(i) == '1';
latsetset(j++, isSet);
}
double lon = decode(lonset, -180, 180);
double lat = decode(latset, -90, 90);
return new double[] {lat, lon};
}
private double decode(BitSet bs, double floor, double ceiling) {
double mid = 0;
for (int i=0; i<bslength(); i++) {
mid = (floor + ceiling) / 2;
if (bsget(i))
floor = mid;
else
ceiling = mid;
}
return mid;
}
public String encode(double lat, double lon) {
BitSet latbits = getBits(lat, -90, 90);
BitSet lonbits = getBits(lon, -180, 180);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < numbits; i++) {
bufferappend( (lonbitsget(i))'1':'0');
bufferappend( (latbitsget(i))'1':'0');
}
return base32(LongparseLong(buffertoString(), 2));
}
private BitSet getBits(double lat, double floor, double ceiling) {
BitSet buffer = new BitSet(numbits);
for (int i = 0; i < numbits; i++) {
double mid = (floor + ceiling) / 2;
if (lat >= mid) {
bufferset(i);
floor = mid;
} else {
ceiling = mid;
}
}
return buffer;
}
public static String base32(long i) {
char[] buf = new char[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative)
i = -i;
while (i <= -32) {
buf[charPos--] = digits[(int) (-(i % 32))];
i /= 32;
}
buf[charPos] = digits[(int) (-i)];
if (negative)
buf[--charPos] = '-';
return new String(buf, charPos, (65 - charPos));
}
}
import javaioFile;
import javaioFileInputStream;
import javautilBitSet;
import javautilHashMap;
public class Geohash {
private static int numbits = 6 5;
final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
final static HashMap<Character, Integer> lookup = new HashMap<Character, Integer>();
static {
int i = 0;
for (char c : digits)
lookupput(c, i++);
}
public static void main(String[] args) throws Exception{
Systemoutprintln(new Geohash()encode(45, 125));
}
public double[] decode(String geohash) {
StringBuilder buffer = new StringBuilder();
for (char c : geohashtoCharArray()) {
int i = lookupget(c) + 32;
bufferappend( IntegertoString(i, 2)substring(1) );
}
BitSet lonset = new BitSet();
BitSet latset = new BitSet();
//even bits
int j =0;
for (int i=0; i< numbits2;i+=2) {
boolean isSet = false;
if ( i < bufferlength() )
isSet = buffercharAt(i) == '1';
lonsetset(j++, isSet);
}
//odd bits
j=0;
for (int i=1; i< numbits2;i+=2) {
boolean isSet = false;
if ( i < bufferlength() )
isSet = buffercharAt(i) == '1';
latsetset(j++, isSet);
}
double lon = decode(lonset, -180, 180);
double lat = decode(latset, -90, 90);
return new double[] {lat, lon};
}
private double decode(BitSet bs, double floor, double ceiling) {
double mid = 0;
for (int i=0; i<bslength(); i++) {
mid = (floor + ceiling) / 2;
if (bsget(i))
floor = mid;
else
ceiling = mid;
}
return mid;
}
public String encode(double lat, double lon) {
BitSet latbits = getBits(lat, -90, 90);
BitSet lonbits = getBits(lon, -180, 180);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < numbits; i++) {
bufferappend( (lonbitsget(i))'1':'0');
bufferappend( (latbitsget(i))'1':'0');
}
return base32(LongparseLong(buffertoString(), 2));
}
private BitSet getBits(double lat, double floor, double ceiling) {
BitSet buffer = new BitSet(numbits);
for (int i = 0; i < numbits; i++) {
double mid = (floor + ceiling) / 2;
if (lat >= mid) {
bufferset(i);
floor = mid;
} else {
ceiling = mid;
}
}
return buffer;
}
public static String base32(long i) {
char[] buf = new char[65];
int charPos = 64;
boolean negative = (i < 0);
if (!negative)
i = -i;
while (i <= -32) {
buf[charPos--] = digits[(int) (-(i % 32))];
i /= 32;
}
buf[charPos] = digits[(int) (-i)];
if (negative)
buf[--charPos] = '-';
return new String(buf, charPos, (65 - charPos));
}
}
TYYQ
来自专栏公开数据集
1、帕尔默企鹅数据集
背景描述
由Kristen Gorman博士和南极洲LTER的帕尔默科考站共同创建,包含344只企鹅的数据。
数据说明
species: 三个企鹅种类:阿德利 巴布亚 帽带
culmen_length_mm: 鸟的嘴峰长度
culmen_depth_mm: 鸟的嘴峰深度
flipper_length_mm: 脚掌长度
body_mass_g: 体重
island: 岛屿的名字
sex: 企鹅的性别
下载链接:帕尔默企鹅数据集
2、MNIST数据集
经典的手写数字数据集,用于图像分类和识别练习。
21 中文数字MNIST
背景描述
由100名中国人亲自用黑笔手写的15个数字
数据说明
15000张 300x300分辨率 64x64大小的
下载链接:中文数字MNIST
22 Fashion MNIST
背景描述
用于代替原始的MNIST数据
数据说明
包含 60,000 个样本的训练集和一个 10,000 个服装图像的测试集,所有图像都经过尺寸归一化和居中,图像的大小也固定为 28×28
下载链接:Fashion MNIST
3、共享单车
21 国内共享单车数据集
背景描述
共享单车数据集
数据说明
训练集(traincsv)和测试集 共近500万条出行记录:
orderid 订单号 userid 用户ID bikeid 车辆ID biketype 车辆类型 starttime 骑行起始日期时间 geohashed_start_loc 骑行起始区块位置 geohashed_end_loc 骑行目的地区块位置
注意:地理位置通过Geohash加密,可以通过开源的方法获得经纬度数据(testcsv)
下载链接:国内共享单车数据集
22 共享单车需求
背景描述
华盛顿特区“首都自行车共享计划”,根据自行车共享和租赁系统获取的数据
数据说明
骑行信息:时间、出发地点、到达地点、经过时间、租借总长;
天气信息:当天温度(摄氏度)、风速、湿度;
时间信息:季节、工作日、周末、假期;
下载链接:共享单车需求
4、猫狗
包含2千张(猫与狗各1千张),用于机器学习
下载链接:猫狗训练集共2000张
5、威斯康星州乳腺癌(诊断)数据集
背景描述
数据通过处理乳房肿块的细针穿刺(FNA)的数字化图像提取出来
数据说明
由 569 个样本组成,包括 357 个良性样本和 212 个恶性样本。这个数据集中有三类特征,其中实值特征最有趣。它们是从数字化图像中计算出来的,包含有关区域、细胞半径、纹理等信息
下载链接:威斯康星州乳腺癌(诊断)数据集
6、葡萄酒数据集
61 红葡萄酒
背景描述
数据取自葡萄牙一种红酒品类:Vinho Verde
数据说明
包含11种特征与最终质量评分
下载链接:红酒质量数据
62 白葡萄酒
背景描述
来自葡萄牙Vinho Verde产地的白葡萄酒
数据说明
包含葡萄酒的氯化物、柠檬酸、硫酸盐、酒精度、残留糖份等其他属性数据
下载链接:白葡萄酒质量
7、Twitter推文的情绪分析
背景描述
情绪分析用于监控和了解客户反馈
数据说明
包含了使用 Twitter API 提取的 1,600,000 条推文
下载链接:Twitter推文的情绪分析数据集
三种方式进行定位,获取用户位置,分别是基于基站定位, 网络定位,GPS定位。
1基站定位(passive):这是基于网络基站进行定位的,定位的精确度在几十米到几千米不等,在城市中基站覆盖率比较高,推荐使用基站定位,如果是在郊区,基站相距较远,基站的覆盖没有城里好,定位的误差比较大。如果在郊区不推荐使用基站定位。
2网络定位:wifi定位,网络定位
3GPS定位:与卫星进行通信。手机中嵌入了GPS模块(精简版的A-GPS),通过A-GPS搜索卫星, 获取经纬度。使用GPS的弊端是:必须站在空旷的地方,头顶对着天空,如果云层厚了,也会受到一定的影响。精确度:10-50米
扩展知识:
使用Android是定位必备的权限:< uses-permission android:name= " androidpermissionACCESS_FINE_LOCATION " /> //精确定位
<uses-permission android:name= "androidpermissionACCESS_MOCK_LOCATION" /> //模拟器
<uses-permission android:name= "androidpermissionACCESS_COARSE_LOCATION" /> //粗糙定位
//获取定位管理对象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lmgetAllProviders();//获取所有的位置提供者,一般三种
Criteria criteria=new Criteria();//查询条件,如果设置了海拔,则定位方式只能是GPS;
criteriasetCostAllowed(true);//是否产生开销,比如流量费
String provider=lmgetBaseProvider(criteria,true)//获取最好的位置提供者,第二个参数为true,表示只获取那些被打开的位置提供者
lmrequestLocationUpdates(provier,0,0,new LocationListener(){});//获取位置。第二个参数表示每隔多少时间返回一次数据,第三个参数表示被定位的物体移动每次多少米返回一次数据。
private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
@Override
public void onLocationChanged(Location location) {
System outprintln( "服务中位置监听发送了变化了" );
float accuracy = locationgetAccuracy(); // 精确度
double altitude = locationgetAltitude(); // 海拔
double latitude = locationgetLatitude(); // 纬度
double longitude = locationgetLongitude(); // 经度
String locationInfo = "jingdu:" + longitude + ",weidu:" + latitude + ",haiba:" + altitude + ",jingquedu:" + accuracy;
Editor edit = spedit();
editputString( "location", locationInfo);
editcommit();
}
} public void onProviderDisabled(String provider) {
}
以上就是关于MongoDB和PostGIS的Geohash是怎么计算的全部的内容,包括:MongoDB和PostGIS的Geohash是怎么计算的、威斯康星乳腺癌数据集下载哪一个、android怎么获取用户所在地 csdn等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)