我的数据库中有一些商店地址。我想要实现的是在附近的商店周围搜索用户动态获取的位置。我使用位置管理器通过Google的API成功获取了用户的lat和long。但我无法继续前进。如果有任何机构有一些想法,请指导我。
供参考,您可以参考Zomato App https://play.google.com/store/apps/details?id=com.application.zomato&hl=en中的附近功能,它具有我在我的应用中所需的相同功能。
这在许多应用程序中可能并不困难,但经过大量研究后,我没有找到解决方法的任何线索。
答案 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存储在数据库中