Skip to content

Commit 6d09165

Browse files
kyr0comann
authored andcommitted
Search range of Gyms and PokéStops equals search range for Pokémon (#215)
* - Implemented radial boxing of Gym and PokéStop scanning. Gyms and PokeStops now fit into the default search range! - Fixed regression of getPokeStops() not setting setLocation() beforehand (no issue tho because it's called after getGyms() in MainActivity -- so location was known to the API anyways) * - Render okeStops a bit smaller than Pokemon
1 parent eb3ac94 commit 6d09165

File tree

5 files changed

+80
-11
lines changed

5 files changed

+80
-11
lines changed

app/src/main/java/com/omkarmoghe/pokemap/controllers/net/NianticManager.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,9 @@ public void run() {
338338
if (mPokemonGo != null) {
339339

340340
Thread.sleep(33);
341-
EventBus.getDefault().post(new PokestopsEvent(mPokemonGo.getMap().getMapObjects().getPokestops()));
341+
mPokemonGo.setLocation(lat, longitude, alt);
342+
Thread.sleep(33);
343+
EventBus.getDefault().post(new PokestopsEvent(mPokemonGo.getMap().getMapObjects().getPokestops(), lat, longitude));
342344
}
343345

344346
} catch (LoginFailedException e) {
@@ -370,7 +372,7 @@ public void run() {
370372
Thread.sleep(33);
371373
mPokemonGo.setLocation(latitude, longitude, alt);
372374
Thread.sleep(33);
373-
EventBus.getDefault().post(new GymsEvent(mPokemonGo.getMap().getMapObjects().getGyms()));
375+
EventBus.getDefault().post(new GymsEvent(mPokemonGo.getMap().getMapObjects().getGyms(), latitude, longitude));
374376
}
375377

376378
} catch (LoginFailedException e) {

app/src/main/java/com/omkarmoghe/pokemap/models/events/GymsEvent.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
public class GymsEvent implements IEvent {
1111

1212
private Collection<FortDataOuterClass.FortData> gyms;
13+
private double lat;
14+
private double longitude;
1315

14-
public GymsEvent(Collection<FortDataOuterClass.FortData> gyms) {
16+
public GymsEvent(Collection<FortDataOuterClass.FortData> gyms, double lat, double longitude) {
1517
this.gyms = gyms;
18+
this.lat = lat;
19+
this.longitude = longitude;
1620
}
1721

1822
public Collection<FortDataOuterClass.FortData> getGyms() {
@@ -22,4 +26,20 @@ public Collection<FortDataOuterClass.FortData> getGyms() {
2226
public void setGyms(Collection<FortDataOuterClass.FortData> gyms) {
2327
this.gyms = gyms;
2428
}
29+
30+
public double getLatitude() {
31+
return lat;
32+
}
33+
34+
public void setLat(double lat) {
35+
this.lat = lat;
36+
}
37+
38+
public double getLongitude() {
39+
return longitude;
40+
}
41+
42+
public void setLongitude(double longitude) {
43+
this.longitude = longitude;
44+
}
2545
}

app/src/main/java/com/omkarmoghe/pokemap/models/events/PokestopsEvent.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
public class PokestopsEvent implements IEvent {
1111

1212
private Collection<Pokestop> pokestops;
13+
private double lat;
14+
private double longitude;
1315

14-
public PokestopsEvent(Collection<Pokestop> pokestops) {
16+
public PokestopsEvent(Collection<Pokestop> pokestops, double lat, double longitude) {
1517
this.pokestops = pokestops;
18+
this.lat = lat;
19+
this.longitude = longitude;
1620
}
1721

1822
public Collection<Pokestop> getPokestops() {
@@ -22,4 +26,20 @@ public Collection<Pokestop> getPokestops() {
2226
public void setPokestops(Collection<Pokestop> pokestops) {
2327
this.pokestops = pokestops;
2428
}
29+
30+
public double getLatitude() {
31+
return lat;
32+
}
33+
34+
public void setLat(double lat) {
35+
this.lat = lat;
36+
}
37+
38+
public double getLongitude() {
39+
return longitude;
40+
}
41+
42+
public void setLongitude(double longitude) {
43+
this.longitude = longitude;
44+
}
2545
}

app/src/main/java/com/omkarmoghe/pokemap/views/map/MapWrapperFragment.java

+33-6
Original file line numberDiff line numberDiff line change
@@ -354,17 +354,37 @@ public void onFetch(Bitmap bitmap) {
354354
}
355355
}
356356

357-
private void setPokestopsMarkers(final Collection<Pokestop> pokestops) {
357+
private float getDistanceInMeters(double lat1, double lon1, double lat2, double lon2) {
358+
359+
Location loc1 = new Location("");
360+
loc1.setLatitude(lat1);
361+
loc1.setLongitude(lon1);
362+
363+
Location loc2 = new Location("");
364+
loc2.setLatitude(lat2);
365+
loc2.setLongitude(lon2);
366+
367+
return loc1.distanceTo(loc2);
368+
}
369+
370+
private void setPokestopsMarkers(final PokestopsEvent event) {
358371
if (mGoogleMap != null) {
359372

360373
int markerSize = getResources().getDimensionPixelSize(R.dimen.pokestop_marker);
374+
Collection<Pokestop> pokestops = event.getPokestops();
361375

362376
if(pokestops != null && mPref.getShowPokestops()) {
363377
Set<String> markerKeys = pokestopsList.keySet();
364378

365379
for (final Pokestop pokestop : pokestops) {
366380

367-
if (!markerKeys.contains(pokestop.getId())) {
381+
// radial boxing
382+
float distanceFromCenterInMeters = getDistanceInMeters(
383+
event.getLatitude(), event.getLongitude(),
384+
pokestop.getLatitude(), pokestop.getLongitude()
385+
);
386+
387+
if (!markerKeys.contains(pokestop.getId()) && distanceFromCenterInMeters <= 370) {
368388

369389
RemoteImageLoader.load(
370390
pokestop.hasLurePokemon() ? lurePokeStopImageUrl : pokeStopImageUrl,
@@ -397,18 +417,25 @@ public void onFetch(Bitmap bitmap) {
397417
}
398418
}
399419

400-
private void setGymsMarkers(final Collection<FortDataOuterClass.FortData> gyms){
420+
private void setGymsMarkers(final GymsEvent event){
401421
if (mGoogleMap != null) {
402422

403423
int markerSize = getResources().getDimensionPixelSize(R.dimen.gym_marker);
424+
Collection<FortDataOuterClass.FortData> gyms = event.getGyms();
404425

405426
if(gyms != null && mPref.getShowGyms()) {
406427

407428
Set<String> markerKeys = gymsList.keySet();
408429

409430
for (final FortDataOuterClass.FortData gym : gyms) {
410431

411-
if (!markerKeys.contains(gym.getId())) {
432+
// radial boxing
433+
float distanceFromCenterInMeters = getDistanceInMeters(
434+
event.getLatitude(), event.getLongitude(),
435+
gym.getLatitude(), gym.getLongitude()
436+
);
437+
438+
if (!markerKeys.contains(gym.getId()) && distanceFromCenterInMeters <= 370) {
412439

413440
RemoteImageLoader.load(
414441
gymTeamImageUrls.get(gym.getOwnedByTeam().getNumber()),
@@ -552,7 +579,7 @@ public void onEvent(ClearMapEvent event) {
552579
*/
553580
@Subscribe(threadMode = ThreadMode.MAIN)
554581
public void onEvent(PokestopsEvent event) {
555-
setPokestopsMarkers(event.getPokestops());
582+
setPokestopsMarkers(event);
556583
}
557584

558585
/**
@@ -563,7 +590,7 @@ public void onEvent(PokestopsEvent event) {
563590
@Subscribe(threadMode = ThreadMode.MAIN)
564591
public void onEvent(GymsEvent event) {
565592

566-
setGymsMarkers(event.getGyms());
593+
setGymsMarkers(event);
567594
}
568595

569596
private void clearCatchedPokemonCircle() {

app/src/main/res/values/dimens.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<dimen name="fab_margin">16dp</dimen>
66

77
<dimen name="pokemon_marker">36dp</dimen>
8-
<dimen name="pokestop_marker">36dp</dimen>
8+
<dimen name="pokestop_marker">24dp</dimen>
99
<dimen name="gym_marker">36dp</dimen>
1010
<dimen name="pokemon_to_show_icon_size">48dip</dimen>
1111
<dimen name="pokemon_to_show_icon_margin_left">8dip</dimen>

0 commit comments

Comments
 (0)