Monday, September 18, 2017

Descriptions of the Gradle build structure

Be The First To Comment
Descriptions of the build gradle file’s parts

Build Java code

apply plugin: ‘java’
apply plugin: ‘war’

This task compiles, tests, and assembles the code into a JAR or WAR file, 
when you run - gradle build

Specify project folder structure

sourceSets{
                main.java.srcDir “src/main”
                test.java.srcDir “src/test”
}

Build with Gradle Wrapper

task wrapper(type: Wrapper) {
    gradleVersion = '2.7'
}

The Gradle Wrapper is the preferred way of starting a Gradle build. It consists of a batch 
script for Windows and a shell script for OS X and Linux. These scripts allow you to run 
a Gradle build without requiring that Gradle be installed on your system.

Friday, September 15, 2017

Tutorial: Sharing Data Between Angular Components - Parent to Child, Child to Parent, and between siblings

Be The First To Comment
Great video talking about sharing Data Between Angular Components - Parent to Child, Child to Parent, and between siblings by Jeff Delaney, AngularFirebase. 



Wednesday, September 13, 2017

Wiring Leaflet, ESRI-leaflet, and Angular for a web map

Be The First To Comment
Basic prototype wiring to map geospatial information using Leaflet, ESRI-leaflet, Angular 4.  There are several nice examples out there, but it is a quick and dirty way of putting all things together and display the map using Angular/Cli.

Step 1. Generate an angular project from angular/cli
                ng new leafletPrototype

Step2. Install all dependencies
a.     Npm install leaflet --save
b.     Nmp install esri-leaflet --save
c.      Npm install @types/leaflet –save

Your pacakage.json will looks like –
"dependencies": {
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "@types/leaflet": "^1.0.69",
    "core-js": "^2.4.1",
    "esri-leaflet": "^2.1.1",
    "leaflet": "^1.2.0",
    "rxjs": "^5.1.0",
    "zone.js": "^0.8.4"
  },


Step 3. Configure .angular-cli.json
Add leaflet and esri-leaflet styles and scripts in .angular-cli.json
"styles": [
        "styles.scss",
        "../node_modules/leaflet/dist/leaflet.css",
        "../node_modules/leaflet-draw/dist/leaflet.draw.css"
      ],


      "scripts": ["../node_modules/leaflet/dist/leaflet.js",
        "../node_modules/esri-leaflet/dist/esri-leaflet.js"
      ],

Step 4. Now, run “ng serve” and see if any errors while importing leaflet libraries.

Compute zonal statistics on area of interest polygon on fly

Be The First To Comment
Draft to compute zonal statistics on area of interest polygon or shape draw on leaflet using PostgreSql and Java -

Geometry extracted from leaflet as GeoJson.

Polygon-
{"type":"Feature","properties":{"desc":null,"image":null},"geometry":{"type":"Polygon","coordinates":[[[-117.103271484375,34.264026473152875],[-117.1142578125,34.14818102254435],[-117.03186035156251,34.10498222546687],[-116.91925048828124,34.14363482031264],[-116.94946289062499,34.25494631082515],[-117.0867919921875,34.252676117101515],[-117.103271484375,34.264026473152875]]]}}


{"type":"Feature","properties":{"desc":null,"image":null},"geometry":{"type":"Polygon","coordinates":[[[-116.86981201171875,34.11407854333859],[-116.86981201171875,34.24132422972854],[-116.71874999999999,34.24132422972854],[-116.71874999999999,34.11407854333859],[-116.86981201171875,34.11407854333859]]]}}

Point-
{"type":"Feature","properties":{"desc":null,"image":null},"geometry":{"type":"Point","coordinates":[-116.9879150390625,34.048108084909835]}}


Area of GeoJson
Select (ST_Area(ST_GeomFromText
('POLYGON ((-117.16918945312501 34.27083595165,-117.1307373046875 34.166363384737892,-117.00988769531251 34.161818161230386,-116.93298339843751 34.239053668516412,-116.98516845703126 34.27083595165,-117.16918945312501 34.27083595165))',4326)))



Zonal statistics for each raster tile -

SELECT rid, (ST_SummaryStats (ST_Clip(rast,ST_GeomFromText('POLYGON ((-117.16918945312501 34.27083595165,-117.1307373046875 34.166363384737892,-117.00988769531251 34.161818161230386,-116.93298339843751 34.239053668516412,-116.98516845703126 34.27083595165,-117.16918945312501 34.27083595165))',4326),true))).*
FROM public.biodiv_ssolnw_wgs84
WHERE ST_Intersects
(rast,ST_GeomFromText
('POLYGON ((-117.16918945312501 34.27083595165,-117.1307373046875 34.166363384737892,-117.00988769531251 34.161818161230386,-116.93298339843751 34.239053668516412,-116.98516845703126 34.27083595165,-117.16918945312501 34.27083595165))',4326))
Group By rid

Monday, August 28, 2017

Quick cheat-sheet on Angular/cli

Be The First To Comment
Quick cheat-sheet on Angular/cli to generate boiler plate codes.

Install Angular/cli
npm install –g @angular/cli

Check Agnular/cli version
ng –v
        or
npm list –g  @angular/cli --depth=0

Generate  files without installing it
ng new ng2CliApp --skip-install

Create new project with out writing the files in but report them commandline console
ng new ng2CliApp --dry-run

Create new project with app prefix
ng new ng2CliApp --prefix coolapp --dry-run

Create new project without test files
ng new ng2CliApp  --skip-tests --prefix cool_ng2CliApp --dry-run

Create new project with style-sheets
ng new ng2CliApp --skip-tests --prefix cool_ng2CliApp --style scss 

Create new project with Routing
ng new ng2CliApp --routing --skip-tests --prefix cool_ng2CliApp --style scss --skip-install

Create new Component
ng g component my-new-component

Tuesday, August 22, 2017

Solved: Cannot connect Postgre in VM from host

Be The First To Comment
Used vagrant for setting up the VM, so set private network and port forward in vagrant file as below -
               
                 migration.vm.network "private_network", ip: "192.168.33.10"
                 migration.vm.network "forwarded_port",guest:5432 , host:15432 


1. Use telnet localhost 15432 to see if the port is open (Host)


Still can not connect to PostgresSql running in VM  :(

Then

2. Edit postgresql.conf (Guest)
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

           listen_addresses = '*'


3.  Add following in pg_hba.conf

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all              all            0.0.0.0/0               md5


4. Finally, able to connect to Postgres via localhost:15432

Thursday, August 17, 2017

Getting started with Raster and PostGIS - I

Be The First To Comment
Steps for loading a raster in PostGIS (PgSql 9.4/ PostGIS 2.2) and pull it from database to view in QGIS 2.14.17.

1. Generate SQL for raster [NOTE: Do not create PostGIS table name starts with underscore, it creates problem while adding raster to QGIS from PostGIS database using DB Manager]

        raster2pgsql -s 4326 -I -C -M -F -t 50x50 -N nan biodiv_ssolnw.tif > biodiv_ssolnw.sql






2. Import generated raster into PostGIS database [Make sure to enable postgis extension in db]

         psql -h localhost -U postgres -d ecolservicedb -f biodiv_ssolnw.sql

the output is:
Processing 1/1: ags_473038164.tif
BEGIN
CREATE TABLE

INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1


….
CREATE INDEX
ANALYZE
NOTICE:  Adding SRID constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding scale-X constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding scale-Y constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding blocksize-X constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding blocksize-Y constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding alignment constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding number of bands constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding pixel type constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding nodata value constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding out-of-database constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
NOTICE:  Adding maximum extent constraint
CONTEXT:  PL/pgSQL function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean) line 53 at RETURN
 addrasterconstraints
----------------------

Friday, July 21, 2017

Setup Jenkins Bit-bucket environment in Windows Server 2008

Be The First To Comment
Steps for setting Jenkins/Bitbucket CI environment in Windows - little trickier than Linux

1) Download and Install Jenkins-2.60.1(current as of the day written)

2) Once installed changed the port from C:\Program Files (x86)\Jenkins\jenkins.xml to ‘9090’ and
restart jenkins

3) Set security options to “false” from config.xml

4) Then open localhost:8090 and see if you can see Jenkins Interface

5) Install all default plugins plus following plugins to work Jenkins correctly with Bitbucket and
dev requirements for my workflow
        a. Bitbucket pull request builder plugin
        b. Maven integration plugin
        c. MS build plugin
       d. Next build number plugin
       e. NodeJS plugin
       f. SSH Agent Plugin      
       g. SSh plugin
       h. Self-organizing swarm plugin
       i. Categorized view plugin
       j. Publish-over ssh
       k. Schedule build
       l. Nugget
       m. Vagrant

6) Install git bash in the machine

7) From git bash, generate ssh-keys , ssh-keygen

8) Add the public key(id_rsa.pub) in BitBucket under group account

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 24, 2017

When to use ArcGIS Online to publish geospatial data: CASE STUDY EUROPEAN ENVIRONMENT AGENCY

Be The First To Comment
ArcGIS Online is a workspace and a web platform for creating and sharing maps. It is possible to upload your data, create a layer or a map, define the extent, set some visualization options, assign permissions to your layer or map, share, and create web mapping applications or story maps. For information about the other capabilities please visit http://doc.arcgis.com/en/arcgis-online/.

The ArcGIS online platform is designed to host small datasets, for example demographic datasets. The datasets uploaded to ArcGIS online are relatively small in size, and should not exceed 1-2MB, or around 5000 records. This is to keep the agencies costs down and keep in line with our ArcGIS online pricing plan. It is for this reason that ArcGIS online should not be used to host large datasets, and tiled image services must NOT be uploaded to ArcGIS online. To publish bigger datasets and image services, please refer to the ArcGIS Server.

Source: http://discomap.eea.europa.eu/map/giseionet/Publishing_data_to_the_web_with_ArcGIS_Online.pdf

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);  
     }  
   

Python code snippet : Merge multiple CSVs (Column Wise) into a large CSV file using ID

Be The First To Comment
Following is the python code snippet to merge multiple CSVs into a large CSV (column wise) using CSV's unique ID field. All input CSV's must have same length.

 import csv
 import itertools
 
 outCombinedStatTxtName ="FormattedTxtResults.csv"  
 tempCsvFiles = glob.glob(str(TempFolderPath)+'\*.csv')  
 openedFileList = [open(fn, 'rb') for fn in tempCsvFiles]  
 readers = [csv.reader(fn) for fn in openedFileList]  
   
 result = open(outCombinedStatTxtName, 'wb')  
 writer = csv.writer(result,delimiter=',')  
   
 multipleIndices = False  
 for row_chunks in itertools.izip(*readers):  
   tempFormattedRow = list(itertools.chain.from_iterable(row_chunks))  
   fidIndices = [i for i, x in enumerate(tempFormattedRow) if x == "ID"]  
   if(len(fidIndices) > 1):  
     fidIndices.pop(0)  
     redundantIndices = tuple(fidIndices)  
     multipleIndices = True  
       
   if(multipleIndices):  
     tempFormattedRow = [ tempFormattedRow[i] for i in xrange(len(tempFormattedRow)) if i not in set(redundantIndices) ]      
     writer.writerow(tempFormattedRow)  
   else:  
     writer.writerow(tempFormattedRow)  
 result.close()     
 [fn.close() for fn in openedFileList]  


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, March 16, 2017

Good compatibility of latest vagrant and virtual box

Be The First To Comment
Continuing from my older post  on Vagrant 1.7.2 / 1.9.2 and Virtualbox 4.3.12  / 5.1.14. I upgraded into Vagrant 1.9.2 and 5.0.x and 5.1.x , because of security vulnerabilities on those Virtualbox versions, but my shell provisions and puppet provision that used to work on old setting suddenly stopped working and tried various workaround to make them working but failed until Virtualbox 5.1.18. I use chocolaty, to upgrade/install vagrant and virtual box in Windows 7 host and able to fire 'vagrant up' to provision my new guest.

Step 1

Install chocolaty in host machine using cmd.exe (Run elevated)
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
      choco -v (Just to make sure chocolaty installed correctly)
      
      0.10.3 (as of 3/16/2017)

    Step 2
    Open Windows' power shell (Run elevated) 
    1. Install or upgrade oracle virtual box

    choco install virtualbox -version 5.1.18
                                                                                                             5.1.18 r114002
    choco upgrade virtualbox

    2. Install or upgrade vagrant

    choco install vagrant -version 1.9.2

    choco upgrade vagrant

    3. Restart the machine
    4. Vagrant up ....Boom all old scripts starting work again!

    Wednesday, February 15, 2017

    List of things appropriate and not appropriate for ArcGIS from Citrix Environment

    Be The First To Comment
    Appropriate for Citrix
    ·         making maps with existing data
    ·         querying and selecting spatial data
    ·         creating GIS points from XY coordinates (GPS files)
    ·         Sub -setting data by selection and export
    ·         Creating or editing GIS data feature by feature
    ·         Buffering small data layers (few features, simple features)
    ·         Joins on attribute tables
    Not Appropriate for Citrix
    ·         Geoprocessing (Intersect, Union, Identity …)
    ·         Sub -setting data by Clipping
    ·         Spatial joins
    ·         Spatial Analyst
    ·         Buffering large or complex data layers

    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();  
         }  
    
     

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

    About Me