====== Source Code WpfDesktopEditionSample MultipleJpeg2000RasterLayer_08_30_2016.zip ======
====App.xaml.cs====
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace SelectAndDragFeature
{
///
/// Interaction logic for App.xaml
///
public partial class App : Application
{
}
}
====MainWindow.xaml.cs====
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.WpfDesktopEdition;
namespace MultipleJpeg2000RasterLayerSample
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
string directory = txtFolder.Text;
if (!Directory.Exists(directory))
{
return;
}
// Gets the files path.
var filesPath = Directory.GetFiles(directory).TakeWhile(filePath => { return Path.GetExtension(filePath).ToLowerInvariant().Equals(".jp2"); });
// Instantiates MultipleJpeg2000RasterLayer with the files path.
var layer = new MultipleJpeg2000RasterLayer(filesPath);
// Adds the MultipleJpeg2000RasterLayer into the map.
var overlay = new LayerOverlay();
overlay.Layers.Add(layer);
wpfMap.Overlays.Add(overlay);
layer.Open();
wpfMap.MapUnit = GeographyUnit.Meter;
wpfMap.CurrentExtent = layer.GetBoundingBox();
wpfMap.Refresh();
}
private void btnSelectFolder_Click(object sender, RoutedEventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtFolder.Text = fbd.SelectedPath;
btnLoad.IsEnabled = true;
}
}
}
}
====MultipleJpeg2000RasterLayer.cs====
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ThinkGeo.MapSuite.Core
{
public class MultipleJpeg2000RasterLayer : Layer
{
private Collection featureLayers;
public override bool HasBoundingBox
{
get
{
return true;
}
}
public MultipleJpeg2000RasterLayer()
{
featureLayers = new Collection();
}
public MultipleJpeg2000RasterLayer(IEnumerable imagePathFilenames)
{
featureLayers = new Collection();
foreach (var imagePathFilename in imagePathFilenames)
{
featureLayers.Add(new Jpeg2000RasterLayer(imagePathFilename));
}
}
public MultipleJpeg2000RasterLayer(IEnumerable imagePathFilenames, IEnumerable worldfilePathFilenames)
{
featureLayers = new Collection();
for (int i = 0; i < imagePathFilenames.Count(); i++)
{
featureLayers.Add(new Jpeg2000RasterLayer(imagePathFilenames.ElementAt(i), worldfilePathFilenames.ElementAt(i)));
}
}
public MultipleJpeg2000RasterLayer(IEnumerable imagePathFilenames, IEnumerable imageExtents)
{
featureLayers = new Collection();
for (int i = 0; i < imagePathFilenames.Count(); i++)
{
featureLayers.Add(new Jpeg2000RasterLayer(imagePathFilenames.ElementAt(i), imageExtents.ElementAt(i)));
}
}
protected override void DrawCore(GeoCanvas canvas, Collection labelsInAllLayers)
{
foreach (var featureLayer in featureLayers)
{
featureLayer.Draw(canvas, labelsInAllLayers);
}
}
protected override void OpenCore()
{
foreach (var featureLayer in featureLayers)
{
featureLayer.Open();
}
}
protected override bool IsOpenCore
{
get
{
base.IsOpenCore = true;
foreach (var featureLayer in featureLayers)
{
if (!featureLayer.IsOpen) { base.IsOpenCore = false; }
}
return base.IsOpenCore;
}
set
{
base.IsOpenCore = value;
}
}
protected override void CloseCore()
{
if (IsOpen)
{
foreach (var featureLayer in featureLayers)
{
featureLayer.Close();
}
}
}
protected override Layer CloneDeepCore()
{
MultipleJpeg2000RasterLayer newLayer = new MultipleJpeg2000RasterLayer();
foreach (var featureLayer in featureLayers)
{
newLayer.featureLayers.Add(featureLayer.CloneDeep() as Jpeg2000RasterLayer);
}
return newLayer;
}
protected override RectangleShape GetBoundingBoxCore()
{
RectangleShape boundingBox = null;
foreach (var featureLayer in featureLayers)
{
if (boundingBox == null)
{
boundingBox = featureLayer.GetBoundingBox();
}
else
{
boundingBox.ExpandToInclude(featureLayer.GetBoundingBox());
}
}
return boundingBox;
}
}
}