From 4301c77ace617ff481f433088ec8c01034bb2acd Mon Sep 17 00:00:00 2001 From: "rajendra.supnekar" Date: Mon, 19 Jun 2017 15:24:23 -0400 Subject: [PATCH 1/9] Added new example to test wms issue #232 --- example-wmstest/.gitignore | 1 + example-wmstest/build.gradle | 14 ++ example-wmstest/proguard-rules.pro | 25 ++ example-wmstest/src/main/AndroidManifest.xml | 24 ++ .../emp3/examples/wmstest/MainActivity.java | 214 ++++++++++++++++++ .../src/main/res/layout/activity_main.xml | 122 ++++++++++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4208 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2555 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6114 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10056 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 14696 bytes .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/strings.xml | 34 +++ .../src/main/res/values/styles.xml | 11 + 19 files changed, 451 insertions(+) create mode 100644 example-wmstest/.gitignore create mode 100644 example-wmstest/build.gradle create mode 100644 example-wmstest/proguard-rules.pro create mode 100644 example-wmstest/src/main/AndroidManifest.xml create mode 100644 example-wmstest/src/main/java/mil/emp3/examples/wmstest/MainActivity.java create mode 100644 example-wmstest/src/main/res/layout/activity_main.xml create mode 100644 example-wmstest/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example-wmstest/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 example-wmstest/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example-wmstest/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 example-wmstest/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example-wmstest/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 example-wmstest/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example-wmstest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 example-wmstest/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example-wmstest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 example-wmstest/src/main/res/values/colors.xml create mode 100644 example-wmstest/src/main/res/values/strings.xml create mode 100644 example-wmstest/src/main/res/values/styles.xml diff --git a/example-wmstest/.gitignore b/example-wmstest/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/example-wmstest/.gitignore @@ -0,0 +1 @@ +/build diff --git a/example-wmstest/build.gradle b/example-wmstest/build.gradle new file mode 100644 index 0000000..c93fa1b --- /dev/null +++ b/example-wmstest/build.gradle @@ -0,0 +1,14 @@ +apply plugin: 'emp.android-app' + +dependencies { + compile ("mil.army.missioncommand:emp3-android-sdk-view:$version_emp3Android") { transitive = true } + compile (group: 'mil.army.missioncommand', name: 'emp3-android-sdk-core', version: "$version_emp3Android", ext: 'aar') { transitive = true } + + // Compile in the map engines rather than load it from the APK + compile ("mil.army.missioncommand:emp3-android-worldwind:$version_emp3Android@aar") { transitive = true } + compile (group: 'mil.army.missioncommand', name: 'mil-sym-android-renderer', ext: 'aar') { transitive = true } + + compile ("com.android.support:appcompat-v7") +} + +android.defaultConfig.applicationId "mil.emp3.examples.wmstest" diff --git a/example-wmstest/proguard-rules.pro b/example-wmstest/proguard-rules.pro new file mode 100644 index 0000000..67bfaf7 --- /dev/null +++ b/example-wmstest/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/rajendra.supnekar@rgi-corp.local/Android/Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/example-wmstest/src/main/AndroidManifest.xml b/example-wmstest/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2e1795f --- /dev/null +++ b/example-wmstest/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example-wmstest/src/main/java/mil/emp3/examples/wmstest/MainActivity.java b/example-wmstest/src/main/java/mil/emp3/examples/wmstest/MainActivity.java new file mode 100644 index 0000000..ed9d384 --- /dev/null +++ b/example-wmstest/src/main/java/mil/emp3/examples/wmstest/MainActivity.java @@ -0,0 +1,214 @@ +package mil.emp3.examples.wmstest; + +import android.content.res.Resources; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.Toast; + +import org.cmapi.primitives.IGeoAltitudeMode; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import mil.emp3.api.WMS; +import mil.emp3.api.enums.WMSVersionEnum; +import mil.emp3.api.events.MapStateChangeEvent; +import mil.emp3.api.events.MapUserInteractionEvent; +import mil.emp3.api.exceptions.EMP_Exception; +import mil.emp3.api.interfaces.ICamera; +import mil.emp3.api.interfaces.IMap; +import mil.emp3.api.interfaces.IMapService; +import mil.emp3.api.listeners.IMapInteractionEventListener; +import mil.emp3.api.listeners.IMapStateChangeEventListener; + +public class MainActivity extends AppCompatActivity { + + private final static String TAG = MainActivity.class.getSimpleName(); + private WMS wmsService = null; + private IMap map = null; + private Spinner selectedLayers; + private Spinner versionText; + private Spinner tileFormatText; + private Spinner transparentText; + ArrayList layers = new ArrayList<>(); + String layer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Log.i(TAG, "Setting custom activity"); + setContentView(R.layout.activity_main); + ArrayAdapter versionAdapter = ArrayAdapter.createFromResource(this, + R.array.wms_versions, android.R.layout.simple_spinner_item); + versionText = (Spinner)findViewById(R.id.VersionText); + versionText.setAdapter(versionAdapter); + ArrayAdapter tileAdapter = ArrayAdapter.createFromResource(this, + R.array.image_formats, android.R.layout.simple_spinner_item); + tileFormatText = (Spinner)findViewById(R.id.TileFormatText); + tileFormatText.setAdapter(tileAdapter); + ArrayAdapter booleanAdapter = ArrayAdapter.createFromResource(this, + R.array.boolean_values, android.R.layout.simple_spinner_item); + transparentText = (Spinner)findViewById(R.id.TransparentText); + transparentText.setAdapter(booleanAdapter); + // Cancel button exits the app + Button cancelButton = (Button) findViewById(R.id.CancelButton); + if (cancelButton != null) { + cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + } else { + Log.e(TAG, "Cancel Button not found"); + } + /* + Instantiate a camera and set the location and angle + The altitude here is set initially to 1000 km + */ + + final mil.emp3.api.Camera camera = new mil.emp3.api.Camera(); + camera.setName("Main Cam"); + camera.setAltitudeMode(IGeoAltitudeMode.AltitudeMode.ABSOLUTE); + camera.setAltitude(1e6); + camera.setHeading(0.0); + camera.setLatitude(40.0); + camera.setLongitude(-100.0); + camera.setRoll(0.0); + camera.setTilt(0.0); + + map = (IMap) findViewById(R.id.map); + try { + map.addMapStateChangeEventListener(new IMapStateChangeEventListener() { + @Override + public void onEvent(MapStateChangeEvent mapStateChangeEvent) { + Log.d(TAG, "mapStateChangeEvent " + mapStateChangeEvent.getNewState()); + switch (mapStateChangeEvent.getNewState()) { + case MAP_READY: + try { + map.setCamera(camera, false); + } catch (EMP_Exception empe) { + empe.printStackTrace(); + } + break; + } + } + }); + } catch (EMP_Exception e) { + Log.e(TAG, "addMapStateChangeEventListener", e); + } + try { + map.addMapInteractionEventListener(new IMapInteractionEventListener() { + @Override + public void onEvent(MapUserInteractionEvent mapUserInteractionEvent) { + Log.d(TAG, "mapUserInteractionEvent " + mapUserInteractionEvent.getPoint().x); + } + }); + } catch (EMP_Exception e) { + Log.e(TAG, "addMapInteractionEventListener", e); + } + + Button loopButton = (Button) findViewById(R.id.LoopButton); + if (loopButton != null) { + loopButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Runnable remove = new Runnable() { + @Override + public void run() { + try + + { + for (int i = 0; i < 5; i++) { + List mapServices = map.getMapServices(); + Log.i(TAG, "map services count before " + mapServices.size()); + for (IMapService mapService : mapServices) { + if (mapService.getGeoId().equals(wmsService.getGeoId())) { + map.removeMapService(wmsService); + break; + } + } + Log.i(TAG, "map services count after " + map.getMapServices().size()); + Thread.sleep(2000); + map.addMapService(wmsService); + Thread.sleep(2000); + } + } catch ( + Exception e) + + { + e.printStackTrace(); + } + } + }; + Thread thread = new Thread(remove); + thread.start(); + } + }); + } + + Button removeButton = (Button) findViewById(R.id.RemoveButton); + if (removeButton != null) { + removeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + map.removeMapService(wmsService); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + // Pressing OK sets the WMS server + // Only one WMS layer is displayed at a time + // Changing the server parameters replaces any + // previous server + + Button okButton = (Button) findViewById(R.id.OKButton); + if (okButton != null) + + { + okButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + try { + if (wmsService == null) { + EditText urlText = (EditText) findViewById(R.id.UrlText); + EditText layerName = (EditText) findViewById(R.id.LayerText); + EditText resolutionText = (EditText) findViewById(R.id.ResolutionText); + String url = urlText.getText().toString(); + String version = versionText.getSelectedItem().toString(); + WMSVersionEnum wmsVersion = WMSVersionEnum.valueOf(version); + String tileFormat = tileFormatText.getSelectedItem().toString(); + boolean transparent = (transparentText.getSelectedItem().toString()).equals("true"); + layer = layerName.getText().toString(); + layers.add(layer); + wmsService = new WMS(url, + wmsVersion, + tileFormat.equals("null") ? null : tileFormat, // tile format + transparent, + layers); + String resolution = resolutionText.getText().toString(); + wmsService.setLayerResolution(Double.valueOf(resolution)); + } + map.addMapService(wmsService); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + } +} + diff --git a/example-wmstest/src/main/res/layout/activity_main.xml b/example-wmstest/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..67ab520 --- /dev/null +++ b/example-wmstest/src/main/res/layout/activity_main.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + +