Wednesday, May 31, 2017

Prevent WPF Global Keyboard Hook from stops working after hitting keys a while C# .NET

Be The First To Comment
The article written by Dylan Currier, Low Level Global Keyboard Hook / Sink in C# .NET is one the simple, easily understandable, and and working post on Global Keyboard hook out there in internet. It worked in my WPF application and I added following line in the WPF app to refresh hook after each key press- IDK  if it is write or wrong, more likely to be a wrong practice to hook/unhook every time but it gets the job done. The primary reason to refresh hook is to prevent app hanging (not responding to the key press) after few clicks on the WPF button.

void _listener_OnKeyPressed(object sender, KeyPressedArgs e)
        {
           
          _listener.UnHookKeyboard();
          _listener.HookKeyboard();
        }

Following is the video from Dylan Currier  on Low Level Keyboard Hook in C# / .NET"


Wednesday, May 17, 2017

Code snippet: Identify to which polygon a point belong to?

Be The First To Comment
Code sample to find point inside a polygon in shape file using GDAL/OGR 2.x and C#.


using OSGeo.OGR;
using OSGeo.OSR;
using OSGeo.GDAL;
1:  public void FindPolygonBelongsToPoint()   
2:      {  
3:        try   
4:        {  
5:          var shapePath = @"C:\Locations_WGS84.shp";  
6:          Ogr.RegisterAll();  
7:          OSGeo.OGR.Driver shapeDriver = Ogr.GetDriverByName("ESRI Shapefile");  
8:          DataSource shape = shapeDriver.Open(shapePath, 0);  
9:          Layer layer = shape.GetLayerByIndex(0);  
10:    
11:          Feature polygonFeature = layer.GetNextFeature();  
12:    
13:          long featureCountInLayer = layer.GetFeatureCount(1);  
14:          for (int i = 1; i <= featureCountInLayer; i++) {  
15:    
16:            Geometry polygonGeom = polygonFeature.GetGeometryRef();  
17:    
18:            string coordinates = "POINT (-100.726 38.995)";  
19:    
20:            SpatialReference spatialRef = layer.GetSpatialRef();  
21:            Geometry point = Ogr.CreateGeometryFromWkt(ref coordinates, spatialRef);  
22:    
23:            bool isInside = point.Within(polygonGeom);  
24:    
25:            if (isInside)  
26:            {  
27:              var val = polygonFeature.GetFieldAsString(4);  
28:              Console.WriteLine("Found one");  
29:            }  
30:    
31:            polygonFeature = layer.GetNextFeature();            
32:          }         
33:            
34:        }  
35:        catch (Exception ex)   
36:        {  
37:    
38:          Console.WriteLine(ex.Message);  
39:        }          
40:        
41:      }  

Tuesday, May 2, 2017

Code snippet: To highlight selected feature in ArcMap programmatically using ArcObjects

Be The First To Comment
Code snippet to highlight selected feature in ArcMap programmatically using ArcObjects and return the STGeomFromWKB   string of selected feature.

To return the geometry you should import Microsoft.SqlServer.Types  from Nuget and SqlServerSpatial140.dll  from C:\Windows\System32

 using System;  
 using System.Collections.Generic;  
 using System.Data.SqlTypes;  
 using System.Linq;  
 using System.Runtime.InteropServices;  
 using System.Text;  
 using System.Windows;  
 using ESRI.ArcGIS.ArcMapUI;  
 using ESRI.ArcGIS.Carto;  
 using ESRI.ArcGIS.Catalog;  
 using ESRI.ArcGIS.CatalogUI;  
 using ESRI.ArcGIS.Desktop.AddIns;  
 using ESRI.ArcGIS.Display;  
 using ESRI.ArcGIS.esriSystem;  
 using ESRI.ArcGIS.Framework;  
 using ESRI.ArcGIS.Geodatabase;  
 using ESRI.ArcGIS.Geometry;  
 using Microsoft.SqlServer.Types;  
   
   
 namespace Test.Addin.ArcCommands  
 {  
   class SelectFeatureTool : ESRI.ArcGIS.Desktop.AddIns.Tool  
   {  
     protected override void OnMouseDown(MouseEventArgs arg)  
     {  
       IMxDocument mxDocument = ArcMap.Application.Document as IMxDocument;  
       IActiveView activeView = mxDocument.ActiveView;  
       IMap map = mxDocument.FocusMap;  
       ILayer layer = map.get_Layer(0); //Get 1st Layer  
       IFeatureLayer featureLayer = (IFeatureLayer) layer;  
   
       IPoint identifyPoint = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y);  
       ESRI.ArcGIS.Carto.IIdentify identifyLayer = (IIdentify)layer;  
       IArray array = identifyLayer.Identify(identifyPoint);  
         
       int oid = -1;  
       if (array != null)  
       {  
         object obj = array.get_Element(0);  
         IFeatureIdentifyObj fobj = obj as IFeatureIdentifyObj;  
         IRowIdentifyObject irow = fobj as IRowIdentifyObject;  
         IFeature feature = irow.Row as IFeature;  
         oid = feature.OID;  
       }  
       HighlightClickedFeature(featureLayer, oid, activeView);  
     }  
   

Friday, April 14, 2017

Code Snippet: Select feature polygon(s) on Mouse Click ArcObjects C#

Be The First To Comment
Code snippet of custom feature(s) selection tool on mouse click and highlight it using ArcObjects and C#.

 class SelectFeatureTool : ESRI.ArcGIS.Desktop.AddIns.Tool  
   {  
     protected override void OnMouseDown(MouseEventArgs arg)  
     {  
       IMxDocument mxDocument = ArcMap.Application.Document as IMxDocument;  
       IActiveView activeView = mxDocument.ActiveView;  
       IMap map = mxDocument.FocusMap;  
       ILayer layer = map.get_Layer(0); //Get 1st Layer  
       IFeatureLayer featureLayer = (IFeatureLayer) layer;  
   
       IPoint identifyPoint = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y);  
       ESRI.ArcGIS.Carto.IIdentify identifyLayer = (IIdentify)layer;  
       IArray array = identifyLayer.Identify(identifyPoint);  
         
       int oid = -1;  
       if (array != null)  
       {  
         object obj = array.get_Element(0);  
         IFeatureIdentifyObj fobj = obj as IFeatureIdentifyObj;  
         IRowIdentifyObject irow = fobj as IRowIdentifyObject;  
         IFeature feature = irow.Row as IFeature;  
         oid = feature.OID;  
       }  
       HighlightClickedFeature(featureLayer, oid, activeView);  
     }  
   

Wednesday, March 22, 2017

Catch Exception - Attempted to read or write protected memory in ESRI ArcObjects .Net 4.0 Framework

Be The First To Comment
First - Don't write the code to throw "Attempted to read or write protected memory" ..it is bad.

Second - If you are working on legacy codes and COM objects that throws "Attempted to read or write protected memory" while writing ArcMap add-ins, catch exceptions to prevent application crash, in my case ArcMap.


Step #1 - Add following snippet to config file - app.config for Arc-addin

<configuration>
   <runtime>
      <legacyCorruptedStateExceptionsPolicy enabled="true" />
   </runtime>
</configuration>
Step #2

Add -

[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
on the top of function you are tying catch the exception

[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
public IFeatureLayer GetOrCreateFeatureLayer(string path, esriGeometryType type, ISpatialReference sr)
{
//body
}

Thursday, January 19, 2017

Code snippet : Create/update polygon attribute fields using Ogr and ESRI Arcobjects

Be The First To Comment
A code snippet example to check if a feature is standalone ESRI Shape or featureclass inside ESRI Gdb, then add new filed or update attribute value in attribute table .... standalone shape/features are created/updated using GDAL/OGR implementation and feature/featureclass stored in ESRI personal GDB are created/updated using ESRI ArcObjects.  Any solution to replace later with GDAL/Ogr is highly appreciated.  Please comment below if you find one.

 public void AddUpdateAttributeField(string oldFeatureFile)  
     {  
       DriverUtils.RegisterOgrDriver();  
       DataSource dataSource;  
       Layer layer;  
       var isShapeFile = IsShapeInGdb(oldFeatureFile);  
       if (isShapeFile)  
       {  
         dataSource = Ogr.Open(oldFeatureFile, 1); //second argument in open specifies mode of data, 1 RW & 0 readonly mode  
         layer = dataSource.GetLayerByIndex(0);  
         FieldDefn gdalFiedlDefn = new FieldDefn("FID_GDAL",FieldType.OFTInteger);  
         layer.CreateField(gdalFiedlDefn, 0);  
         Feature feature = layer.GetNextFeature();  
         while (feature!= null)  
         {  
           feature.SetField("FID_GDAL",feature.GetFID()); // Add FID shapefile  
           layer.SetFeature(feature);  
           feature = layer.GetNextFeature();  
         }  
         dataSource.FlushCache();  
       }  
       else  
       {  
         try  
         {  
           EnableEsriLiscences();  
           string gdbPath = Path.GetDirectoryName(oldFeatureFile);  
           string featureName = Path.GetFileNameWithoutExtension(oldFeatureFile);  
           IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();  
           IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(gdbPath, 1);  
           IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(featureName);  
           IFields fields = featureClass.Fields;  
           if (fields.FindField("FID_GDAL") == -1)  
           {  
             // Create a Int field called "FID_GDAL" for the fields collection

Friday, January 13, 2017

Code snippet: Create new Field in a Shape File using GDAL/OGR in C#

Be The First To Comment
Add new field in existing shape file using OGR in C#.
 public void AddAttributeField(string oldShapeFile)  
     {  
       Ogr.RegisterAll();  
       DataSource dataSource = Ogr.Open(oldShapeFile, 1); //second argument in open specifies mode of data, 1 RW & 0 readonly mode  
       Layer layer = dataSource.GetLayerByIndex(0);  
       FieldDefn gdalFiedlDefn = new FieldDefn("NEW_FIELD",FieldType.OFTInteger);  
       layer.CreateField(gdalFiedlDefn, 1);  
       Feature feature = layer.GetNextFeature();  
       while (feature!= null)  
       {  
         feature.SetField("NEW_FIELD",feature.GetFID()); // Populate new field with feature FID  
         layer.SetFeature(feature);  
         feature = layer.GetNextFeature();  
       }  
       dataSource.FlushCache();  
     }  

Friday, August 19, 2016

Code snippet: Open Folder Browser Dialog in WPF

Be The First To Comment
Install WPFFolderBrowser 1.0.2 from nuget gallery to use the Windows Vista / Windows 7 Folder Browser Dialog from your WPF projects, without any additional dependencies.

Install-Package WPFFolderBrowser
then import WPFFolderBrowser

using WPFFolderBrowser;
private void BrowseFolder()
        {
            WPFFolderBrowserDialog dd = new WPFFolderBrowserDialog();
            var result = dd.ShowDialog();
            if (result.HasValue)
            {
                TxtFvsAccessDbPath = dd.FileName;
            }
        }

Code snippet: WPF ListView SelectionChanged Event Handling in ViewModel

Be The First To Comment
Solution from Dhaval Patel in Sliverlight application works perfectly on my WPF application. I prefer his idea because it is more clear and cleaner than other solutions that  I have came with. The event handling approach explained as -"This is the way where You can Reach the Selection changed events in Your MVVM Application First Of all i tell you that Command Property only work in Button now we have to Explicitly binding that property in our Selection Changed event like List box or combo box in Your XMAL file"
<ListBox Name="MyListBox" ItemsSource="{Binding ListItems}" Height="150" Width="150" Margin="281,32,-31,118">

        <Local:Interaction.Triggers>
            <Local:EventTrigger EventName="SelectionChanged">
                <Local:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=MyListBox,Path=SelectedItem}"/>
            </Local:EventTrigger>
        </Local:Interaction.Triggers>
    </ListBox>
for this you have to add dll Syatem.Windows.Interactivity now u have to add references in your xaml file namespace like
 xmlns:Local="clr-namespace:System.Windows.Interactivityassembly=System.Windows.Interactivity"

Thursday, August 18, 2016

Code snippet: Data binding between ViewModel and Radio Button in WPF

Be The First To Comment
Following example shows the data binding between radio buttons and ViewModel in WPF.

Parts of View.xaml

<Grid.Resources>
    <Utilities:RadioHelper x:Key="RadioConverter" />
    <Utilities:RadioHelper x:Key="InverseRadioConverter" Inverse="True" />
</Grid.Resources>
<RadioButton Name="radFvsOracle" GroupName="fvsStorage" Content="Oracle" Margin="7,0,0,0" IsChecked="{Binding Path=RadFvsResults, Converter= {StaticResource ResourceKey=RadioConverter}}"></RadioButton>
<RadioButton Name="radFvsAccess" GroupName="fvsStorage" Content="Access" Grid.Column="2" Margin="11,0,0,0" IsChecked="{Binding Path=RadFvsResults, Converter= {StaticResource ResourceKey=InverseRadioConverter}}"></RadioButton>

Parts of RadioHelper.cs

public class RadioHelper:IValueConverter 
    {
        public bool Inverse { get; set; }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                bool boolValue = (bool)value;
                return this.Inverse ? !boolValue : boolValue;
            }
            return Binding.DoNothing;
       }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool boolValue = (bool)value;
            if (!boolValue)
            {
                    return Binding.DoNothing;
            }
            return !this.Inverse;
        }
    }

Friday, August 12, 2016

Databind between View and ViewModel for PasswordBox WPF

Be The First To Comment
"When you try to databind the password property of a PasswordBox you will recognize that you cannot do data binding on it. The reason for this is, that the password property is not backed by a DependencyProperty.

The reason is databinding passwords is not a good design for security reasons and should be avoided. But sometimes this security is not necessary, then it's only cumbersome that you cannot bind to the password property. In this special cases you can take advantage of the following PasswortBoxHelper.

The PasswordHelper is attached to the password box by calling the PasswordHelper.Attach property. The attached property PasswordHelper.Password provides a bindable copy of the original password property of the PasswordBox control."

Published on -


PasswordHelper.cs
1:  public static class PasswordHelper  
2:  {  
3:    public static readonly DependencyProperty PasswordProperty =  
4:      DependencyProperty.RegisterAttached("Password",  
5:      typeof(string), typeof(PasswordHelper),  
6:      new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));  
7:     
8:    public static readonly DependencyProperty AttachProperty =  
9:      DependencyProperty.RegisterAttached("Attach",  
10:      typeof(bool), typeof(PasswordHelper), new PropertyMetadata(false, Attach));  
11:     
12:    private static readonly DependencyProperty IsUpdatingProperty =  
13:      DependencyProperty.RegisterAttached("IsUpdating", typeof(bool),   
14:      typeof(PasswordHelper));  
15:     
16:     
17:    public static void SetAttach(DependencyObject dp, bool value)  
18:    {  
19:      dp.SetValue(AttachProperty, value);  
20:    }  
21:     
22:    public static bool GetAttach(DependencyObject dp)  
23:    {  
24:      return (bool)dp.GetValue(AttachProperty);  
25:    }  
26:     
27:    public static string GetPassword(DependencyObject dp)  
28:    {  
29:      return (string)dp.GetValue(PasswordProperty);  
30:    }  
31:     

Tuesday, May 31, 2016

Code Snippet: Set default database schema in Nhibernate SessionFactory

Be The First To Comment
1:  //Setup oracle database connection and connection pool  
2:    public class OracleConnectionManager  
3:    {  
4:      private static string _userName;  
5:      private static string _password;  
6:    
7:      public OracleConnectionManager(string userName, string password)  
8:      {  
9:        _userName = userName;  
10:        _password = password;  
11:      }  
12:    
13:      private static ISessionFactory _sessionFactory;  
14:      private static ISessionFactory SessionFactory { get  
15:        {  
16:          if(_sessionFactory == null)  
17:          {  
18:            var connectionString = DatabaseConnections.GetOracleConnectionsString(_userName,_password);  
19:              
20:            //Nhibernate Oracle database configuration  
21:            var configuration = new Configuration();  
22:            configuration.DataBaseIntegration(db =>  
23:            {  
24:              db.ConnectionProvider<NHibernate.Connection.DriverConnectionProvider>();  
25:              db.Dialect<NHibernate.Dialect.Oracle10gDialect>();  
26:              db.Driver<NHibernate.Driver.OracleDataClientDriver>();  
27:              db.ConnectionString = connectionString;  
28:             });  
29:    
30:            // Setup default schema  
31:            configuration.SetProperty(Environment.DefaultSchema, "DB_SCHEMA_NAME");  

Thursday, May 26, 2016

Setting up automatic product or build version increment using JENKINS for .NET projects

Be The First To Comment
Steps for setting up automatic product or build version increment using JENKINS Continious Integration server and Visual Studio for .NET projects

Part A - Configure Visual Studio Solution

1. Copy the "AssemblyInfo.cs" from your project solutions and rename into "AssemblyInfo.cs.template"



2. Add a file called "AssemblyInfo.cs.template" and replace with these two lines:
             [assembly: AssemblyVersion("#VERSION_NUMBER#")]
             [assembly: AssemblyFileVersion("#VERSION_NUMBER#")]

3. In project properties, insert this pre-build command:
     "$(SolutionDir)builder-scripts\templates\pre-build\Stamper.exe" "$(ProjectDir)\"



4. Put the "builder-scripts" folder into your solution folder. Builder scripts source


Code snippet: Unzip the zip file in C# using DotNetZip

Be The First To Comment
DotNetZip is a FAST, FREE class library and toolset for manipulating zip files. Use VB, C# or any .NET language to easily create, extract, or update zip files.

1:  public static void DeCompressFile(string zipFilePath, string extractPath)  
2:      {  
3:        string zipToUnpack = zipFilePath;  
4:        string unpackDirectory = extractPath;  
5:        using (ZipFile zipfiles = ZipFile.Read(zipToUnpack))  
6:        {  
7:          // Here, we extract every entry, but we could extract conditionally based on entry name, size, date, checkbox status, etc.   
8:          foreach (ZipEntry e in zipfiles)  
9:          {  
10:            e.Extract(unpackDirectory, ExtractExistingFileAction.OverwriteSilently);  
11:          }  
12:        }  
13:    
14:        Console.WriteLine("Status: Done extracting the zipped Archive");  
15:      }   

Code snippet: Read data from Access Database in C#

Be The First To Comment
Read data from Access Database in C#

1:  private static void ReadFromAccess(string accessDbPath)  
2:      {  
3:        string connection = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= {0}",accessDbPath);  
4:        using (OleDbConnection con = new OleDbConnection(connection))  
5:        {  
6:          try  
7:          {  con.Open();  
8:            OleDbCommand cmd = new OleDbCommand("SELECT * FROM Table_NAME", con);  
9:            OleDbDataReader reader = cmd.ExecuteReader();  
10:    
11:            while (reader.Read())  
12:            {  
13:              Console.WriteLine(reader.GetString(0));  
14:            }  
15:    
16:          }catch(Exception ex)  
17:          {  
18:            Console.WriteLine(ex.Message);  
19:          }finally  
20:          {  
21:            con.Close();  
22:          }  
23:        }  
24:      }  

Wednesday, January 6, 2016

Nhibernate criteria API - select from multiple tables

Be The First To Comment
If you ever worked with relational databases then higher chances are you already worked with sub queries. Some time while working with Nhibernate you get yourself into some situation where you need sub query to do some lifting for you. In NHibernate criteria API you can do the sub query usingDetachedCriteria and Subqueries classes. As the name suggests DetachedCriteria helps you define your sub query criteria while Subqueries class help you create sub query criterion object using detached criteria object.

In order to demonstrate sub query implementation lets consider an example. Suppose we have three entities Order, OrderItem and Product where one order can more have more then one order items while one order item may be linked to a product. If we need to do a query where we need to list all those order items which are linked to products and have price greater then $100. Also the products must be the ones marked as special in system. The SQL for such query may be something like below

SELECT * FROM OrderItem AS OI 
WHERE OI.Price > 100 AND OI.ProductId IN ( SELECT P.ProductId FROM Product WHERE P.IsSpecial = 1 )

Wednesday, October 14, 2015

Read ESRI File Gdodatabase (FileGDB) using GDAL & C#

Be The First To Comment
If you are creating a new project- set up GDAL & C# environment as described here

Code snippet to read ESRI File Geo-database (FileGDB) using GDAL and C#. By default it uses GDAL's 'OpenFileGDB' (read only) driver with out any external dependencies. If you are interested in editing GDB feature class you should use 'FileGDB' (read-write) driver, which had dependency on ESRI's FGDB API SDK. The UCLA's internal testing showed that ESRI's FileGDB driver drags the performance than OpenFileGDB for read-only operation. So choose the driver according to your needs.

However, both GDAL drivers and ESRI's API do not support the raster dataset inside the GDB till date.

 public static void ReadEsriGdb(string gdbPath, string featureLayerName)  
     {  
       //Register the vector drivers  
       Ogr.RegisterAll();  
   
       //Reading the vector data  
       DataSource dataSource = Ogr.Open(gdbPath, 0);  
       Layer layer = dataSource.GetLayerByName(featureLayerName);  
          
     }  
   
     //call  
      ReadEsriGdb("gdbPath.gdb", "counties");  

Thursday, October 8, 2015

Clip a raster from feature shape file using C# and ArcObject's geoprocessor

Be The First To Comment
Code snippet in clipping a raster from feature shape file using C# and ArcObject's geoprocessor -

 public static void ClipRaster(string inRaster, string inClipFeature, string outTempRaster)  
     {  
       Clip clipTool = new Clip();  
   
       //set clip parameters  
       clipTool.in_raster = inRaster;  
       clipTool.out_raster = outTempRaster;  
   
       //clip extent  
       clipTool.in_template_dataset = inClipFeature;  
   
       Geoprocessor gp = new Geoprocessor();  
       gp.OverwriteOutput = true;  
       gp.AddOutputsToMap = false;  
         
       try  
       {  
         IGeoProcessorResult result = (IGeoProcessorResult)gp.ExecuteAsync(clipTool);  
         while(result.Status != esriJobStatus.esriJobSucceeded)  
         {  
           //Console.WriteLine(result.Status.ToString());  
           System.Threading.Thread.Sleep(100);  
         }  
       }  
       catch (Exception ex)  
       {  
         object level = 0;  
         Console.WriteLine(gp.GetMessages(ref level));  
         Console.WriteLine(" Failed to clip raster using ESRI clip tool " + ex.Message);  
       }  
   
     }  

Enable ESRI ArcGIS extension licence from C#

Be The First To Comment
Code snippet on enabling ESRI ArcGIS extension licence for spatial analysis using C#

   
       ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);  
       ESRI.ArcGIS.RuntimeManager.BindLicense(ESRI.ArcGIS.ProductCode.Desktop);  
   
       UID pUid = new UIDClass();  
       pUid.Value = "esriSpatialAnalystUI.SAExtension";  
   
       // Add Spatial Analyst extension to the license manager.  
       object v = null;  
       IExtensionManagerAdmin extensionManagerAdmin = new ExtensionManagerClass();  
       extensionManagerAdmin.AddExtension(pUid, ref v);  
   
       // Enable the license.  
       IExtensionManager extensionManager = (IExtensionManager)extensionManagerAdmin;  
       IExtension extension = extensionManager.FindExtension(pUid);  
       IExtensionConfig extensionConfig = (IExtensionConfig)extension;  
   
       if (extensionConfig.State != esriExtensionState.esriESUnavailable)  
       {  
         extensionConfig.State = esriExtensionState.esriESEnabled;  
       }  
       else  
       {  
         Console.WriteLine("No Spatial Analyst License available");  
       }  
   
   

Thursday, September 24, 2015

Calculate zonal-statistics using ESRI ArcObjects and C#

Be The First To Comment
Import the following references in the project.

using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.SpatialAnalystTools;
using ESRI.ArcGIS.esriSystem;

This solution is only works for single band raster. For multi-band raster zonal statistics I will make a separate post soon.

 public static void ComputeZonalStatisticsFromEsri(string feature, string zoneField, string valueRaster, string outputTable)  
     {  
   
       ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);  
       ESRI.ArcGIS.RuntimeManager.BindLicense(ESRI.ArcGIS.ProductCode.Desktop);  
   
       UID pUid = new UIDClass();  
       pUid.Value = "esriSpatialAnalystUI.SAExtension";  
   
       // Add Spatial Analyst extension to the license manager.  
       object v = null;  
       IExtensionManagerAdmin extensionManagerAdmin = new ExtensionManagerClass();  
       extensionManagerAdmin.AddExtension(pUid, ref v);  
   
       // Enable the license.  
       IExtensionManager extensionManager = (IExtensionManager)extensionManagerAdmin;  
       IExtension extension = extensionManager.FindExtension(pUid);  
       IExtensionConfig extensionConfig = (IExtensionConfig)extension;   
   
 

© 2011 GIS and Remote Sensing Tools, Tips and more .. ToS | Privacy Policy | Sitemap

About Me