====== Source Code DesktopEditionSample ShapefileEncryption CS 100417.zip ======
====Program.cs====
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace ShapefileEncryption
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new TestForm());
}
}
}
====TestForm.cs====
using System;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.IO;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.DesktopEdition;
namespace ShapefileEncryption
{
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
}
private void TestForm_Load(object sender, EventArgs e)
{
// encrypt each file
EncryptFile(@"..\..\Data\USStates.shp", @"..\..\Data\encrypted.shp");
EncryptFile(@"..\..\Data\USStates.shx", @"..\..\Data\encrypted.shx");
EncryptFile(@"..\..\Data\USStates.dbf", @"..\..\Data\encrypted.dbf");
EncryptFile(@"..\..\Data\USStates.idx", @"..\..\Data\encrypted.idx");
EncryptFile(@"..\..\Data\USStates.ids", @"..\..\Data\encrypted.ids");
}
private void btnLoad_Click(object sender, EventArgs e)
{
winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
winformsMap1.CurrentExtent = new RectangleShape(-180, 90, 180, -90);
ShapeFileFeatureLayer countryLayer = new ShapeFileFeatureLayer(@"encrypted.shp");
((ShapeFileFeatureSource)countryLayer.FeatureSource).StreamLoading += new EventHandler(MainForm_StreamLoading);
countryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
countryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
LayerOverlay testOverlay = new LayerOverlay();
testOverlay.Layers.Add("CountryLayer", countryLayer);
winformsMap1.Overlays.Add("testOverlay", testOverlay);
winformsMap1.Refresh();
}
// The encryption is just a sample (simply adds 1 on each byte)
private void EncryptFile(string sourceFileName, string encryptedFileName)
{
Stream stream = File.Open(sourceFileName, FileMode.Open);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = (byte)(bytes[i] - 1);
}
if (File.Exists(encryptedFileName)) File.Delete(encryptedFileName);
Stream encryptedStream = File.Create(encryptedFileName);
encryptedStream.Write(bytes, 0, bytes.Length);
encryptedStream.Close();
}
// This is the Decrypt method
private Stream DecryptFile(string encryptedFileName)
{
Stream stream = File.Open(encryptedFileName, FileMode.Open);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = (byte)(bytes[i] + 1);
}
return new MemoryStream(bytes);
}
void MainForm_StreamLoading(object sender, StreamLoadingEventArgs e)
{
string fileName = Path.GetFileName(e.AlternateStreamName);
// The DecryptFile method will return a stream which was loaded from the encrypted file and decrypted it as
// a stream.
e.AlternateStream = DecryptFile(@"..\..\Data\" + fileName);
}
private void winformsMap1_MouseMove(object sender, MouseEventArgs e)
{
//Displays the X and Y in screen coordinates.
statusStrip1.Items["toolStripStatusLabelScreen"].Text = "X:" + e.X + " Y:" + e.Y;
//Gets the PointShape in world coordinates from screen coordinates.
PointShape pointShape = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, new ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height);
//Displays world coordinates.
statusStrip1.Items["toolStripStatusLabelWorld"].Text = "(world) X:" + Math.Round(pointShape.X, 4) + " Y:" + Math.Round(pointShape.Y, 4);
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
}