ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
This is an old revision of the document!
using Android.App; using Android.OS; using Android.Views; using Android.Widget; using System; using System.Collections.ObjectModel; using System.IO; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { [Activity(Label|= "US Earthquake", Icon = "@drawable/MapSuite", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden | Android.Content.PM.ConfigChanges.ScreenSize)] public class MainActivity : Activity { private SelectBaseMapTypeDialog selectBaseMapTypeDialog; private SelectDisplayTypeDialog selectDisplayTypeDialog; private RadioButton panRadioButton; private RadioButton polygonRadioButton; private RadioButton rectangleRadioButton; private LayerOverlay highlightOverlay; private LayerOverlay earthquakeOverlay; private HeatLayer earthquakeHeatLayer; private ShapeFileFeatureLayer earthquakePointLayer; private InMemoryFeatureLayer selectedMarkerLayer; private InMemoryFeatureLayer highlightMarkerLayer; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); InitializeAndroidMap(); InitializeDialogs(); panRadioButton = FindViewById<RadioButton>(Resource.Id.PanButton); polygonRadioButton = FindViewById<RadioButton>(Resource.Id.DrawPolygonButton); rectangleRadioButton = FindViewById<RadioButton>(Resource.Id.DrawRectangleButton); Button clearButton = FindViewById<Button>(Resource.Id.ClearButton); Button moreOptionsButton = FindViewById<Button>(Resource.Id.MoreOptionsButton); panRadioButton.CheckedChange += ControlMode_CheckedChange; polygonRadioButton.CheckedChange += ControlMode_CheckedChange; rectangleRadioButton.CheckedChange += ControlMode_CheckedChange; clearButton.Click += ClearButton_Click; moreOptionsButton.Click += (sender, e) => StartActivity(typeof(ConfigurationActivity)); } public override bool OnCreateOptionsMenu(IMenu menu) { menu.Add(Menu.None, Menu.First + 1, 1, "Base Map").SetIcon(Resource.Drawable.basemap); menu.Add(Menu.None, Menu.First + 2, 1, "Display Type").SetIcon(Resource.Drawable.displaytype); menu.Add(Menu.None, Menu.First + 3, 1, "Query Configuration").SetIcon(Resource.Drawable.searchicon); return true; } public override bool OnOptionsItemSelected(IMenuItem item) { switch (item.ItemId) { case Menu.First + 1: selectBaseMapTypeDialog.Show(); break; case Menu.First + 2: selectDisplayTypeDialog.Show(); break; case Menu.First + 3: StartActivity(typeof(ConfigurationActivity)); break; } return false; } private void ControlMode_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e) { if (sender.Equals(panRadioButton) && panRadioButton.Checked) { Global.MapView.TrackOverlay.TrackMode = TrackMode.None; } else if (sender.Equals(polygonRadioButton) && polygonRadioButton.Checked) { Global.MapView.TrackOverlay.TrackMode = TrackMode.Polygon; } else if (sender.Equals(rectangleRadioButton) && rectangleRadioButton.Checked) { Global.MapView.TrackOverlay.TrackMode = TrackMode.Rectangle; } } private void ClearButton_Click(object sender, EventArgs e) { Global.ClearBackupQueriedFeatures(); selectedMarkerLayer.InternalFeatures.Clear(); highlightMarkerLayer.InternalFeatures.Clear(); Global.MapView.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear(); highlightOverlay.Refresh(); Global.MapView.TrackOverlay.Refresh(); } private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e) { MultipolygonShape resultShape = PolygonShape.Union(Global.MapView.TrackOverlay.TrackShapeLayer.InternalFeatures); FeatureLayer featureLayer = earthquakePointLayer; if (!featureLayer.IsOpen) { featureLayer.Open(); } Collection<Feature> features = featureLayer.FeatureSource.GetFeaturesWithinDistanceOf(new Feature(resultShape), Global.MapView.MapUnit, DistanceUnit.Meter, 0.0001, ReturningColumnsType.AllColumns); Global.BackupQueriedFeatures(features); Global.FilterSelectedEarthquakeFeatures(Global.GetBackupQueriedFeatures()); } private void InitializeDialogs() { Global.BaseMapType = BaseMapType.WorldMapKitRoad; selectBaseMapTypeDialog = new SelectBaseMapTypeDialog(this, GetSharedPreferences(Global.PREFS_NAME, 0)); selectDisplayTypeDialog = new SelectDisplayTypeDialog(this, DisplayType.Point); } private void InitializeAndroidMap() { string baseFolder = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; string cachePathFilename = Path.Combine(baseFolder, "MapSuiteTileCaches/SampleCaches.db"); ManagedProj4Projection proj4 = Global.GetWgs84ToMercatorProjection(); // WMK WorldMapKitOverlay wmkOverlay = new WorldMapKitOverlay(); wmkOverlay.Projection = WorldMapKitProjection.SphericalMercator; // OSM OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay(); osmOverlay.TileCache = new SqliteBitmapTileCache(cachePathFilename, "OSMSphericalMercator"); osmOverlay.IsVisible = false; // Bing - Aerial BingMapsOverlay bingMapsAerialOverlay = new BingMapsOverlay(); bingMapsAerialOverlay.IsVisible = false; bingMapsAerialOverlay.MapType = BingMapsMapType.AerialWithLabels; bingMapsAerialOverlay.TileCache = new SqliteBitmapTileCache(cachePathFilename, "BingAerialWithLabels"); // Bing - Road BingMapsOverlay bingMapsRoadOverlay = new BingMapsOverlay(); bingMapsRoadOverlay.IsVisible = false; bingMapsRoadOverlay.MapType = BingMapsMapType.Road; bingMapsRoadOverlay.TileCache = new SqliteBitmapTileCache(cachePathFilename, "BingRoad"); // Earthquake points earthquakePointLayer = new ShapeFileFeatureLayer(SampleHelper.GetDataPath("usEarthquake.shp")); earthquakePointLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(PointStyles.CreateSimpleCircleStyle(GeoColor.SimpleColors.Red, 5, GeoColor.SimpleColors.White, 1)); earthquakePointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; earthquakePointLayer.FeatureSource.Projection = proj4; ShapeFileFeatureSource earthquakeHeatFeatureSource = new ShapeFileFeatureSource(SampleHelper.GetDataPath("usEarthquake_Simplify.shp")); earthquakeHeatFeatureSource.Projection = proj4; earthquakeHeatLayer = new HeatLayer(earthquakeHeatFeatureSource); earthquakeHeatLayer.HeatStyle = new HeatStyle(10, 75, DistanceUnit.Kilometer); earthquakeHeatLayer.HeatStyle.Alpha = 180; earthquakeHeatLayer.IsVisible = false; earthquakeOverlay = new LayerOverlay(); earthquakeOverlay.Layers.Add(Global.EarthquakePointLayerKey, earthquakePointLayer); earthquakeOverlay.Layers.Add(Global.EarthquakeHeatLayerKey, earthquakeHeatLayer); // Highlighted points selectedMarkerLayer = new InMemoryFeatureLayer(); selectedMarkerLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.SimpleColors.Orange, 8, GeoColor.SimpleColors.White, 2); selectedMarkerLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; PointStyle highLightMarkerStyle = new PointStyle(); highLightMarkerStyle.CustomPointStyles.Add(PointStyles.CreateSimpleCircleStyle(GeoColor.FromArgb(50, GeoColor.SimpleColors.Blue), 20, GeoColor.SimpleColors.LightBlue, 1)); highLightMarkerStyle.CustomPointStyles.Add(PointStyles.CreateSimpleCircleStyle(GeoColor.FromArgb(255, 0, 122, 255), 10, GeoColor.SimpleColors.White, 2)); highlightMarkerLayer = new InMemoryFeatureLayer(); highlightMarkerLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = highLightMarkerStyle; highlightMarkerLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; highlightOverlay = new LayerOverlay(); highlightOverlay.Layers.Add(Global.SelectMarkerLayerKey, selectedMarkerLayer); highlightOverlay.Layers.Add(Global.HighlightMarkerLayerKey, highlightMarkerLayer); // Maps Global.MapView = FindViewById<MapView>(Resource.Id.androidMap); Global.MapView.MapUnit = GeographyUnit.Meter; Global.MapView.MapTools.ZoomMapTool.Visibility = ViewStates.Invisible; Global.MapView.ZoomLevelSet = new BingMapsZoomLevelSet(); Global.MapView.CurrentExtent = new RectangleShape(-19062735.6816748, 9273256.52450252, -5746827.16371793, 2673516.56066139); Global.MapView.SetBackgroundColor(new Android.Graphics.Color(255, 244, 242, 238)); Global.MapView.Overlays.Add(Global.WorldMapKitOverlayKey, wmkOverlay); Global.MapView.Overlays.Add(Global.OpenStreetMapOverlayKey, osmOverlay); Global.MapView.Overlays.Add(Global.BingMapsAerialOverlayKey, bingMapsAerialOverlay); Global.MapView.Overlays.Add(Global.BingMapsRoadOverlayKey, bingMapsRoadOverlay); Global.MapView.Overlays.Add(Global.EarthquakeOverlayKey, earthquakeOverlay); Global.MapView.Overlays.Add(Global.HighlightOverlayKey, highlightOverlay); Global.MapView.TrackOverlay.TrackShapeLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear(); Global.MapView.TrackOverlay.TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.FromArgb(80, GeoColor.SimpleColors.LightGreen), 8); Global.MapView.TrackOverlay.TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.SimpleColors.White, 3, true); Global.MapView.TrackOverlay.TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(80, GeoColor.SimpleColors.LightGreen), GeoColor.SimpleColors.White, 2); Global.MapView.TrackOverlay.TrackEnded += TrackOverlay_TrackEnded; } } }
using Android.App; using Android.OS; using Android.Views; using Android.Widget; using System; using System.Collections.Generic; using System.Globalization; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { [Activity(Label|= "Query Configuration", Icon = "@drawable/MapSuite", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden | Android.Content.PM.ConfigChanges.ScreenSize)] public class ConfigurationActivity : Activity { private readonly string UnknownString = "Unknown"; private Feature queryFeature; private RangeSeekBar dateRangeSeekBar; private RangeSeekBar depthRangeSeekBar; private RangeSeekBar magnitudeRangeSeekBar; public ConfigurationActivity() : base() { } protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Configuration); RefreshQueryResultList(); Button queryButton = FindViewById<Button>(Resource.Id.queryButton); ListView resultListView = FindViewById<ListView>(Resource.Id.resultListView); magnitudeRangeSeekBar = FindViewById<RangeSeekBar>(Resource.Id.magnitudeRange); dateRangeSeekBar = FindViewById<RangeSeekBar>(Resource.Id.dateRange); depthRangeSeekBar = FindViewById<RangeSeekBar>(Resource.Id.depthRange); dateRangeSeekBar.SmallRange = Global.QueryConfiguration.LowerYear; depthRangeSeekBar.SmallRange = Global.QueryConfiguration.LowerDepth; magnitudeRangeSeekBar.SmallRange = Global.QueryConfiguration.LowerMagnitude; dateRangeSeekBar.BigRange = Global.QueryConfiguration.UpperYear; depthRangeSeekBar.BigRange = Global.QueryConfiguration.UpperDepth; magnitudeRangeSeekBar.BigRange = Global.QueryConfiguration.UpperMagnitude; dateRangeSeekBar.SmallValue = 1568; depthRangeSeekBar.SmallValue = 0; magnitudeRangeSeekBar.SmallValue = 0; dateRangeSeekBar.BigValue = 2010; depthRangeSeekBar.BigValue = 300; magnitudeRangeSeekBar.BigValue = 12; dateRangeSeekBar.RangeChanged += OptionRangeSeekBar_RangeChanged; depthRangeSeekBar.RangeChanged += OptionRangeSeekBar_RangeChanged; magnitudeRangeSeekBar.RangeChanged += OptionRangeSeekBar_RangeChanged; queryButton.Click += QueryButton_Click; resultListView.ItemLongClick += ResultListView_ItemLongClick; RegisterForContextMenu(resultListView); RefreshQueryResultList(); } public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo) { if (v.Id == Resource.Id.resultListView && queryFeature != null) { menu.SetHeaderTitle("Options"); menu.SetHeaderIcon(Android.Resource.Drawable.IcMenuInfoDetails); menu.Add(0, Menu.First + 1, 1, "Center at").SetIcon(Android.Resource.Drawable.IcMenuInfoDetails); menu.Add(0, Menu.First + 2, 2, "Zoom to").SetIcon(Android.Resource.Drawable.IcMenuInfoDetails); } base.OnCreateContextMenu(menu, v, menuInfo); } public override bool OnMenuItemSelected(int featureId, IMenuItem item) { if (queryFeature != null) { Finish(); LayerOverlay highLightOverlay = Global.MapView.Overlays[Global.HighlightOverlayKey] as LayerOverlay; InMemoryFeatureLayer highlightMarkerLayer = highLightOverlay.Layers[Global.HighlightMarkerLayerKey] as InMemoryFeatureLayer; highlightMarkerLayer.InternalFeatures.Clear(); switch (item.ItemId) { case Menu.First + 1: highlightMarkerLayer.InternalFeatures.Add(queryFeature); Global.MapView.CenterAt(queryFeature); highLightOverlay.Refresh(); break; case Menu.First + 2: highlightMarkerLayer.InternalFeatures.Add(queryFeature); Global.MapView.ZoomTo(queryFeature); break; default: break; } } return base.OnMenuItemSelected(featureId, item); } private void OptionRangeSeekBar_RangeChanged(object sender, RangeChangedEventArgs e) { if (sender.Equals(dateRangeSeekBar)) { Global.QueryConfiguration.LowerYear = e.LowerValue; Global.QueryConfiguration.UpperYear = e.UpperValue; } else if (sender.Equals(magnitudeRangeSeekBar)) { Global.QueryConfiguration.LowerMagnitude = e.LowerValue; Global.QueryConfiguration.UpperMagnitude = e.UpperValue; } else if (sender.Equals(depthRangeSeekBar)) { Global.QueryConfiguration.LowerDepth = e.LowerValue; Global.QueryConfiguration.UpperDepth = e.UpperValue; } } private void ResultListView_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e) { LayerOverlay highLightOverlay = Global.MapView.Overlays[Global.HighlightOverlayKey] as LayerOverlay; InMemoryFeatureLayer selectMarkerLayer = highLightOverlay.Layers[Global.SelectMarkerLayerKey] as InMemoryFeatureLayer; if (selectMarkerLayer != null) { queryFeature = selectMarkerLayer.InternalFeatures[e.Position]; e.Handled = false; } } private void QueryButton_Click(object sender, EventArgs e) { RefreshQueryResultList(); } private void RefreshQueryResultList() { TextView title = FindViewById<TextView>(Resource.Id.queryResultTitleTextView); ListView view = FindViewById<ListView>(Resource.Id.resultListView); EarthquakeListAdapter adapter = view.Adapter == null ? new EarthquakeListAdapter(this) : (EarthquakeListAdapter)view.Adapter; adapter.Data.Clear(); ManagedProj4Projection mercatorToWgs84Projection = Global.GetWgs84ToMercatorProjection(); mercatorToWgs84Projection.Open(); try { Global.FilterSelectedEarthquakeFeatures(Global.GetBackupQueriedFeatures()); LayerOverlay highLightOverlay = Global.MapView.Overlays[Global.HighlightOverlayKey] as LayerOverlay; InMemoryFeatureLayer selectMarkerLayer = highLightOverlay.Layers[Global.SelectMarkerLayerKey] as InMemoryFeatureLayer; foreach (var feature in selectMarkerLayer.InternalFeatures) { double longitude = 0, latitude = 0; if (double.TryParse(feature.ColumnValues["LONGITUDE"], out longitude) && double.TryParse(feature.ColumnValues["LATITIUDE"], out latitude)) { PointShape point = new PointShape(longitude, latitude); point = (PointShape)mercatorToWgs84Projection.ConvertToInternalProjection(point); longitude = point.X; latitude = point.Y; } double year, depth, magnitude; double.TryParse(feature.ColumnValues["MAGNITUDE"], out magnitude); double.TryParse(feature.ColumnValues["DEPTH_KM"], out depth); double.TryParse(feature.ColumnValues["YEAR"], out year); Dictionary<String, Object> result = new Dictionary<string, object>(); result["yearValue"] = year != -9999 ? year.ToString(CultureInfo.InvariantCulture) : UnknownString; result["longitudeValue"] = longitude.ToString("f2", CultureInfo.InvariantCulture); result["latitudeValue"] = latitude.ToString("f2", CultureInfo.InvariantCulture); result["depthValue"] = depth != -9999 ? depth.ToString(CultureInfo.InvariantCulture) : UnknownString; result["magnitudeValue"] = magnitude != -9999 ? magnitude.ToString(CultureInfo.InvariantCulture) : UnknownString; result["locationValue"] = feature.ColumnValues["LOCATION"]; adapter.Data.Add(result); } view.Adapter = adapter; title.Text = String.Format("Query Result (Find {0} results)", adapter.Data.Count); } finally { mercatorToWgs84Projection.Close(); } } } }
using System.Collections.ObjectModel; using System.Linq; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { public static class Global { public static readonly string EarthquakeHeatLayerKey = "EarthquakeHeatLayer"; public static readonly string EarthquakePointLayerKey = "EarthquakePointLayer"; public static readonly string SelectMarkerLayerKey = "SelectMarkerLayer"; public static readonly string HighlightMarkerLayerKey = "HighlightMarkerLayer"; public static readonly string WorldMapKitOverlayKey = "WorldMapKitOverlay"; public static readonly string OpenStreetMapOverlayKey = "OpenStreetMapOverlay"; public static readonly string BingMapsAerialOverlayKey = "BingMapsAerialOverlay"; public static readonly string BingMapsRoadOverlayKey = "BingMapsRoadOverlay"; public static readonly string EarthquakeOverlayKey = "EarthquakeOverlay"; public static readonly string HighlightOverlayKey = "HighlightOverlay"; public static readonly string PREFS_BINGMAPKEY = "BingMapKey"; public static readonly string PREFS_NAME = "SamplePrefsFile"; private static Collection<Feature> backupQueriedFeatures; static Global() { QueryConfiguration = new QueryConfiguration(); backupQueriedFeatures = new Collection<Feature>(); } public static MapView MapView { get; set; } public static QueryConfiguration QueryConfiguration { get; set; } public static BaseMapType BaseMapType { get; set; } public static WorldMapKitOverlay WorldMapKitOverlay { get { return (WorldMapKitOverlay)MapView.Overlays[WorldMapKitOverlayKey]; } } public static Overlay OpenStreetMapOverlay { get { return MapView.Overlays[OpenStreetMapOverlayKey]; } } public static BingMapsOverlay BingMapsAerialOverlay { get { return (BingMapsOverlay)MapView.Overlays[BingMapsAerialOverlayKey]; } } public static BingMapsOverlay BingMapsRoadOverlay { get { return (BingMapsOverlay)MapView.Overlays[BingMapsRoadOverlayKey]; } } public static void ClearBackupQueriedFeatures() { backupQueriedFeatures.Clear(); } public static void BackupQueriedFeatures(Collection<Feature> queriedFeatures) { backupQueriedFeatures.Clear(); foreach (var item in queriedFeatures) { backupQueriedFeatures.Add(item); } } public static Collection<Feature> GetBackupQueriedFeatures() { return new Collection<Feature>(backupQueriedFeatures); } public static ManagedProj4Projection GetWgs84ToMercatorProjection() { ManagedProj4Projection wgs84ToMercatorProjection = new ManagedProj4Projection(); wgs84ToMercatorProjection.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString(); wgs84ToMercatorProjection.ExternalProjectionParametersString = ManagedProj4Projection.GetBingMapParametersString(); return wgs84ToMercatorProjection; } public static void FilterSelectedEarthquakeFeatures(Collection<Feature> features) { LayerOverlay highlightOverlay = Global.MapView.Overlays[Global.HighlightOverlayKey] as LayerOverlay; InMemoryFeatureLayer selectMarkerLayer = highlightOverlay.Layers[Global.SelectMarkerLayerKey] as InMemoryFeatureLayer; selectMarkerLayer.InternalFeatures.Clear(); foreach (var feature in features) { double year, depth, magnitude; double.TryParse(feature.ColumnValues["MAGNITUDE"], out magnitude); double.TryParse(feature.ColumnValues["DEPTH_KM"], out depth); double.TryParse(feature.ColumnValues["YEAR"], out year); if ((magnitude >= Global.QueryConfiguration.LowerMagnitude && magnitude <= Global.QueryConfiguration.UpperMagnitude || magnitude == -9999) && (depth <= Global.QueryConfiguration.UpperDepth && depth >= Global.QueryConfiguration.LowerDepth || depth == -9999) && (year >= Global.QueryConfiguration.LowerYear && year <= Global.QueryConfiguration.UpperYear) || year == -9999) { selectMarkerLayer.InternalFeatures.Add(feature); } } highlightOverlay.Refresh(); } } }
namespace MapSuiteEarthquakeStatistics { public class QueryConfiguration { public QueryConfiguration() { LowerMagnitude = 0; UpperMagnitude = 12; LowerDepth = 0; UpperDepth = 300; LowerYear = 1568; UpperYear = 2010; } public int LowerMagnitude { get; set; } public int UpperMagnitude { get; set; } public int LowerDepth { get; set; } public int UpperDepth { get; set; } public int LowerYear { get; set; } public int UpperYear { get; set; } } }
using System.IO; namespace MapSuiteEarthquakeStatistics { internal class SampleHelper { public readonly static string AssetsDataDictionary = @"SampleData"; public readonly static string SampleDataDictionary = @"mnt/sdcard/MapSuiteSampleData/EarthquakeStatistics"; public static string GetDataPath(string fileName) { return Path.Combine(SampleDataDictionary, AssetsDataDictionary, fileName); } } }
using Android.App; using Android.OS; using Android.Widget; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Threading.Tasks; namespace MapSuiteEarthquakeStatistics { [Activity(Theme|= "@android:style/Theme.Light.NoTitleBar", MainLauncher = true, NoHistory = true, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden | Android.Content.PM.ConfigChanges.ScreenSize)] public class SplashActivity : Activity { private TextView uploadTextView; private ProgressBar uploadProgressBar; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.SplashLayout); uploadTextView = FindViewById<TextView>(Resource.Id.uploadDataTextView); uploadProgressBar = FindViewById<ProgressBar>(Resource.Id.uploadProgressBar); Task updateSampleDatasTask = Task.Factory.StartNew(() => { Collection<string> unLoadDatas = CollectUnloadDatas(SampleHelper.SampleDataDictionary, SampleHelper.AssetsDataDictionary); UploadDataFiles(SampleHelper.SampleDataDictionary, unLoadDatas, OnCopyingSourceFile); uploadTextView.Post(() => { uploadTextView.Text = "Ready"; uploadProgressBar.Progress = 100; }); }); updateSampleDatasTask.ContinueWith(t => { uploadTextView.PostDelayed(() => { StartActivity(typeof(MainActivity)); Finish(); }, 200); }); } private void OnCopyingSourceFile(string targetPathFilename, int completeCount, int totalCount) { uploadTextView.Post(() => { uploadTextView.Text = string.Format("Copying {0} ({1}/{2})", Path.GetFileName(targetPathFilename), completeCount, totalCount); uploadProgressBar.Progress = (int)(completeCount * 100f / totalCount); }); } private Collection<string> CollectUnloadDatas(string targetDirectory, string sourceDirectory) { Collection<string> result = new Collection<string>(); foreach (string filename in Assets.List(sourceDirectory)) { string sourcePath = System.IO.Path.Combine(sourceDirectory, filename); string targetPath = System.IO.Path.Combine(targetDirectory, sourcePath); if (!string.IsNullOrEmpty(Path.GetExtension(sourcePath)) && !File.Exists(targetPath)) { result.Add(sourcePath); } else if (string.IsNullOrEmpty(Path.GetExtension(sourcePath))) { foreach (string item in CollectUnloadDatas(targetDirectory, sourcePath)) { result.Add(item); } } } return result; } private void UploadDataFiles(string targetDirectory, IEnumerable<string> sourcePathFilenames, Action<string, int, int> onCopyingSourceFile = null) { int completeCount = 0; if (!Directory.Exists(targetDirectory)) Directory.CreateDirectory(targetDirectory); foreach (string sourcePathFilename in sourcePathFilenames) { string targetPathFilename = Path.Combine(targetDirectory, sourcePathFilename); if (!File.Exists(targetPathFilename)) { if (onCopyingSourceFile != null) onCopyingSourceFile(targetPathFilename, completeCount, sourcePathFilenames.Count()); string targetPath = Path.GetDirectoryName(targetPathFilename); if (!Directory.Exists(targetPath)) Directory.CreateDirectory(targetPath); Stream sourceStream = Assets.Open(sourcePathFilename); FileStream fileStream = File.Create(targetPathFilename); sourceStream.CopyTo(fileStream); fileStream.Close(); sourceStream.Close(); completeCount++; } } } } }
namespace MapSuiteEarthquakeStatistics { public enum BaseMapType { WorldMapKitRoad = 0, WorldMapKitAerial = 1, WorldMapKitAerialWithLabels = 2, OpenStreetMap = 3, BingMapsAerial = 4, BingMapsRoad = 5 } }
namespace MapSuiteEarthquakeStatistics { public enum DisplayType { Heat = 0, Point = 1, ISOLine = 2 } }
using Android.Content; using Android.Views; using Android.Widget; using System.Collections.Generic; namespace MapSuiteEarthquakeStatistics { internal class EarthquakeListAdapter : BaseAdapter { private LayoutInflater mInflater; private List<Dictionary<string, object>> data; public EarthquakeListAdapter(Context context) { mInflater = LayoutInflater.From(context); } public override int Count { get { return data.Count; } } public List<Dictionary<string, object>> Data { get { if (data == null) { data = new List<Dictionary<string, object>>(); } return data; } } public override Java.Lang.Object GetItem(int position) { Java.Util.HashMap map = new Java.Util.HashMap(); foreach (var item in data[position]) { map.Put(item.Key, item.Value.ToString()); } return map; } public override long GetItemId(int position) { return position; } public override View GetView(int position, View convertView, ViewGroup parent) { EarthquakeResultHolder holder = null; if (convertView == null) { holder = new EarthquakeResultHolder(); convertView = mInflater.Inflate(Resource.Layout.listviewLayout, null); holder.YearValue = convertView.FindViewById<TextView>(Resource.Id.yearValue); holder.LongitudeValue = convertView.FindViewById<TextView>(Resource.Id.longitudeValue); holder.LatitudeValue = convertView.FindViewById<TextView>(Resource.Id.latitudeValue); holder.DepthValue = convertView.FindViewById<TextView>(Resource.Id.depthValue); holder.MagnitudeValue = convertView.FindViewById<TextView>(Resource.Id.magnitudeValue); holder.LocationValue = convertView.FindViewById<TextView>(Resource.Id.locationValue); convertView.Tag = holder; } else { holder = (EarthquakeResultHolder)convertView.Tag; } holder.YearValue.Text = data[position]["yearValue"].ToString(); holder.LongitudeValue.Text = data[position]["longitudeValue"].ToString(); holder.LatitudeValue.Text = data[position]["latitudeValue"].ToString(); holder.DepthValue.Text = data[position]["depthValue"].ToString(); holder.MagnitudeValue.Text = data[position]["magnitudeValue"].ToString(); holder.LocationValue.Text = data[position]["locationValue"].ToString(); return convertView; } } }
using Android.Widget; using Java.Lang; namespace MapSuiteEarthquakeStatistics { internal class EarthquakeResultHolder : Object { public TextView YearValue { get; set; } public TextView LongitudeValue { get; set; } public TextView LatitudeValue { get; set; } public TextView DepthValue { get; set; } public TextView MagnitudeValue { get; set; } public TextView LocationValue { get; set; } } }
using Android.App; using Android.Content; using Android.Views; using Android.Widget; using Java.Net; using System; using System.Globalization; using System.IO; using System.Threading.Tasks; using System.Xml; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { public class InputBingMapKeyDialog : AlertDialog { private Context context; private View inputBingMapsKeyView; private Button bingMapsKeyOkButton; private ISharedPreferences preferences; private SelectBaseMapTypeDialog selectBaseMapTypeDialog; public InputBingMapKeyDialog(Context context, SelectBaseMapTypeDialog selectBaseMapTypeDialog, ISharedPreferences preferences) : base(context) { inputBingMapsKeyView = View.Inflate(context, Resource.Layout.BingMapsKeyLayout, null); this.SetView(inputBingMapsKeyView); this.context = context; this.preferences = preferences; this.selectBaseMapTypeDialog = selectBaseMapTypeDialog; EditText bingMapsKeyEditText = inputBingMapsKeyView.FindViewById<EditText>(Resource.Id.BingMapsKeyEditText); Button bingMapsKeyCancelButton = inputBingMapsKeyView.FindViewById<Button>(Resource.Id.CancelButton); bingMapsKeyOkButton = inputBingMapsKeyView.FindViewById<Button>(Resource.Id.OkButton); bingMapsKeyOkButton.Click += BingMapsKeyOkButton_Click; bingMapsKeyCancelButton.Click += BingMapsKeyCancelButton_Click; } private void BingMapsKeyOkButton_Click(object sender, EventArgs e) { EditText bingMapsKeyEditText = inputBingMapsKeyView.FindViewById<EditText>(Resource.Id.BingMapsKeyEditText); string inputKey = bingMapsKeyEditText.Text; bingMapsKeyEditText.Enabled = false; bingMapsKeyOkButton.Enabled = false; Task.Factory.StartNew(() => { bool isValid = Validate(inputKey, BingMapsMapType.Aerial); Global.MapView.Post(() => { if (isValid) { Cancel(); ISharedPreferencesEditor editor = preferences.Edit(); editor.PutString(Global.PREFS_BINGMAPKEY, bingMapsKeyEditText.Text); editor.Commit(); ((BingMapsOverlay)Global.MapView.Overlays[Global.BingMapsAerialOverlayKey]).ApplicationId = bingMapsKeyEditText.Text; ((BingMapsOverlay)Global.MapView.Overlays[Global.BingMapsRoadOverlayKey]).ApplicationId = bingMapsKeyEditText.Text; Global.MapView.Overlays[Global.WorldMapKitOverlayKey].IsVisible = false; Global.MapView.Overlays[Global.OpenStreetMapOverlayKey].IsVisible = false; Global.MapView.Overlays[Global.BingMapsAerialOverlayKey].IsVisible = Global.BaseMapType == BaseMapType.BingMapsAerial; Global.MapView.Overlays[Global.BingMapsRoadOverlayKey].IsVisible = Global.BaseMapType == BaseMapType.BingMapsRoad; Global.MapView.Refresh(); } else { bingMapsKeyEditText.Enabled = true; bingMapsKeyOkButton.Enabled = true; Toast.MakeText(context, "The input BingMapKey is not validate.", ToastLength.Long).Show(); } }); }); } private void BingMapsKeyCancelButton_Click(object sender, EventArgs e) { Cancel(); } private bool Validate(string bingMapsKey, BingMapsMapType mapType) { bool result = false; URL url = null; Stream stream = null; URLConnection conn = null; string loginServiceTemplate = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/{0}?&incl=ImageryProviders&o=xml&key={1}"; try { string loginServiceUri = string.Format(CultureInfo.InvariantCulture, loginServiceTemplate, mapType, bingMapsKey); url = new URL(loginServiceUri); conn = url.OpenConnection(); stream = conn.InputStream; if (stream != null) { XmlDocument xDoc = new XmlDocument(); xDoc.Load(stream); XmlNamespaceManager nsmgr = new XmlNamespaceManager(xDoc.NameTable); nsmgr.AddNamespace("bing", "http://schemas.microsoft.com/search/local/ws/rest/v1"); XmlNode root = xDoc.SelectSingleNode("bing:Response", nsmgr); XmlNode imageUrlElement = root.SelectSingleNode("bing:ResourceSets/bing:ResourceSet/bing:Resources/bing:ImageryMetadata/bing:ImageUrl", nsmgr); XmlNodeList subdomainsElement = root.SelectNodes("bing:ResourceSets/bing:ResourceSet/bing:Resources/bing:ImageryMetadata/bing:ImageUrlSubdomains/bing:string", nsmgr); if (imageUrlElement != null && subdomainsElement != null) { result = true; } } } catch { } finally { if (url != null) url.Dispose(); if (conn != null) conn.Dispose(); if (stream != null) stream.Dispose(); } return result; } } }
namespace MapSuiteEarthquakeStatistics { public class RangeChangedEventArgs { public RangeChangedEventArgs() { } public int LowerValue { get; set; } public int UpperValue { get; set; } } }
using Android.Content; using Android.Graphics; using Android.Util; using Android.Views; using System; namespace MapSuiteEarthquakeStatistics { public class RangeSeekBar : View { public event EventHandler<RangeChangedEventArgs> RangeChanged; private readonly UInt32 inRangeColor = 0xff007AFF; private readonly UInt32 outRangeColor = 0xff777777; private readonly UInt32 textColor = 0xffffffff; private float lineWidth = 5.0f; private float textSize = 25.0f; private int lowerCenterX; private int upperCenterX; private int bmpWidth; private int bmpHeight; private Bitmap lowerBmp; private Bitmap upperBmp; private bool isInit; private bool isLowerMoving; private bool isUpperMoving; private int paddingLeft; private int paddingRight; private int paddingTop; private int paddingBottom; private int lineHeight; private int lineLength; private int lineStart; private int lineEnd; private float smallValue; private float bigValue; private float smallRange; private float bigRange; public RangeSeekBar(Context content) : this(content, null) { } public RangeSeekBar(Context content, IAttributeSet attrs) : base(content, attrs) { isInit = false; isLowerMoving = false; isUpperMoving = false; smallValue = 0.0f; bigValue = 100.0f; paddingLeft = 100; paddingRight = 100; paddingTop = 10; paddingBottom = 10; smallRange = smallValue; bigRange = bigValue; lowerBmp = BitmapFactory.DecodeResource(this.Resources, Resource.Drawable.Slider); upperBmp = BitmapFactory.DecodeResource(this.Resources, Resource.Drawable.Slider); bmpWidth = upperBmp.Width; bmpHeight = upperBmp.Height; } public float SmallValue { get { return smallValue; } set { smallValue = value; } } public float BigValue { get { return bigValue; } set { bigValue = value; } } public float SmallRange { get { return smallRange; } set { smallRange = value; } } public float BigRange { get { return bigRange; } set { bigRange = value; } } private int MeasureWidth(int measureSpec) { int result = 0; MeasureSpecMode specMode = MeasureSpec.GetMode(measureSpec); int specSize = MeasureSpec.GetSize(measureSpec); if (specMode == MeasureSpecMode.Exactly) { result = specSize; } else { result = paddingLeft + paddingRight + bmpWidth * 2; if (specMode == MeasureSpecMode.AtMost) { result = System.Math.Min(result, specSize); } } return result; } private int MeasureHeight(int measureHeight) { int result = 0; MeasureSpecMode specMode = MeasureSpec.GetMode(measureHeight); int specSize = MeasureSpec.GetSize(measureHeight); if (specMode == MeasureSpecMode.Exactly) { result = bmpHeight * 2; } else { result = bmpHeight + paddingTop + paddingBottom; if (specMode == MeasureSpecMode.AtMost) { result = System.Math.Min(result, specSize); } } return result; } protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) { widthMeasureSpec = MeasureWidth(widthMeasureSpec); heightMeasureSpec = MeasureHeight(heightMeasureSpec); SetMeasuredDimension(widthMeasureSpec, heightMeasureSpec); } protected override void OnDraw(Canvas canvas) { base.OnDraw(canvas); if (!isInit) { Init(canvas); } bmpWidth = upperBmp.Width; bmpHeight = upperBmp.Height; lineHeight = this.Height - paddingBottom - lowerBmp.Height / 2; int barHeight = this.Height - paddingBottom - lowerBmp.Height / 2; float textHeight = (this.Height / 2f) + (textSize) / 2 - 3; // Line Style Paint linePaint = new Paint(); linePaint.AntiAlias = true; linePaint.StrokeWidth = lineWidth; // Draw Highlight Line linePaint.Color = new Color((int)inRangeColor); canvas.DrawLine(lowerCenterX, barHeight, upperCenterX, barHeight, linePaint); // Draw Line linePaint.Color = new Color((int)outRangeColor); canvas.DrawLine(lineStart, barHeight, lowerCenterX, barHeight, linePaint); canvas.DrawLine(upperCenterX, barHeight, lineEnd, barHeight, linePaint); // Draw Slider Paint bmpPaint = new Paint(); canvas.DrawBitmap(lowerBmp, lowerCenterX - bmpWidth / 2, barHeight - bmpHeight / 2, bmpPaint); canvas.DrawBitmap(lowerBmp, upperCenterX - bmpWidth / 2, barHeight - bmpHeight / 2, bmpPaint); // Draw Text Paint textPaint = new Paint(); textPaint.Color = new Color((int)textColor); textPaint.TextSize = textSize; textPaint.AntiAlias = true; textPaint.StrokeWidth = lineWidth; int small = (int)Math.Round(smallRange); int big = (int)Math.Round(bigRange); canvas.DrawText(small.ToString(), 2, textHeight, textPaint); canvas.DrawText(big.ToString(), Width - textSize / 2 * big.ToString().Length - 5, textHeight, textPaint); } private void Init(Canvas canvas) { textSize = this.Height / 4; paddingLeft = canvas.Width / 7; paddingRight = canvas.Width / 7; lineLength = this.Width - paddingLeft - paddingRight; lineStart = paddingLeft; lineEnd = lineLength + paddingLeft; lowerCenterX = lineStart; upperCenterX = lineEnd; lineHeight = this.Height - paddingBottom - lowerBmp.Height / 2; lowerCenterX = InvertComputRange(smallRange); upperCenterX = InvertComputRange(bigRange); isInit = true; } public override bool OnTouchEvent(MotionEvent e) { base.OnTouchEvent(e); float xPos = e.GetX(); switch (e.Action) { case MotionEventActions.Down: float yPos = e.GetY(); if (System.Math.Abs(yPos - lineHeight) > bmpHeight / 1.5) { return false; } if (System.Math.Abs(xPos - lowerCenterX) < bmpWidth / 1.5) { isLowerMoving = true; } if (System.Math.Abs(xPos - upperCenterX) < bmpWidth / 1.5) { isUpperMoving = true; } if (xPos >= lineStart && xPos <= lowerCenterX - bmpWidth / 2) { lowerCenterX = (int)xPos; UpdateRange(); PostInvalidate(); } if (xPos <= lineEnd && xPos >= upperCenterX + bmpWidth / 2) { upperCenterX = (int)xPos; UpdateRange(); PostInvalidate(); } break; case MotionEventActions.Move: if (isLowerMoving) { if (xPos >= lineStart && xPos < upperCenterX - bmpWidth) { lowerCenterX = (int)xPos; UpdateRange(); PostInvalidate(); } } if (isUpperMoving) { if (xPos > lowerCenterX + bmpWidth && xPos < lineEnd) { upperCenterX = (int)xPos; UpdateRange(); PostInvalidate(); } } break; case MotionEventActions.Up: isLowerMoving = false; isUpperMoving = false; break; default: break; } return true; } private void UpdateRange() { smallRange = ComputRange(lowerCenterX); bigRange = ComputRange(upperCenterX); OnRangeChanged(new RangeChangedEventArgs() { LowerValue = (int)Math.Round(smallRange), UpperValue = (int)Math.Round(bigRange) }); } private float ComputRange(float range) { return (range - lineStart) * (bigValue - smallValue) / lineLength + smallValue; } private int InvertComputRange(float range) { return (int)((range - smallValue) * lineLength / (bigValue - smallValue) + lineStart); } protected virtual void OnRangeChanged(RangeChangedEventArgs e) { if (RangeChanged != null) { RangeChanged(this, e); } } } }
using Android.App; using Android.Content; using Android.Views; using Android.Widget; using System; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { public class SelectBaseMapTypeDialog : AlertDialog { private ISharedPreferences preferences; private View selectBaseMapTypeView; private string tempBaseMap; private Context context; private Button baseMapOkButton; private Button baseMapCancelButton; private RadioButton wmkRoadRadioButton; private RadioButton wmkAerialRadioButton; private RadioButton wmkAerialWithLabelsRadioButton; private RadioButton osmRadioButton; private RadioButton bingaRadioButton; private RadioButton bingrRadioButton; public SelectBaseMapTypeDialog(Context context, ISharedPreferences preferences) : base(context) { this.context = context; this.preferences = preferences; selectBaseMapTypeView = View.Inflate(context, Resource.Layout.SelectBaseMapTypeLayout, null); this.SetView(selectBaseMapTypeView); wmkRoadRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.wmkRoadRadioButton); wmkAerialRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.wmkAerialRadioButton); wmkAerialWithLabelsRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.wmkAerialWithLabelsRadioButton); osmRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.osmRadioButton); bingaRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.bingaRadioButton); bingrRadioButton = selectBaseMapTypeView.FindViewById<RadioButton>(Resource.Id.bingrRadioButton); wmkRoadRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; wmkAerialRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; wmkAerialWithLabelsRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; osmRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; bingaRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; bingrRadioButton.CheckedChange += BaseMapRadioButton_CheckedChange; baseMapOkButton = selectBaseMapTypeView.FindViewById<Button>(Resource.Id.OkButton); baseMapCancelButton = selectBaseMapTypeView.FindViewById<Button>(Resource.Id.CancelButton); baseMapOkButton.Click += BaseMapOkButton_Click; baseMapCancelButton.Click += (sender, args) => Cancel(); } public override void Show() { RefreshBaseMapTypeControls(); base.Show(); } private void BaseMapRadioButton_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e) { RadioButton radioButton = (RadioButton)sender; if (radioButton.Checked) { tempBaseMap = radioButton.Text; } } private void RefreshBaseMap() { BaseMapType mapType; string baseMapTypeString = tempBaseMap.Replace(" ", ""); if (Enum.TryParse(baseMapTypeString, true, out mapType)) Global.BaseMapType = mapType; switch (Global.BaseMapType) { case BaseMapType.WorldMapKitRoad: Global.WorldMapKitOverlay.MapType = WorldMapKitMapType.Road; Global.WorldMapKitOverlay.IsVisible = true; Global.OpenStreetMapOverlay.IsVisible = false; Global.BingMapsAerialOverlay.IsVisible = false; Global.BingMapsRoadOverlay.IsVisible = false; Global.MapView.Refresh(); break; case BaseMapType.WorldMapKitAerial: Global.WorldMapKitOverlay.MapType = WorldMapKitMapType.Aerial; Global.WorldMapKitOverlay.IsVisible = true; Global.OpenStreetMapOverlay.IsVisible = false; Global.BingMapsAerialOverlay.IsVisible = false; Global.BingMapsRoadOverlay.IsVisible = false; Global.MapView.Refresh(); break; case BaseMapType.WorldMapKitAerialWithLabels: Global.WorldMapKitOverlay.MapType = WorldMapKitMapType.AerialWithLabels; Global.WorldMapKitOverlay.IsVisible = true; Global.OpenStreetMapOverlay.IsVisible = false; Global.BingMapsAerialOverlay.IsVisible = false; Global.BingMapsRoadOverlay.IsVisible = false; Global.MapView.Refresh(); break; case BaseMapType.OpenStreetMap: Global.WorldMapKitOverlay.IsVisible = false; Global.OpenStreetMapOverlay.IsVisible = true; Global.BingMapsAerialOverlay.IsVisible = false; Global.BingMapsRoadOverlay.IsVisible = false; Global.MapView.Refresh(); break; case BaseMapType.BingMapsAerial: case BaseMapType.BingMapsRoad: string result = preferences.GetString(Global.PREFS_BINGMAPKEY, string.Empty); if (!string.IsNullOrEmpty(result)) { ((BingMapsOverlay)Global.MapView.Overlays[Global.BingMapsAerialOverlayKey]).ApplicationId = result; ((BingMapsOverlay)Global.MapView.Overlays[Global.BingMapsRoadOverlayKey]).ApplicationId = result; Global.MapView.Overlays[Global.WorldMapKitOverlayKey].IsVisible = false; Global.MapView.Overlays[Global.OpenStreetMapOverlayKey].IsVisible = false; Global.MapView.Overlays[Global.BingMapsAerialOverlayKey].IsVisible = Global.BaseMapType == BaseMapType.BingMapsAerial; Global.MapView.Overlays[Global.BingMapsRoadOverlayKey].IsVisible = Global.BaseMapType == BaseMapType.BingMapsRoad; } else { InputBingMapKeyDialog dialog = new InputBingMapKeyDialog(context, this, preferences); dialog.Show(); } break; } } private void BaseMapOkButton_Click(object sender, EventArgs e) { RefreshBaseMap(); Cancel(); } private void RefreshBaseMapTypeControls() { switch (Global.BaseMapType) { case BaseMapType.WorldMapKitRoad: wmkRoadRadioButton.Checked = true; break; case BaseMapType.WorldMapKitAerial: wmkAerialRadioButton.Checked = true; break; case BaseMapType.WorldMapKitAerialWithLabels: wmkAerialWithLabelsRadioButton.Checked = true; break; case BaseMapType.OpenStreetMap: osmRadioButton.Checked = true; break; case BaseMapType.BingMapsRoad: bingrRadioButton.Checked = true; break; case BaseMapType.BingMapsAerial: bingaRadioButton.Checked = true; break; default: break; } } } }
using Android.App; using Android.Content; using Android.Views; using Android.Widget; using System; using ThinkGeo.MapSuite.AndroidEdition; using ThinkGeo.MapSuite.Core; namespace MapSuiteEarthquakeStatistics { public class SelectDisplayTypeDialog : AlertDialog { private DisplayType displayType; private DisplayType oldDisplayType; private View selectDisplayTypeView; private LayerOverlay earthquakeOverlay; private HeatLayer earthquakeHeatLayer; private ShapeFileFeatureLayer earthquakePointLayer; private RadioButton heatRadioButton; private RadioButton isoRadioButton; private RadioButton pointRadioButton; private Button displayTypeOkButton; private Button displayTypeCancelButton; public SelectDisplayTypeDialog(Context context, DisplayType displayType) : base(context) { selectDisplayTypeView = View.Inflate(context, Resource.Layout.SelectDisplayStyleTypeLayout, null); this.SetView(selectDisplayTypeView); this.displayType = displayType; earthquakeOverlay = Global.MapView.Overlays[Global.EarthquakeOverlayKey] as LayerOverlay; earthquakePointLayer = earthquakeOverlay.Layers[Global.EarthquakePointLayerKey] as ShapeFileFeatureLayer; earthquakeHeatLayer = earthquakeOverlay.Layers[Global.EarthquakeHeatLayerKey] as HeatLayer; heatRadioButton = selectDisplayTypeView.FindViewById<RadioButton>(Resource.Id.HeatStyleRadioButton); isoRadioButton = selectDisplayTypeView.FindViewById<RadioButton>(Resource.Id.IsoLineStyleRadioButton); pointRadioButton = selectDisplayTypeView.FindViewById<RadioButton>(Resource.Id.PointStyleRadioButton); displayTypeOkButton = selectDisplayTypeView.FindViewById<Button>(Resource.Id.OkButton); displayTypeCancelButton = selectDisplayTypeView.FindViewById<Button>(Resource.Id.CancelButton); heatRadioButton.CheckedChange += DisplayTypeRadioButton_CheckedChange; isoRadioButton.CheckedChange += DisplayTypeRadioButton_CheckedChange; pointRadioButton.CheckedChange += DisplayTypeRadioButton_CheckedChange; displayTypeCancelButton.Click += DisplayTypeCancelButton_Click; displayTypeOkButton.Click += DisplayTypeOkButton_Click; } public override void Show() { oldDisplayType = displayType; base.Show(); } private void DisplayTypeRadioButton_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e) { if (sender.Equals(heatRadioButton) && heatRadioButton.Checked) { displayType = DisplayType.Heat; } else if (sender.Equals(isoRadioButton) && isoRadioButton.Checked) { displayType = DisplayType.ISOLine; } else if (sender.Equals(pointRadioButton) && pointRadioButton.Checked) { displayType = DisplayType.Point; } } private void DisplayTypeOkButton_Click(object sender, EventArgs e) { this.Cancel(); earthquakePointLayer.IsVisible = false; earthquakeHeatLayer.IsVisible = false; if (displayType == DisplayType.Heat) { earthquakeHeatLayer.IsVisible = true; } else if (displayType == DisplayType.Point) { earthquakePointLayer.IsVisible = true; } earthquakeOverlay.Refresh(); } private void DisplayTypeCancelButton_Click(object sender, EventArgs e) { this.Cancel(); displayType = oldDisplayType; switch (displayType) { case DisplayType.Heat: heatRadioButton.Checked = true; break; case DisplayType.ISOLine: isoRadioButton.Checked = true; break; case DisplayType.Point: pointRadioButton.Checked = true; break; } } } }
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Android.App; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly:|AssemblyTitle("MapSuiteEarthquakeStatistics")] [assembly: AssemblyDescription("")] [assembly:|AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly:|AssemblyProduct("MapSuiteEarthquakeStatistics")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly:|AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly:|ComVisible(false)] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly:|AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly:|AssemblyFileVersion("1.0.0.0")]
#pragma warning disable 1591 //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version:4.0.30319.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ [assembly:|global::Android.Runtime.ResourceDesignerAttribute("MapSuiteEarthquakeStatistics.Resource", IsApplication=true)] namespace MapSuiteEarthquakeStatistics { [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks",|"1.0.0.0")] public partial class Resource { static Resource() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } public static void UpdateIdValues() { global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_default256x256 = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_default256x256; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_default512x512 = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_default512x512; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_globe = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_globe; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_globe_Pressed = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_globe_Pressed; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Minus = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_Minus; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Minus_Pressed = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_Minus_Pressed; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_noImageTile = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_noImageTile; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Plus = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_Plus; global::ThinkGeo.MapSuite.AndroidEdition.Resource.Drawable.icon_mapsuite_Plus_Pressed = global::MapSuiteEarthquakeStatistics.Resource.Drawable.icon_mapsuite_Plus_Pressed; } public partial class Attribute { static Attribute() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int basemap = 2130837504; // aapt resource value: 0x7f020001 public const int capture = 2130837505; // aapt resource value: 0x7f020002 public const int clear = 2130837506; // aapt resource value: 0x7f020003 public const int crossicon = 2130837507; // aapt resource value: 0x7f020004 public const int displaytype = 2130837508; // aapt resource value: 0x7f020005 public const int displaytype_bing_aerial = 2130837509; // aapt resource value: 0x7f020006 public const int displaytype_bing_road = 2130837510; // aapt resource value: 0x7f020007 public const int displaytype_osm = 2130837511; // aapt resource value: 0x7f020008 public const int displaytype_wmk = 2130837512; // aapt resource value: 0x7f020009 public const int draw_polygon = 2130837513; // aapt resource value: 0x7f02000a public const int draw_polygon_check = 2130837514; // aapt resource value: 0x7f02000b public const int draw_Rectangle = 2130837515; // aapt resource value: 0x7f02000c public const int draw_Rectangle_check = 2130837516; // aapt resource value: 0x7f02000d public const int Icon = 2130837517; // aapt resource value: 0x7f02000e public const int icon_mapsuite_default256x256 = 2130837518; // aapt resource value: 0x7f02000f public const int icon_mapsuite_default512x512 = 2130837519; // aapt resource value: 0x7f020010 public const int icon_mapsuite_globe = 2130837520; // aapt resource value: 0x7f020011 public const int icon_mapsuite_globe_Pressed = 2130837521; // aapt resource value: 0x7f020012 public const int icon_mapsuite_Minus = 2130837522; // aapt resource value: 0x7f020013 public const int icon_mapsuite_Minus_Pressed = 2130837523; // aapt resource value: 0x7f020014 public const int icon_mapsuite_noImageTile = 2130837524; // aapt resource value: 0x7f020015 public const int icon_mapsuite_Plus = 2130837525; // aapt resource value: 0x7f020016 public const int icon_mapsuite_Plus_Pressed = 2130837526; // aapt resource value: 0x7f020017 public const int linearlayoutStyle = 2130837527; // aapt resource value: 0x7f020018 public const int MapSuite = 2130837528; // aapt resource value: 0x7f020019 public const int Pan_check = 2130837529; // aapt resource value: 0x7f02001a public const int Pan_KeyDown = 2130837530; // aapt resource value: 0x7f02001b public const int Pan_Uncheck = 2130837531; // aapt resource value: 0x7f02001c public const int panicon1 = 2130837532; // aapt resource value: 0x7f02001d public const int panicon1_check = 2130837533; // aapt resource value: 0x7f02001e public const int panicon1_on = 2130837534; // aapt resource value: 0x7f02001f public const int panicon2 = 2130837535; // aapt resource value: 0x7f020020 public const int panicon3 = 2130837536; // aapt resource value: 0x7f020021 public const int polygonicon = 2130837537; // aapt resource value: 0x7f020022 public const int rectangleicon = 2130837538; // aapt resource value: 0x7f020023 public const int recycleicon1 = 2130837539; // aapt resource value: 0x7f020024 public const int recycleicon2 = 2130837540; // aapt resource value: 0x7f020025 public const int save = 2130837541; // aapt resource value: 0x7f020026 public const int searchicon = 2130837542; // aapt resource value: 0x7f020027 public const int Slider = 2130837543; static Drawable() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Drawable() { } } public partial class Id { // aapt resource value: 0x7f050001 public const int BingMapsKeyEditText = 2131034113; // aapt resource value: 0x7f050003 public const int CancelButton = 2131034115; // aapt resource value: 0x7f050019 public const int ClearButton = 2131034137; // aapt resource value: 0x7f050017 public const int DrawPolygonButton = 2131034135; // aapt resource value: 0x7f050018 public const int DrawRectangleButton = 2131034136; // aapt resource value: 0x7f050022 public const int HeatStyleRadioButton = 2131034146; // aapt resource value: 0x7f050023 public const int IsoLineStyleRadioButton = 2131034147; // aapt resource value: 0x7f05001a public const int MoreOptionsButton = 2131034138; // aapt resource value: 0x7f050002 public const int OkButton = 2131034114; // aapt resource value: 0x7f050016 public const int PanButton = 2131034134; // aapt resource value: 0x7f050021 public const int PointStyleRadioButton = 2131034145; // aapt resource value: 0x7f050014 public const int ToolsLinearLayout = 2131034132; // aapt resource value: 0x7f050013 public const int androidMap = 2131034131; // aapt resource value: 0x7f05001f public const int bingaRadioButton = 2131034143; // aapt resource value: 0x7f050020 public const int bingrRadioButton = 2131034144; // aapt resource value: 0x7f050008 public const int dateRange = 2131034120; // aapt resource value: 0x7f050007 public const int depthRange = 2131034119; // aapt resource value: 0x7f05000f public const int depthValue = 2131034127; // aapt resource value: 0x7f05000e public const int latitudeValue = 2131034126; // aapt resource value: 0x7f050005 public const int linearLayout1 = 2131034117; // aapt resource value: 0x7f050009 public const int linearLayout3 = 2131034121; // aapt resource value: 0x7f050011 public const int locationValue = 2131034129; // aapt resource value: 0x7f05000d public const int longitudeValue = 2131034125; // aapt resource value: 0x7f050006 public const int magnitudeRange = 2131034118; // aapt resource value: 0x7f050010 public const int magnitudeValue = 2131034128; // aapt resource value: 0x7f050004 public const int mainLayout = 2131034116; // aapt resource value: 0x7f05001e public const int osmRadioButton = 2131034142; // aapt resource value: 0x7f05000a public const int queryButton = 2131034122; // aapt resource value: 0x7f05000b public const int queryResultTitleTextView = 2131034123; // aapt resource value: 0x7f050015 public const int radioGroup1 = 2131034133; // aapt resource value: 0x7f050012 public const int resultListView = 2131034130; // aapt resource value: 0x7f050000 public const int textView1 = 2131034112; // aapt resource value: 0x7f050025 public const int uploadDataTextView = 2131034149; // aapt resource value: 0x7f050024 public const int uploadProgressBar = 2131034148; // aapt resource value: 0x7f05001c public const int wmkAerialRadioButton = 2131034140; // aapt resource value: 0x7f05001d public const int wmkAerialWithLabelsRadioButton = 2131034141; // aapt resource value: 0x7f05001b public const int wmkRoadRadioButton = 2131034139; // aapt resource value: 0x7f05000c public const int yearValue = 2131034124; static Id() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Id() { } } public partial class Layout { // aapt resource value: 0x7f030000 public const int BingMapsKeyLayout = 2130903040; // aapt resource value: 0x7f030001 public const int Configuration = 2130903041; // aapt resource value: 0x7f030002 public const int listviewLayout = 2130903042; // aapt resource value: 0x7f030003 public const int Main = 2130903043; // aapt resource value: 0x7f030004 public const int RadioButtonTextColorSelector = 2130903044; // aapt resource value: 0x7f030005 public const int SelectBaseMapTypeLayout = 2130903045; // aapt resource value: 0x7f030006 public const int SelectDisplayStyleTypeLayout = 2130903046; // aapt resource value: 0x7f030007 public const int SelectorDrawPolygon = 2130903047; // aapt resource value: 0x7f030008 public const int SelectorDrawRectangle = 2130903048; // aapt resource value: 0x7f030009 public const int SelectorPan = 2130903049; // aapt resource value: 0x7f03000a public const int SplashLayout = 2130903050; static Layout() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Layout() { } } public partial class String { // aapt resource value: 0x7f040001 public const int ApplicationName = 2130968577; // aapt resource value: 0x7f040000 public const int Hello = 2130968576; static String() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private String() { } } } } #pragma warning restore 1591