User Tools

Site Tools


source_code_osmworldmapkitrenderingcoveragereporter.zip

Source Code OsmWorldMapKitRenderingCoverageReporter.zip

Program.cs

using System;
using System.Windows.Forms;
 
namespace WorldMapKitLayerUtility
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());       
        }
    }
}

MainForm.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
 
namespace WorldMapKitLayerUtility
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void btnBrowseDllFilePath_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "OsmWorldMapKitLayer.dll | OsmWorldMapKitLayer.dll";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                txtBoxDllFilePath.Text = dialog.FileName;
            }
        }
 
        private void btnBrowseCSVFilePath_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "CSV Files (*.csv)|*.csv";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                txtBoxCSVFilePath.Text = dialog.FileName;
            }
        }
 
        private void btnGenerateCSV_Click(object sender, EventArgs e)
        {
            string dllFilePath = txtBoxDllFilePath.Text;
            string csvFilePath = txtBoxCSVFilePath.Text;
 
            if (Path.GetFileName(dllFilePath) == "OsmWorldMapKitLayer.dll" && File.Exists(dllFilePath) && Path.GetExtension(csvFilePath) == ".csv")
            {
                try
                {
                    ExportFeatureLayerTable(dllFilePath, csvFilePath);
                    MessageBox.Show("Exported to " + csvFilePath, "Success", MessageBoxButtons.OK);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK);
                }
            }
            else
            {
                MessageBox.Show("Invalid filepath(s)!", "Error", MessageBoxButtons.OK);
            }
 
        }
 
        private void btnCancel_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void ExportFeatureLayerTable(string dllFilePath, string outputFilePath)
        {
            Dictionary<int, Collection<FeatureLayer>> featureLayerTable = GetAllFeatureLayersCore(GetLayersFromAssembly(dllFilePath));
 
            FileStream outputStream = new FileStream(outputFilePath, FileMode.Create);
            StreamWriter fileWriter = new StreamWriter(outputStream);
 
            //set up first line of feature layer names
            fileWriter.Write(",");
            for (int i = 1; i <= 20; i++)
            {
                fileWriter.Write("ZL" + i + ",");
            }
            fileWriter.WriteLine("");
 
            foreach (FeatureLayer featureLayer in featureLayerTable[0])
            {
                fileWriter.Write(featureLayer.Name);
 
                for (int j = 1; j <= 20; j++)
                {
                    if (featureLayerTable[j].Contains(featureLayer))
                        fileWriter.Write(",X");
                    else
                        fileWriter.Write(",");
                }
                fileWriter.WriteLine("");
            }
            fileWriter.Close();
            outputStream.Close();
        }
 
        private Collection<FeatureLayer> GetLayersFromAssembly(string dllFilePath)
        {
            Assembly osmWorldMapKitLayerDll = Assembly.LoadFile(dllFilePath);
            Type osmWorldMapKitLayer = osmWorldMapKitLayerDll.GetType("ThinkGeo.MapSuite.Core.OsmWorldMapKitLayer");
            Type osmWorldMapKitDatabaseType = osmWorldMapKitLayerDll.GetType("ThinkGeo.MapSuite.Core.OsmWorldMapKitDatabaseType");
 
            object osmWorldMapKitLayerInstance = Activator.CreateInstance(osmWorldMapKitLayer, null);
 
            MethodInfo methodInfo = osmWorldMapKitLayer.GetMethod("Open");
            methodInfo.Invoke(osmWorldMapKitLayerInstance, null);
 
            PropertyInfo layersInfo = osmWorldMapKitLayer.GetProperty("Layers");
            var osmWorldMapKitLayers = layersInfo.GetValue(osmWorldMapKitLayerInstance, null);
 
            return (Collection<FeatureLayer>)osmWorldMapKitLayers;
        }
 
        private bool CheckIfDefaultStyleSet(ZoomLevel zoomLevel)
        {
            bool defaultStyleSet = true;
 
            ZoomLevel defaultZoomLevel = new ZoomLevel();
 
            if (!(zoomLevel.DefaultAreaStyle == defaultZoomLevel.DefaultAreaStyle))
                defaultStyleSet = false;
            else if (!(zoomLevel.DefaultLineStyle == defaultZoomLevel.DefaultLineStyle))
                defaultStyleSet = false;
            else if (!(zoomLevel.DefaultPointStyle == defaultZoomLevel.DefaultPointStyle))
                defaultStyleSet = false;
            else if (!(zoomLevel.DefaultTextStyle == defaultZoomLevel.DefaultTextStyle))
                defaultStyleSet = false;
 
            return defaultStyleSet;
        }
 
        private Dictionary<int, Collection<FeatureLayer>> GetAllFeatureLayersCore(Collection<FeatureLayer> featureLayers)
        {
            Dictionary<int, Collection<FeatureLayer>> featureLayersInAllZoomLevels = new Dictionary<int, Collection<FeatureLayer>>();
            for (int i = 0; i <= 20; i++)
            {
                featureLayersInAllZoomLevels.Add(i, new Collection<FeatureLayer>());
            }
 
            foreach (FeatureLayer layer in featureLayers)
            {
                featureLayersInAllZoomLevels[0].Add(layer);
                Collection<ZoomLevel> layerZoomLevels = layer.ZoomLevelSet.GetZoomLevels();
 
                for (int i = 1; i <= 20; i++)
                {
                    ZoomLevel zoomLevel = layerZoomLevels[i - 1];
 
                    if (!(zoomLevel.CustomStyles.Count == 0 || CheckIfDefaultStyleSet(zoomLevel)))
                    {
                        if ((int)zoomLevel.ApplyUntilZoomLevel == 0)
                        {
                            if (!featureLayersInAllZoomLevels[i].Contains(layer))
                                featureLayersInAllZoomLevels[i].Add(layer);
                        }
                        else
                        {
                            for (int j = i; j <= (int)zoomLevel.ApplyUntilZoomLevel; j++)
                            {
                                if (!featureLayersInAllZoomLevels[j].Contains(layer))
                                    featureLayersInAllZoomLevels[j].Add(layer);
                            }
                        }
                    }
                }
            }
            return featureLayersInAllZoomLevels;
        }
 
        private void btnViewRenderingCoverage_Click(object sender, EventArgs e)
        {
            string dllFilePath = txtBoxDllFilePath.Text;
            dataGridRenderingCoverage.Rows.Clear();
            dataGridRenderingCoverage.Columns.Clear();
            if (Path.GetFileName(dllFilePath) == "OsmWorldMapKitLayer.dll" && File.Exists(dllFilePath))
            {
                Dictionary<int, Collection<FeatureLayer>> featureLayerTable = GetAllFeatureLayersCore(GetLayersFromAssembly(dllFilePath));
 
                dataGridRenderingCoverage.Columns.Add("", "");
                dataGridRenderingCoverage.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                for (int i = 1; i <= 20; i++)
                {
                    dataGridRenderingCoverage.Columns.Add("ZL" + i, "ZL" + i);
                    dataGridRenderingCoverage.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;
                }
 
                dataGridRenderingCoverage.Rows.Add(featureLayerTable[0].Count);
 
                for (int i = 0; i < featureLayerTable[0].Count; i++)
                {
                    dataGridRenderingCoverage.Rows[i].Cells[0].Value = featureLayerTable[0][i].Name;
                }
 
                for (int i = 1; i <= 20; i++)
                {
                    for (int j = 0; j < featureLayerTable[0].Count; j++)
                    {
                        if (featureLayerTable[i].Contains(featureLayerTable[0][j]))
                        {
                            dataGridRenderingCoverage.Rows[j].Cells[i].Value = "X";
                        }
                    }
                }
 
            }
        }
    }
}

MainForm.Designer.cs

namespace WorldMapKitLayerUtility
{
    partial class MainForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
 
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
            this.txtBoxDllFilePath = new System.Windows.Forms.TextBox();
            this.btnGenerateCSV = new System.Windows.Forms.Button();
            this.btnBrowseDllFilePath = new System.Windows.Forms.Button();
            this.btnBrowseCSVFilePath = new System.Windows.Forms.Button();
            this.txtBoxCSVFilePath = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.btnCancel = new System.Windows.Forms.Button();
            this.dataGridRenderingCoverage = new System.Windows.Forms.DataGridView();
            this.btnViewRenderingCoverage = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridRenderingCoverage)).BeginInit();
            this.SuspendLayout();
            // 
            // txtBoxDllFilePath
            // 
            this.txtBoxDllFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.txtBoxDllFilePath.Location = new System.Drawing.Point(219, 14);
            this.txtBoxDllFilePath.Name = "txtBoxDllFilePath";
            this.txtBoxDllFilePath.Size = new System.Drawing.Size(366, 20);
            this.txtBoxDllFilePath.TabIndex = 0;
            // 
            // btnGenerateCSV
            // 
           this.btnGenerateCSV.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnGenerateCSV.Location = new System.Drawing.Point(644, 579);
            this.btnGenerateCSV.Name = "btnGenerateCSV";
            this.btnGenerateCSV.Size = new System.Drawing.Size(101, 36);
            this.btnGenerateCSV.TabIndex = 2;
            this.btnGenerateCSV.Text = "Generate CSV";
            this.btnGenerateCSV.UseVisualStyleBackColor = true;
            this.btnGenerateCSV.Click += new System.EventHandler(this.btnGenerateCSV_Click);
            // 
            // btnBrowseDllFilePath
            // 
            this.btnBrowseDllFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnBrowseDllFilePath.Location = new System.Drawing.Point(591, 12);
            this.btnBrowseDllFilePath.Name = "btnBrowseDllFilePath";
            this.btnBrowseDllFilePath.Size = new System.Drawing.Size(84, 23);
            this.btnBrowseDllFilePath.TabIndex = 3;
            this.btnBrowseDllFilePath.Text = "Browse...";
            this.btnBrowseDllFilePath.UseVisualStyleBackColor = true;
            this.btnBrowseDllFilePath.Click += new System.EventHandler(this.btnBrowseDllFilePath_Click);
            // 
            // btnBrowseCSVFilePath
            // 
           this.btnBrowseCSVFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnBrowseCSVFilePath.Location = new System.Drawing.Point(532, 588);
            this.btnBrowseCSVFilePath.Name = "btnBrowseCSVFilePath";
            this.btnBrowseCSVFilePath.Size = new System.Drawing.Size(84, 23);
            this.btnBrowseCSVFilePath.TabIndex = 5;
            this.btnBrowseCSVFilePath.Text = "Browse...";
            this.btnBrowseCSVFilePath.UseVisualStyleBackColor = true;
            this.btnBrowseCSVFilePath.Click += new System.EventHandler(this.btnBrowseCSVFilePath_Click);
            // 
            // txtBoxCSVFilePath
            // 
           this.txtBoxCSVFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.txtBoxCSVFilePath.Location = new System.Drawing.Point(179, 591);
            this.txtBoxCSVFilePath.Name = "txtBoxCSVFilePath";
            this.txtBoxCSVFilePath.Size = new System.Drawing.Size(347, 20);
            this.txtBoxCSVFilePath.TabIndex = 4;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(9, 17);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(204, 13);
            this.label1.TabIndex = 6;
            this.label1.Text = "Select OSMWorldMapKitLayer.dll filepath:";
            // 
            // label2
            // 
            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(9, 595);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(166, 13);
            this.label2.TabIndex = 7;
            this.label2.Text = "Select filepath to save .csv file to:";
            // 
            // btnCancel
            // 
            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnCancel.Location = new System.Drawing.Point(751, 579);
            this.btnCancel.Name = "btnCancel";
            this.btnCancel.Size = new System.Drawing.Size(101, 36);
            this.btnCancel.TabIndex = 8;
            this.btnCancel.Text = "Close";
            this.btnCancel.UseVisualStyleBackColor = true;
            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
            // 
            // dataGridRenderingCoverage
            // 
            this.dataGridRenderingCoverage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.dataGridRenderingCoverage.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
            dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
            this.dataGridRenderingCoverage.DefaultCellStyle = dataGridViewCellStyle1;
            this.dataGridRenderingCoverage.Location = new System.Drawing.Point(12, 63);
            this.dataGridRenderingCoverage.Name = "dataGridRenderingCoverage";
            this.dataGridRenderingCoverage.Size = new System.Drawing.Size(840, 510);
            this.dataGridRenderingCoverage.TabIndex = 9;
            // 
            // btnViewRenderingCoverage
            // 
           this.btnViewRenderingCoverage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnViewRenderingCoverage.Location = new System.Drawing.Point(702, 8);
            this.btnViewRenderingCoverage.Name = "btnViewRenderingCoverage";
            this.btnViewRenderingCoverage.Size = new System.Drawing.Size(150, 45);
            this.btnViewRenderingCoverage.TabIndex = 10;
            this.btnViewRenderingCoverage.Text = "View Rendering Coverage";
            this.btnViewRenderingCoverage.UseVisualStyleBackColor = true;
            this.btnViewRenderingCoverage.Click += new System.EventHandler(this.btnViewRenderingCoverage_Click);
            // 
            // MainForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(864, 621);
            this.Controls.Add(this.btnViewRenderingCoverage);
            this.Controls.Add(this.dataGridRenderingCoverage);
            this.Controls.Add(this.btnCancel);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.btnBrowseCSVFilePath);
            this.Controls.Add(this.txtBoxCSVFilePath);
            this.Controls.Add(this.btnBrowseDllFilePath);
            this.Controls.Add(this.btnGenerateCSV);
            this.Controls.Add(this.txtBoxDllFilePath);
            this.MaximizeBox = false;
            this.Name = "MainForm";
            this.Text = "OsmWorldMapKit Layer Utility";
            ((System.ComponentModel.ISupportInitialize)(this.dataGridRenderingCoverage)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.TextBox txtBoxDllFilePath;
        private System.Windows.Forms.Button btnGenerateCSV;
        private System.Windows.Forms.Button btnBrowseDllFilePath;
        private System.Windows.Forms.Button btnBrowseCSVFilePath;
        private System.Windows.Forms.TextBox txtBoxCSVFilePath;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button btnCancel;
        private System.Windows.Forms.DataGridView dataGridRenderingCoverage;
        private System.Windows.Forms.Button btnViewRenderingCoverage;
    }
}
source_code_osmworldmapkitrenderingcoveragereporter.zip.txt · Last modified: 2016/07/21 02:28 by tgwikiupdate