Skip to content

Commit c383e0d

Browse files
author
Cameron
committed
turf example added to testapp
1 parent f82402a commit c383e0d

6 files changed

Lines changed: 253 additions & 4 deletions

File tree

libandroid/app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@
7575
android:label="Map Matching"
7676
android:parentActivityName=".MainActivity"
7777
android:theme="@style/AppTheme.NoActionBar" />
78+
<activity
79+
android:name=".utils.TurfCalculationsActivity"
80+
android:label="Map Matching"
81+
android:parentActivityName=".MainActivity"
82+
android:theme="@style/AppTheme.NoActionBar" />
7883

7984
<!--
8085
Service to asynchronously fetch a location address using a Geocoder. Setting the

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

Lines changed: 3 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;
@@ -26,6 +23,7 @@
2623
import com.mapbox.services.android.testapp.staticimage.StaticImageActivity;
2724
import com.mapbox.services.android.testapp.utils.MapMatchingActivity;
2825
import com.mapbox.services.android.testapp.utils.SimplifyPolylineActivity;
26+
import com.mapbox.services.android.testapp.utils.TurfCalculationsActivity;
2927
import com.mapbox.services.android.utils.PermissionsUtils;
3028

3129
import java.util.ArrayList;
@@ -54,7 +52,8 @@ public class MainActivity extends AppCompatActivity {
5452
new SampleItem("Maki icons", "", MakiIconsActivity.class),
5553
new SampleItem("Static image", "", StaticImageActivity.class),
5654
new SampleItem("Simplify polyline", "", SimplifyPolylineActivity.class),
57-
new SampleItem("Map matching", "", MapMatchingActivity.class)
55+
new SampleItem("Map matching", "", MapMatchingActivity.class),
56+
new SampleItem("Turf Calculations", "", TurfCalculationsActivity.class)
5857
));
5958

6059
@Override
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
package com.mapbox.services.android.testapp.utils;
2+
3+
import android.os.Bundle;
4+
import android.support.design.widget.Snackbar;
5+
import android.support.v7.app.AppCompatActivity;
6+
import android.support.v7.widget.Toolbar;
7+
import android.view.View;
8+
import android.widget.AdapterView;
9+
import android.widget.ArrayAdapter;
10+
import android.widget.Spinner;
11+
12+
import com.mapbox.mapboxsdk.annotations.Marker;
13+
import com.mapbox.mapboxsdk.annotations.MarkerViewOptions;
14+
import com.mapbox.mapboxsdk.geometry.LatLng;
15+
import com.mapbox.mapboxsdk.maps.MapView;
16+
import com.mapbox.mapboxsdk.maps.MapboxMap;
17+
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
18+
import com.mapbox.services.android.testapp.R;
19+
import com.mapbox.services.android.testapp.Utils;
20+
import com.mapbox.services.commons.geojson.Geometry;
21+
import com.mapbox.services.commons.geojson.LineString;
22+
import com.mapbox.services.commons.geojson.Point;
23+
import com.mapbox.services.commons.models.Position;
24+
import com.mapbox.services.commons.turf.TurfConstants;
25+
import com.mapbox.services.commons.turf.TurfException;
26+
import com.mapbox.services.commons.turf.TurfMeasurement;
27+
import com.mapbox.services.commons.turf.TurfMisc;
28+
29+
import java.util.ArrayList;
30+
import java.util.List;
31+
32+
public class TurfCalculationsActivity extends AppCompatActivity {
33+
34+
private MapView mapView;
35+
private MapboxMap map;
36+
37+
private Marker cadillacHotel;
38+
private Marker horizonAve;
39+
private Marker westminsterAve;
40+
41+
private Position cadillacHotelPosition = Position.fromCoordinates(-118.479852, 33.993898);
42+
private Position horizionAvePosition = Position.fromCoordinates(-118.474681, 33.988071);
43+
private Position westminsterAvePosition = Position.fromCoordinates(-118.470658, 33.991861);
44+
45+
private View container;
46+
47+
48+
@Override
49+
protected void onCreate(Bundle savedInstanceState) {
50+
super.onCreate(savedInstanceState);
51+
setContentView(R.layout.activity_utils_turf_calculations);
52+
53+
container = findViewById(R.id.turf_calculation_map_container);
54+
55+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
56+
setSupportActionBar(toolbar);
57+
58+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
59+
60+
ArrayAdapter<CharSequence> turfCalculationsAdapter = ArrayAdapter.createFromResource(TurfCalculationsActivity.this, R.array.turf_calculation_items, android.R.layout.simple_spinner_item);
61+
turfCalculationsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
62+
Spinner turfCalculation = (Spinner) findViewById(R.id.turf_calculation_spinner);
63+
turfCalculation.setAdapter(turfCalculationsAdapter);
64+
turfCalculation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
65+
@Override
66+
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
67+
switch (position) {
68+
case 0:
69+
// select one
70+
break;
71+
case 1:
72+
double bearing = TurfMeasurement.bearing(Point.fromCoordinates(cadillacHotelPosition), Point.fromCoordinates(horizionAvePosition));
73+
Snackbar.make(container, "Bearing = " + bearing, Snackbar.LENGTH_INDEFINITE).show();
74+
break;
75+
case 2:
76+
try {
77+
Point result = TurfMeasurement.destination(Point.fromCoordinates(cadillacHotelPosition), 1, 45, TurfConstants.UNIT_MILES);
78+
Position resultPosition = result.getCoordinates();
79+
Snackbar.make(container, "Destination = " + resultPosition.getLatitude() + ", " + resultPosition.getLongitude(), Snackbar.LENGTH_INDEFINITE).show();
80+
} catch (TurfException e) {
81+
e.printStackTrace();
82+
}
83+
break;
84+
case 3:
85+
try {
86+
double distance = TurfMeasurement.distance(Point.fromCoordinates(cadillacHotelPosition), Point.fromCoordinates(horizionAvePosition), TurfConstants.UNIT_MILES);
87+
Snackbar.make(container, "Distance in miles= " + distance, Snackbar.LENGTH_INDEFINITE).show();
88+
} catch (TurfException e) {
89+
e.printStackTrace();
90+
}
91+
break;
92+
case 4:
93+
// TODO
94+
// TurfMeasurement.lineDistance()
95+
break;
96+
case 5:
97+
List<Position> linePoints = new ArrayList<>();
98+
linePoints.add(cadillacHotelPosition);
99+
linePoints.add(horizionAvePosition);
100+
linePoints.add(westminsterAvePosition);
101+
linePoints.add(cadillacHotelPosition);
102+
103+
LineString lineString = LineString.fromCoordinates(linePoints);
104+
105+
try {
106+
LineString slicedLine = TurfMisc.lineSlice(Point.fromCoordinates(horizionAvePosition), Point.fromCoordinates(westminsterAvePosition), lineString);
107+
//List<Position> slicedLinePoints = slicedLine.getCoordinates();
108+
109+
//for (int i = 0; i < slicedLinePoints.size(); i++) {
110+
// map.addMarker(new MarkerViewOptions().position(new LatLng(slicedLinePoints.get(i).getLatitude(), slicedLinePoints.get(i).getLongitude())));
111+
//}
112+
} catch (TurfException e) {
113+
e.printStackTrace();
114+
}
115+
break;
116+
}
117+
}
118+
119+
@Override
120+
public void onNothingSelected(AdapterView<?> parent) {
121+
122+
}
123+
});
124+
125+
mapView = (MapView) findViewById(R.id.mapView);
126+
mapView.setAccessToken(Utils.getMapboxAccessToken(this));
127+
mapView.onCreate(savedInstanceState);
128+
mapView.getMapAsync(new OnMapReadyCallback() {
129+
@Override
130+
public void onMapReady(MapboxMap mapboxMap) {
131+
map = mapboxMap;
132+
133+
cadillacHotel = mapboxMap.addMarker(new MarkerViewOptions()
134+
.position(new LatLng(33.993898, -118.479852)));
135+
136+
horizonAve = mapboxMap.addMarker(new MarkerViewOptions()
137+
.position(new LatLng(33.988071, -118.474681)));
138+
139+
westminsterAve = mapboxMap.addMarker(new MarkerViewOptions()
140+
.position(new LatLng(33.991861, -118.470658)));
141+
}
142+
});
143+
}
144+
145+
@Override
146+
public void onResume() {
147+
super.onResume();
148+
mapView.onResume();
149+
}
150+
151+
@Override
152+
public void onPause() {
153+
super.onPause();
154+
mapView.onPause();
155+
}
156+
157+
@Override
158+
public void onLowMemory() {
159+
super.onLowMemory();
160+
mapView.onLowMemory();
161+
}
162+
163+
@Override
164+
protected void onDestroy() {
165+
super.onDestroy();
166+
mapView.onDestroy();
167+
}
168+
169+
@Override
170+
protected void onSaveInstanceState(Bundle outState) {
171+
super.onSaveInstanceState(outState);
172+
mapView.onSaveInstanceState(outState);
173+
}
174+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
android:fitsSystemWindows="true"
8+
tools:context=".utils.TurfCalculationsActivity">
9+
10+
<android.support.design.widget.AppBarLayout
11+
android:layout_width="match_parent"
12+
android:layout_height="wrap_content"
13+
android:theme="@style/AppTheme.AppBarOverlay">
14+
15+
<android.support.v7.widget.Toolbar
16+
android:id="@+id/toolbar"
17+
android:layout_width="match_parent"
18+
android:layout_height="?attr/actionBarSize"
19+
android:background="?attr/colorPrimary"
20+
app:popupTheme="@style/AppTheme.PopupOverlay">
21+
22+
<LinearLayout
23+
android:layout_width="match_parent"
24+
android:layout_height="wrap_content"
25+
android:weightSum="2">
26+
27+
<Spinner
28+
android:id="@+id/turf_calculation_spinner"
29+
android:layout_width="0dp"
30+
android:layout_height="wrap_content"
31+
android:layout_marginEnd="8dp"
32+
android:layout_marginRight="8dp"
33+
android:layout_weight="1" />
34+
35+
</LinearLayout>
36+
37+
</android.support.v7.widget.Toolbar>
38+
39+
</android.support.design.widget.AppBarLayout>
40+
41+
<include layout="@layout/content_utils_turf_calculations" />
42+
43+
</android.support.design.widget.CoordinatorLayout>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
tools:context=".utils.MapMatchingActivity"
8+
android:id="@+id/turf_calculation_map_container">
9+
10+
<com.mapbox.mapboxsdk.maps.MapView
11+
android:id="@+id/mapView"
12+
android:layout_width="match_parent"
13+
android:layout_height="match_parent"
14+
mapbox:center_latitude="33.991986"
15+
mapbox:center_longitude="-118.475743"
16+
mapbox:style_url="mapbox://styles/mapbox/streets-v9"
17+
mapbox:zoom="14.5" />
18+
19+
</android.support.design.widget.CoordinatorLayout>

libandroid/app/src/main/res/values/strings.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,13 @@
2222
<string name="service_not_available">Sorry, the service is not available</string>
2323
<string name="invalid_lat_long_used">Invalid latitude or longitude used</string>
2424

25+
<string-array name="turf_calculation_items">
26+
<item>item 1</item>
27+
<item>Bearing</item>
28+
<item>Destination</item>
29+
<item>Distance</item>
30+
<item>Line distance</item>
31+
<item>item 6</item>
32+
</string-array>
33+
2534
</resources>

0 commit comments

Comments
 (0)