Skip to content

Commit e68d766

Browse files
author
Cameron Mace
authored
Merge pull request #104 from mapbox/turf-examples
Turf example added to testapp
2 parents 5c2e4fc + b094ef7 commit e68d766

15 files changed

Lines changed: 753 additions & 5 deletions

libandroid/app/src/main/AndroidManifest.xml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,22 @@
7272
android:theme="@style/AppTheme.NoActionBar" />
7373
<activity
7474
android:name=".utils.MapMatchingActivity"
75-
android:label="Map Matching"
75+
android:label="Map matching"
76+
android:parentActivityName=".MainActivity"
77+
android:theme="@style/AppTheme.NoActionBar" />
78+
<activity
79+
android:name=".turf.TurfBearingActivity"
80+
android:label="Turf bearing"
81+
android:parentActivityName=".MainActivity"
82+
android:theme="@style/AppTheme.NoActionBar" />
83+
<activity
84+
android:name=".turf.TurfDestinationActivity"
85+
android:label="Turf destination"
86+
android:parentActivityName=".MainActivity"
87+
android:theme="@style/AppTheme.NoActionBar" />
88+
<activity
89+
android:name=".turf.TurfDistanceActivity"
90+
android:label="Turf distance"
7691
android:parentActivityName=".MainActivity"
7792
android:theme="@style/AppTheme.NoActionBar" />
7893

libandroid/app/src/main/java/com/mapbox/services/android/testapp/MainActivity.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@
88
import android.support.v7.widget.Toolbar;
99
import android.util.Log;
1010
import android.view.LayoutInflater;
11-
import android.view.Menu;
12-
import android.view.MenuItem;
1311
import android.view.View;
1412
import android.view.ViewGroup;
1513
import android.widget.TextView;
16-
import android.widget.Toast;
1714

1815
import com.mapbox.services.android.BuildConfig;
1916
import com.mapbox.services.android.testapp.directions.DirectionsV4Activity;
@@ -24,8 +21,11 @@
2421
import com.mapbox.services.android.testapp.icons.DirectionsIconsActivity;
2522
import com.mapbox.services.android.testapp.icons.MakiIconsActivity;
2623
import com.mapbox.services.android.testapp.staticimage.StaticImageActivity;
24+
import com.mapbox.services.android.testapp.turf.TurfDistanceActivity;
2725
import com.mapbox.services.android.testapp.utils.MapMatchingActivity;
2826
import com.mapbox.services.android.testapp.utils.SimplifyPolylineActivity;
27+
import com.mapbox.services.android.testapp.turf.TurfBearingActivity;
28+
import com.mapbox.services.android.testapp.turf.TurfDestinationActivity;
2929
import com.mapbox.services.android.utils.PermissionsUtils;
3030

3131
import java.util.ArrayList;
@@ -54,7 +54,10 @@ public class MainActivity extends AppCompatActivity {
5454
new SampleItem("Maki icons", "", MakiIconsActivity.class),
5555
new SampleItem("Static image", "", StaticImageActivity.class),
5656
new SampleItem("Simplify polyline", "", SimplifyPolylineActivity.class),
57-
new SampleItem("Map matching", "", MapMatchingActivity.class)
57+
new SampleItem("Map matching", "", MapMatchingActivity.class),
58+
new SampleItem("Turf bearing", "", TurfBearingActivity.class),
59+
new SampleItem("Turf destination", "", TurfDestinationActivity.class),
60+
new SampleItem("Turf distance", "", TurfDistanceActivity.class)
5861
));
5962

6063
@Override
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package com.mapbox.services.android.testapp.turf;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.NonNull;
5+
import android.support.design.widget.Snackbar;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.support.v7.widget.Toolbar;
8+
import android.view.View;
9+
10+
import com.mapbox.mapboxsdk.annotations.Marker;
11+
import com.mapbox.mapboxsdk.annotations.MarkerViewOptions;
12+
import com.mapbox.mapboxsdk.geometry.LatLng;
13+
import com.mapbox.mapboxsdk.maps.MapView;
14+
import com.mapbox.mapboxsdk.maps.MapboxMap;
15+
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
16+
import com.mapbox.services.android.testapp.R;
17+
import com.mapbox.services.android.testapp.Utils;
18+
import com.mapbox.services.commons.geojson.Point;
19+
import com.mapbox.services.commons.models.Position;
20+
import com.mapbox.services.commons.turf.TurfMeasurement;
21+
22+
public class TurfBearingActivity extends AppCompatActivity {
23+
24+
private MapView mapView;
25+
private MapboxMap map;
26+
private Marker bearingMarker;
27+
28+
private Position cadillacHotelPosition = Position.fromCoordinates(-118.479852, 33.993898);
29+
30+
private View container;
31+
32+
@Override
33+
protected void onCreate(Bundle savedInstanceState) {
34+
super.onCreate(savedInstanceState);
35+
setContentView(R.layout.activity_turf_bearing);
36+
37+
container = findViewById(R.id.turf_bearing_map_container);
38+
39+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
40+
setSupportActionBar(toolbar);
41+
42+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
43+
44+
mapView = (MapView) findViewById(R.id.mapView);
45+
mapView.setAccessToken(Utils.getMapboxAccessToken(this));
46+
mapView.onCreate(savedInstanceState);
47+
mapView.getMapAsync(new OnMapReadyCallback() {
48+
@Override
49+
public void onMapReady(MapboxMap mapboxMap) {
50+
map = mapboxMap;
51+
52+
bearing();
53+
}
54+
});
55+
}
56+
57+
@Override
58+
public void onResume() {
59+
super.onResume();
60+
mapView.onResume();
61+
}
62+
63+
@Override
64+
public void onPause() {
65+
super.onPause();
66+
mapView.onPause();
67+
}
68+
69+
@Override
70+
public void onLowMemory() {
71+
super.onLowMemory();
72+
mapView.onLowMemory();
73+
}
74+
75+
@Override
76+
protected void onDestroy() {
77+
super.onDestroy();
78+
mapView.onDestroy();
79+
}
80+
81+
@Override
82+
protected void onSaveInstanceState(Bundle outState) {
83+
super.onSaveInstanceState(outState);
84+
mapView.onSaveInstanceState(outState);
85+
}
86+
87+
private void bearing() {
88+
89+
map.addMarker(new MarkerViewOptions()
90+
.position(new LatLng(cadillacHotelPosition.getLatitude(), cadillacHotelPosition.getLongitude()))
91+
.title("point 1"));
92+
93+
Snackbar.make(container, "Click map anywhere to calculate bearing", Snackbar.LENGTH_INDEFINITE).show();
94+
95+
map.setOnMapClickListener(new MapboxMap.OnMapClickListener() {
96+
@Override
97+
public void onMapClick(@NonNull LatLng point) {
98+
if (bearingMarker != null) map.removeMarker(bearingMarker);
99+
100+
bearingMarker = map.addMarker(new MarkerViewOptions()
101+
.position(point)
102+
.title("point 2"));
103+
104+
double bearing = TurfMeasurement.bearing(Point.fromCoordinates(cadillacHotelPosition), Point.fromCoordinates(Position.fromCoordinates(point.getLongitude(), point.getLatitude())));
105+
Snackbar.make(container, "Bearing = " + bearing, Snackbar.LENGTH_INDEFINITE).show();
106+
}
107+
});
108+
}
109+
}
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package com.mapbox.services.android.testapp.turf;
2+
3+
import android.app.Dialog;
4+
import android.os.Bundle;
5+
import android.support.design.widget.FloatingActionButton;
6+
import android.support.design.widget.Snackbar;
7+
import android.support.v7.app.AppCompatActivity;
8+
import android.support.v7.widget.Toolbar;
9+
import android.view.View;
10+
import android.widget.Button;
11+
import android.widget.EditText;
12+
import android.widget.Spinner;
13+
import android.widget.Toast;
14+
15+
import com.mapbox.mapboxsdk.annotations.Marker;
16+
import com.mapbox.mapboxsdk.annotations.MarkerViewOptions;
17+
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
18+
import com.mapbox.mapboxsdk.geometry.LatLng;
19+
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
20+
import com.mapbox.mapboxsdk.maps.MapView;
21+
import com.mapbox.mapboxsdk.maps.MapboxMap;
22+
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
23+
import com.mapbox.services.android.testapp.R;
24+
import com.mapbox.services.android.testapp.Utils;
25+
import com.mapbox.services.commons.geojson.Point;
26+
import com.mapbox.services.commons.models.Position;
27+
import com.mapbox.services.commons.turf.TurfConstants;
28+
import com.mapbox.services.commons.turf.TurfException;
29+
import com.mapbox.services.commons.turf.TurfMeasurement;
30+
31+
public class TurfDestinationActivity extends AppCompatActivity {
32+
33+
private MapView mapView;
34+
private MapboxMap map;
35+
private Marker destinationMarker;
36+
37+
private Position cadillacHotelPosition = Position.fromCoordinates(-118.479852, 33.993898);
38+
39+
private View container;
40+
41+
@Override
42+
protected void onCreate(Bundle savedInstanceState) {
43+
super.onCreate(savedInstanceState);
44+
setContentView(R.layout.activity_turf_destination);
45+
46+
container = findViewById(R.id.turf_destination_container);
47+
48+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
49+
setSupportActionBar(toolbar);
50+
51+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
52+
53+
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.turf_destination_fab);
54+
if (fab != null)
55+
fab.setOnClickListener(new View.OnClickListener() {
56+
@Override
57+
public void onClick(View v) {
58+
if (map != null) destination();
59+
}
60+
});
61+
62+
mapView = (MapView) findViewById(R.id.mapView);
63+
mapView.setAccessToken(Utils.getMapboxAccessToken(this));
64+
mapView.onCreate(savedInstanceState);
65+
mapView.getMapAsync(new OnMapReadyCallback() {
66+
@Override
67+
public void onMapReady(MapboxMap mapboxMap) {
68+
map = mapboxMap;
69+
destination();
70+
}
71+
});
72+
}
73+
74+
@Override
75+
public void onResume() {
76+
super.onResume();
77+
mapView.onResume();
78+
}
79+
80+
@Override
81+
public void onPause() {
82+
super.onPause();
83+
mapView.onPause();
84+
}
85+
86+
@Override
87+
public void onLowMemory() {
88+
super.onLowMemory();
89+
mapView.onLowMemory();
90+
}
91+
92+
@Override
93+
protected void onDestroy() {
94+
super.onDestroy();
95+
mapView.onDestroy();
96+
}
97+
98+
@Override
99+
protected void onSaveInstanceState(Bundle outState) {
100+
super.onSaveInstanceState(outState);
101+
mapView.onSaveInstanceState(outState);
102+
}
103+
104+
private void destination() {
105+
106+
map.addMarker(new MarkerViewOptions()
107+
.position(new LatLng(cadillacHotelPosition.getLatitude(), cadillacHotelPosition.getLongitude()))
108+
.title("point 1"));
109+
110+
// custom dialog
111+
final Dialog dialog = new Dialog(TurfDestinationActivity.this);
112+
dialog.setContentView(R.layout.layout_turf_destination_dialog);
113+
114+
final EditText distanceInput = (EditText) dialog.findViewById(R.id.turf_destination_distance_input);
115+
final EditText bearingInput = (EditText) dialog.findViewById(R.id.turf_destination_bearing_input);
116+
final Spinner distanceUnitsSpinner = (Spinner) dialog.findViewById(R.id.turf_destination_unit_spinner);
117+
Button calculateButton = (Button) dialog.findViewById(R.id.turf_destination_calculate_button);
118+
if (calculateButton != null)
119+
calculateButton.setOnClickListener(new View.OnClickListener() {
120+
@Override
121+
public void onClick(View v) {
122+
double distance;
123+
double bearing;
124+
125+
126+
if (distanceInput.getText().length() != 0) {
127+
distance = Double.parseDouble(distanceInput.getText().toString());
128+
} else {
129+
Toast.makeText(TurfDestinationActivity.this, "missing distance value", Toast.LENGTH_LONG).show();
130+
return;
131+
}
132+
133+
if (bearingInput.getText().length() != 0) {
134+
bearing = Double.parseDouble(bearingInput.getText().toString());
135+
} else {
136+
Toast.makeText(TurfDestinationActivity.this, "missing bearing value", Toast.LENGTH_LONG).show();
137+
return;
138+
}
139+
try {
140+
Point result = TurfMeasurement.destination(Point.fromCoordinates(cadillacHotelPosition), distance, bearing, distanceUnitsSpinner.getSelectedItem().toString());
141+
Position resultPosition = result.getCoordinates();
142+
if (destinationMarker != null) map.removeMarker(destinationMarker);
143+
destinationMarker = map.addMarker(new MarkerViewOptions()
144+
.position(new LatLng(result.getCoordinates().getLatitude(), result.getCoordinates().getLongitude()))
145+
.title("destination"));
146+
LatLngBounds latLngBounds = new LatLngBounds.Builder()
147+
.include(new LatLng(cadillacHotelPosition.getLatitude(), cadillacHotelPosition.getLongitude()))
148+
.include(new LatLng(resultPosition.getLatitude(), resultPosition.getLongitude()))
149+
.build();
150+
151+
map.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 80, 160, 80, 160), 1000);
152+
153+
Snackbar.make(container, "Destination = " + resultPosition.getLatitude() + ", " + resultPosition.getLongitude(), Snackbar.LENGTH_INDEFINITE).show();
154+
} catch (TurfException e) {
155+
e.printStackTrace();
156+
}
157+
158+
dialog.dismiss();
159+
160+
}
161+
});
162+
163+
dialog.show();
164+
}
165+
}

0 commit comments

Comments
 (0)