import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import androidx.appcompat.app.AppCompatActivity;
import com.esri.arcgisruntime.geometry.GeometryEngine;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.PointCollection;
import com.esri.arcgisruntime.geometry.Polygon;
import com.esri.arcgisruntime.geometry.ProximityResult;
import com.esri.arcgisruntime.geometry.SpatialReferences;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
import java.util.Arrays;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.mapView)
MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5);
ButterKnife.bind(this);
PointCollection polygonPoints = new PointCollection(SpatialReferences.getWebMercator());
polygonPoints.addAll(Arrays.asList(
new Point(-5991501.677830, 5599295.131468),
new Point(-6928550.398185, 2087936.739807),
new Point(-3149463.800709, 1840803.011362),
new Point(-1563689.043184, 3714900.452072),
new Point(-3180355.516764, 5619889.608838)
));
Polygon polygon = new Polygon(polygonPoints);
SimpleLineSymbol polygonOutlineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GREEN, 2f);
SimpleFillSymbol polygonFillSymbol =
new SimpleFillSymbol(SimpleFillSymbol.Style.FORWARD_DIAGONAL, Color.GREEN, polygonOutlineSymbol);
Graphic polygonGraphic = new Graphic(polygon, polygonFillSymbol);
Graphic tappedLocationGraphic = new Graphic();
tappedLocationGraphic.setSymbol(new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.X, Color.MAGENTA, 15f));
Graphic nearestCoordinateGraphic = new Graphic();
nearestCoordinateGraphic.setSymbol(new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.DIAMOND, Color.RED, 10f));
Graphic nearestVertexGraphic = new Graphic();
nearestVertexGraphic.setSymbol(new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.BLUE, 15f));
GraphicsOverlay graphicsOverlay = new GraphicsOverlay();
graphicsOverlay.getGraphics().addAll(Arrays.asList(
polygonGraphic,
tappedLocationGraphic,
nearestCoordinateGraphic,
nearestVertexGraphic
));
ArcGISMap map = new ArcGISMap(Basemap.createTopographic());
mapView.setMap(map);
mapView.getGraphicsOverlays().add(graphicsOverlay);
mapView.setViewpointGeometryAsync(polygon.getExtent(), 100.0);
mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(MainActivity5.this, mapView){
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()));
Point mapPoint = mapView.screenToLocation(screenPoint);
Point normalizedMapPoint = (Point) GeometryEngine.normalizeCentralMeridian(mapPoint);
tappedLocationGraphic.setGeometry(normalizedMapPoint);
ProximityResult nearestVertexResult = GeometryEngine.nearestVertex(polygon, normalizedMapPoint);
nearestVertexGraphic.setGeometry(nearestVertexResult.getCoordinate());
ProximityResult nearestCoordinateResult =
GeometryEngine.nearestCoordinate(polygon, normalizedMapPoint);
nearestCoordinateGraphic.setGeometry(nearestCoordinateResult.getCoordinate());
return true;
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
|