我的数据库在android中搜索本地附近

时间:2014-09-13 08:31:28

标签: android

我的数据库中有一些商店地址。我想要实现的是在附近的商店周围搜索用户动态获取的位置。我使用位置管理器通过Google的API成功获取了用户的lat和long。但我无法继续前进。如果有任何机构有一些想法,请指导我。

供参考,您可以参考Zomato App https://play.google.com/store/apps/details?id=com.application.zomato&hl=en中的附近功能,它具有我在我的应用中所需的相同功能。

这在许多应用程序中可能并不困难,但经过大量研究后,我没有找到解决方法的任何线索。

2 个答案:

答案 0 :(得分:0)

愿这对你有所帮助。

你可以通过找到距离b / w两个位置来实现这一点。 例如,在Web服务中,您获得x,y lat-long和radius 5km。

从数据库获取所有位置并找到距离b.w x,y和位置db。如果距离<= 5km则返回用户。

Calculating distance between two points, using latitude longitude, what am I doing wrong?

答案 1 :(得分:0)

使用以下方法从您当前位置获取数据到您的数据库40英里(半径范围内):

public void getNearestHotel() {
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();

    String provider = locationManager.getBestProvider(criteria, false);

    Log.d("FlagLocation", "true");

    if (provider != null && !provider.equals("")) {
        Location location = locationManager.getLastKnownLocation(provider);
        locationManager.requestLocationUpdates(provider, 20000, 1, this);
        if (location != null) {
            double lng = location.getLongitude();
            double lat = location.getLatitude();
            double kmInLongitudeDegree = 111.320 * Math.cos(lat / 180.0
                    * Math.PI);

            double deltaLat = RADIUS / 111.1;
            double deltaLong = RADIUS / kmInLongitudeDegree;

            double minLat = lat - deltaLat;
            double maxLat = lat + deltaLat;
            double minLong = lng - deltaLong;
            double maxLong = lng + deltaLong;

            HotelHelper helper = new HotelHelper (mActivity); // I have created helper class to get data from database
            helper.open();

            hotels = helper.getLocationsInLatLongRange(minLat, maxLat,
                    minLong, maxLong);
            helper.close();

        } /*else {
            HotelHelper helper = new HotelHelper (mActivity);
            helper.open();
            hotels = helper.getAllHotels();
            helper.close();
        }*/
    } /*else {
        HotelHelper helper = new HotelHelper (mActivity);
        helper.open();
        hotels = helper.getAllHotels();
        helper.close();
    }*/
}

这里是关于如何从数据库中获取数据的方法&#34; getLocationsInLatLongRange(minLat,maxLat,                         minLong,maxLong);&#34;

(请记住,我已经将实体类创建为&#34; Hotel&#34;来自getter和setter方法)

public ArrayList<Hotel> getLocationsInLatLongRange(double minLat,
        double maxLat, double minLong, double maxLong) {
    ArrayList<Hotel> hotelLocations = new ArrayList<Hotel>();



//Here You can query on your database to get Hotels from nearby location of given range
    String query = "SELECT * " +" FROM " + DATABASE_TABLE + " where " + KEY_LATTITUDE
            + " > " + minLat + " AND " + KEY_LATTITUDE + " < " + maxLat
            + " AND " + KEY_LONGITUDE + " > " + minLong +  " AND " + KEY_LONGITUDE + " < " + maxLong
            + " GROUP BY " + KEY_CODE + " ORDER BY " + KEY_CODE;                
    Cursor c = mDb.rawQuery(query, null);
    Log.i("query", c.getCount()+"::"+query);
    if (c != null && c.moveToFirst()) {

        while (!c.isAfterLast()) {
            Airport location = new Airport();
            location.setCode(c.getString(c.getColumnIndex(KEY_CODE)));
            location.setCountry(c.getString(c.getColumnIndex(KEY_COUNTRY)));
            location.setDescription(c.getString(c.getColumnIndex(KEY_DESCRIPTION)));
            location.setLattitude(c.getString(c.getColumnIndex(KEY_LATTITUDE)));
            location.setLongitude(c.getString(c.getColumnIndex(KEY_LONGITUDE)));            
            airportLocations.add(location);
            c.moveToNext();
        }
    }
    c.close();
    return hotelLocations;
}

通过这种方式,您可以从您的数据库中获取数据,从而获得距离您当前位置约40英里的酒店的结果

首先,你必须找到酒店地址的纬度 - 你需要更新你的数据库并相应地将其lat-long存储在数据库中