资源简介
传统数据库索引
存储用户登入字段主要包括 userId,lat,lng。分别代表用户 ID、最近一次 check-in 的经度、纬度。lat/lng 建立复合索引。
然后通过手机的定位,得到自己的位置,比如记为 myLat,myLng。
代码如下,先做一个计算,算出 1km 所对应的经纬度范围:
double range = 180 / Math.PI * 1 / 6372.797; //里面的 1 就代表搜索 1km 之内,单位km
double lngR = range / Math.cos(myLat * Math.PI / 180.0);
double maxLat = myLat range;
double minLat = myLat - range;
double maxLng = myLng lngR;
double minLng = myLng - lngR;
然后执行 SQL :
SELECT xxxx FROM checkinTable WHERE ((lat BETWEEN ? AND ?) AND (lng BETWEEN ? AND ?)) LIMIT 100
这四个问号,分别代入变量
minLat、maxLat、minLng、maxLng
然后就可以查询得到结果
但是,这样得到的结果不是有序的。
如果要排序,在程序代码(比如 app 客户端)执行。
不建议在 SQL 层上执行,因为上述的那个 SQL 是可以用到索引进行查询的,一旦引入排序后,索引就无法发挥作用,从而会影响效率。
代码片段和文件信息
package com.andieguoe.locationdemo;
import java.util.Iterator;
import android.app.Activity;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class GpsActivity extends Activity {
private LocationManager locationManager;
private GpsStatus gpsstatus;
private static final String TAG = “GpsActivity“;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gps);
// 获取到LocationManager对象
locationManager = (LocationManager) getSystemService(LOCATION_SERVIC
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-10-22 15:13 nearbydemo-master\
文件 474 2014-10-22 15:13 nearbydemo-master\.gitignore
文件 648 2014-10-22 15:13 nearbydemo-master\GETDISTANCE.sql
文件 11515 2014-10-22 15:13 nearbydemo-master\LICENSE
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\
文件 356 2014-10-22 15:13 nearbydemo-master\LocationDemo\.classpath
文件 815 2014-10-22 15:13 nearbydemo-master\LocationDemo\.project
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\.settings\
文件 173 2014-10-22 15:13 nearbydemo-master\LocationDemo\.settings\org.eclipse.jdt.core.prefs
文件 1359 2014-10-22 15:13 nearbydemo-master\LocationDemo\AndroidManifest.xm
文件 51394 2014-10-22 15:13 nearbydemo-master\LocationDemo\ic_launcher-web.png
文件 781 2014-10-22 15:13 nearbydemo-master\LocationDemo\proguard-project.txt
文件 563 2014-10-22 15:13 nearbydemo-master\LocationDemo\project.properties
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-hdpi\
文件 7658 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-hdpi\ic_launcher.png
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-mdpi\
文件 3777 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-mdpi\ic_launcher.png
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-xhdpi\
文件 12516 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-xhdpi\ic_launcher.png
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-xxhdpi\
文件 24777 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\drawable-xxhdpi\ic_launcher.png
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\layout\
文件 618 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\layout\gps.xm
文件 1218 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\layout\main.xm
文件 621 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\layout\network.xm
文件 621 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\layout\telepony.xm
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\menu\
文件 253 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\menu\main.xm
目录 0 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\values-sw600dp\
文件 195 2014-10-22 15:13 nearbydemo-master\LocationDemo\res\values-sw600dp\dimens.xm
............此处省略186个文件信息
评论
共有 条评论