Friday, January 28, 2011

Notes: Order of posts to complete – 29/1/2011

As I said before this is not my real blog just a place holder for the drafts for my real blog. Subscribers should note that the blog posts are being updated on the fly, so use a feed reader that can handle this (Google Reader will not mark the post differently for updated posts).

I am sure some of you are wondering why I don’t post some of the more complete posts and for those posts I simply would like to post them in a certain order. It’s like writing a story I can’t really post on FluentMigrator before I write about the SDE or ArcObjects (since extending FluentMigrator is all about using ArcObjects to deploy the SDE).

Since at this point in time I have 55 draft posts I decided to add categories to the posts:

  • Title Draft – only has a title and lots of TODOs
  • Draft – has some text but the text is rough
  • Beta – almost ready: spelling, ordering, checking the grammar…
  • Post In Wait – waiting for another post before posting

I have also decided to post the exceptions/error solving posts without waiting for background posts (if they are ready). Since they are mostly posts I am not going to edit.

I have decided to write here the order of the Notes’ drafts I am going to work on:

  1. Introduction – posted
  2. Writing Posts – posted
  3. Windows Live Writer: Tag Providers – posted
  4. How to open a Blog – posted
  5. Hello Note – Not to be posted
  6. How to open a Blog, part 2 – posted
  7. Windows Live Writer: Tag providers, Part 2 – need to go over all the tag providers and need to get a response from some of them so it might take some time, Technorati is still giving me hard times.
  8. Writing code in a Blog Post – posted
  9. This Developer’s Tool Set – posted
  10. Switching Comment System: IntenseDebate – posted
  11. To Resharper or not to Resharper - posted
  12. How to fix the blog’s look? – posted
  13. Fixing Error 2104: Unhandled Error in Silverlight Application (IIS7) – posted
  14. To be a Developer (again) - Beta
  15. Offline Blog Writing Applications - Draft
  16. The Library example – Haven’t decided on posting this or not might change it to sheep and shepherds…
  17. Unit Tests – Introduction – Draft: code, finish the post
  18. Unit Tests: What to Test?  - Draft: code, go over all the cases, add my Resharper template, the image is low quality
  19. Unit Test Code Coverage – Title Draft: even the TODOs are rough…
  20. To Rhino or not to Rhino? – Draft: code, font, the explanations are too short
  21. Tracking down a simple bug - Draft: code, font, draw the examples
  22. Geographic Coordinates Systems - posted
  23. Starting with ArcObjects - Beta: images in old style, code, font
  24. Geographic Database: ESRI File Formats – Beta: the table color is bad ***
  25. File GeoDatabase: Getting the Workspace – Draft: might need to split to 2 posts
  26. TODO: Extending ArcObjects
  27. Multithreading with ArcObjects – Draft: font, code, TODOs
  28. Mocking ESRI (testing wise) – Title Draft: even the TODOs are rough… Though the title is just right!
  29. TODO: SQL
  30. TODO: SQL Server
  31. Database Queries Trick 1: Query XML - posted
  32. Selecting Distinct Rows – Beta: check if the query can be copied from VS
  33. SQL Server 2008–Freeing File system space – Draft: need to finish the post
  34. SQL Server 2008–Forget a user/password – Beta: remove the unused del tags, change the ending a bit ***
  35. ArcSDE–Connection to the Geodatabase – Draft: write how to get the service number, images in old style, remove del tags
  36. TODO: ArcSDE: Different DB types
  37. SDE – A look at the layer table structure – Draft: images, font, write about deleting features and triggers
  38. Reading SDE queries – Draft: images, font, weird characters, SQL, del tags, grammer
  39. Deleting SDE left over tables – Draft: images, font, SQL, rewrite query
  40. IWorkspace - Communication link failure – Draft:Code need to be fixed,  find a solution
  41. TODO: WorkspaceProvider
  42. TODO: WorkspaceUtils
  43. Working with CAD files in ArcObjects – Draft: code, links, font
  44. Upgrading the code base from ArcGIS 9.3.1 to 10 – Beta: images, code, del tags
  45. ArcSDE–Adding domains from code – Beta: refactor the code
  46. FluentMigrator: Introduction – Beta: order, TODOs ***
  47. FluentMigrator: Understanding the Framework Code – Draft: TODOs
  48. FluentMigrator: Extending the Framework – Draft: not finished
  49. ArcSDE/SQL Server Tables–What is Sde’s and what is Regular – Beta: SQL query, del tags, post after FM
  50. Stuck Database – the JOY! – Beta: font, images, maybe add a conclusion, post after intro to FM
  51. Linq2Sql: Changing the Database Schema at Runtime (without XMLs) – Draft: still waiting for a solution

I have some more posts to which I haven’t decided the order:

  1. Python – Introduction – Draft: just not written well
  2. Silverlight ESRI App - IIS is dead–Error 5011 – Draft: TODOs, wrong date, del tags
  3. Calling ArcGIS Server service model - Beta: font, images, del tags ***
  4. .NET Framework NGEN service stopped: What’s that? - posted
  5. VS2010: “The project type is not supported by this... – Beta: cut the post (won’t continue to work on it), images, font ***
  6. Configuring Silverlight Applications – Beta: missing code of the aspx, using code should be from VS **
  7. Clearing ArcGIS Server REST API Cache – Beta: font, images, del tags ***
  8. ArcGIS Server layer problem (DB is down) – Beta: font, images, post clearing cache first, del tags ***
  9. Restart ArcGIS Server service – Beta: font, images, del tags ***
  10. Simplify and the ArcEngine license – Draft: code, font, images, name should be different
  11. ESRI License error – Draft: code, font, images, name should be different
  12. Rename Polyline layer – Beta: code, font
  13. Address Locator Style: Introduction – Draft: finish a working style before posting this
  14. Address Locator Style: Customizing Guide – Draft: finish a working style before posting this
  15. Address Locator Style: Testing – Draft: finish a working style before posting this
  16. IntelliTrace: – Draft: still rough
  17. TODO: Using DotTrace
  18. Writing a Windows Live Writer Plugin – Draft: didn’t write one…, images, del tags, ice tags
  19. Coded UI testing for Silverlight application – Draft: really rough, font, images

I think that’s enough for now…

Wednesday, January 26, 2011

Address Locator Style: Testing

Well since I don’t have ArcDesktop, and can’t do this.

I will do the easy thing and test my Address Locator Style by code, fun fun fun, NOT!

What do I want to achieve?

1. Basic: Create an Address Locator in a GeoDatabase

2. Optional: Delete an Address Locator in a GeoDatabase

3. Advanced: Use an Address Locator in a GeoDatabase

 

Well I decided to start from the ESRI example, that creates an Address Locator in a Personal GeoDatabase (after refactoring):

The main class:

  1. public class AddressLocatorUtils
  2. {
  3.     public void Create(string styleName, string mdbFilePath, string featureClassName, string locatorName)
  4.     {
  5.         var locatorStyle = LocatorWorkspaceUtils.Instance.GetLocatorStyle(styleName);
  6.         var dataset = AccessWorkspaceUtils.Instance.GetDataset(mdbFilePath, featureClassName);
  7.         LocatorWorkspaceUtils.Instance.SetLocatorDatasetName(dataset.FullName, locatorStyle);
  8.  
  9.         if (LocatorWorkspaceUtils.Instance.IsLocatorValidForSave(locatorStyle))
  10.         {
  11.             LocatorWorkspaceUtils.Instance.AddLocatorStyle(locatorName,mdbFilePath,(ILocator)locatorStyle);
  12.         }
  13.         else
  14.         {
  15.             throw new ApplicationException("Something went wrong...");
  16.         }
  17.     }
  18. }

The utils:

  1. public class LocatorWorkspaceUtils
  2. {
  3.     private readonly ILocatorManager2 _locatorManager;
  4.  
  5.     #region Singleton
  6.  
  7.     private static readonly LocatorWorkspaceUtils instance = new LocatorWorkspaceUtils();
  8.  
  9.     // Explicit static constructor to tell C# compiler
  10.     // not to mark type as beforefieldinit
  11.     static LocatorWorkspaceUtils()
  12.     {
  13.     }
  14.  
  15.     private LocatorWorkspaceUtils()
  16.     {
  17.         EsriInitilization.Start();
  18.         _locatorManager =
  19.             (ILocatorManager2)Activator.CreateInstance(Type.GetTypeFromProgID("esriLocation.LocatorManager"));
  20.     }
  21.  
  22.     public static LocatorWorkspaceUtils Instance
  23.     {
  24.         get { return instance; }
  25.     }
  26.  
  27.     #endregion
  28.  
  29.     public ILocatorStyle GetLocatorStyle(string styleName)
  30.     {
  31.         return GetLocatorStyle(styleName, "");
  32.     }
  33.  
  34.     public ILocatorStyle GetLocatorStyle(string styleName, string fileLocation)
  35.     {
  36.         var locatorWorkspace = GetLocatorWorkspace(fileLocation);
  37.  
  38.         // Get the locator style to base the new locator.
  39.         return locatorWorkspace.GetLocatorStyle(styleName);
  40.     }
  41.  
  42.     public void SetLocatorDatasetName(IName datasetName, ILocatorStyle locatorStyle)
  43.     {
  44.         var referenceDataTables = (IReferenceDataTables)locatorStyle;
  45.  
  46.         var enumReferenceDataTable = referenceDataTables.Tables;
  47.         enumReferenceDataTable.Reset();
  48.  
  49.         var referenceDataTableEdit = (IReferenceDataTableEdit)enumReferenceDataTable.Next();
  50.  
  51.         referenceDataTableEdit.Name_2 = (ITableName)datasetName;
  52.     }
  53.  
  54.     public bool IsLocatorValidForSave(ILocatorStyle locatorStyle)
  55.     {
  56.         return ((IReferenceDataTables)locatorStyle).HasEnoughInfo;
  57.     }
  58.  
  59.     public void AddLocatorStyle(string styleName, string fileLocation, ILocator locatorStyle)
  60.     {
  61.         var locatorWorkspace = GetLocatorWorkspace(fileLocation);
  62.         locatorWorkspace.AddLocator(styleName, locatorStyle, "", null);
  63.     }
  64.  
  65.     private ILocatorWorkspace GetLocatorWorkspace(string fileLocation)
  66.     {
  67.         return _locatorManager.GetLocatorWorkspaceFromPath(fileLocation);
  68.     }
  69. }

And AccessWorkspaceUtils contains:

  1. public IDataset GetDataset(string mdbFilePath, string featureClassName)
  2. {
  3.     // Open the feature class to use as reference data.
  4.     IWorkspaceFactory2 workspaceFactory2 = new AccessWorkspaceFactoryClass();
  5.     var featureWorkspace = (IFeatureWorkspace)workspaceFactory2.OpenFromFile(mdbFilePath, 0);
  6.  
  7.     // Set the feature class as the primary reference data table for the locator.
  8.     return (IDataset)featureWorkspace.OpenFeatureClass(featureClassName);
  9. }

My test:

  1. [TestMethod]
  2. public void Create_DllShepherdAddressLocator_AddressLocatorCreated()
  3. {
  4.     const string styleFileName = "Dll Shepherd Address";
  5.     const string referenceDataStyleName = "ZIP 5-Digit";
  6.     var styleName = String.Format("{0} - {1}", styleFileName,
  7.                                   referenceDataStyleName);
  8.     _addressLocatorUtils.Create(styleName, @"C:\Projects\Testings\Esri.AddressLocator\Esri.AddressLocator.CoreTests\bin\Debug\Israel_for_Roy.mdb",
  9.                                 "Streets", "New Dll Shepherd Locator");
  10. }

And it works, it create a style with the name.

Before:

Access-before-creating-address-locator

After:

access-after-creating-address-locator

Well we passed 1.

And then I tested it on something I created and it failed on:

  1. var referenceDataTables = (IReferenceDataTables)locatorStyle;

With this Exception:

System.InvalidCastException was unhandled by user code
  Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'ESRI.ArcGIS.Location.IReferenceDataTables'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{600A5898-DDC1-11D3-9F74-00C04F8ED1C4}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

I decided that though ESRI help might be not very helpful here, their help in ArcCatalog might be better. So I asked Vered to test it and it just asked Vered if she wanted to send the Error to ESRI after closing her ArcCatalog – she almost killed me!

 

The exception is thrown simply because locatorStyle does not implements the IReferenceDataTables interface. Which is weird because locatorStyle can be converted to ESRIGen2AddressLocatorStyle:

Esri-location-model-diagram-locator-style

As you can see ESRIGen2AddressLocatorStyle inherits from ESRIReferenceDataAddressLocatorStyle which implements IReferenceDataTables. The weirdness doesn’t stop here looking at the source for ESRIGen2AddressLocatorStyle:

  1. namespace ESRI.ArcGIS.Location
  2. {
  3.     [CoClass(typeof (ESRIGen2AddressLocatorStyleClass))]
  4.     [Guid("655C5C62-6478-11D3-9F57-00C04F6BDF06")]
  5.     [ComImport]
  6.     public interface ESRIGen2AddressLocatorStyle : ILocator
  7.     {
  8.     }
  9. }

It only implements ILocator and I can’t even find ESRIReferenceDataAddressLocatorStyle, I started to think I can’t read this diagrams but:

ESRI-class-diagram-help

According to this both ESRIReferenceDataAddressLocatorStyle and ESRIGen2AddressLocatorStyle are classes and one inherits from the other – exactly like I thought!

 

 

TODO: add link in “after refactoring” to the post about refactoring ESRI part 1

Resources:

 

Keywords: ESRI, ArcObjects, Access, unit test, address locator

Tuesday, January 25, 2011

Address Locator Style: Customizing Guide

Please read “Address Locator Style: Introduction” before reading this post.

Editing the Locator Style files:

I am going through this guide by ESRI.

What am I changing?

For me it’s to create an address locator without state (here in Israel we don’t have a state).

Also an optional change is adding common spelling mistakes in Hebrew to the mix.

 

Basic Change: Name and Description

1. Copied: USAddress.lot.xml, LocatorStyle.xsd, and LocatorStyle.xslt to my projects folder.

2. Rename USAddress.lot.xml

3. Change the name and description for the address locator:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml-stylesheet type="text/xsl" href="LocatorStyle.xslt"?>
  3. <locators xsi:noNamespaceSchemaLocation="LocatorStyle.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4.   <locator>
  5.     <name>Dll Shepherd Address</name>
  6.     <desc>Locator style for Dll Shepherd addresses</desc>
  7.     <version>10</version>

 

Change: create an address locator without state

1. Create ref_data_style with the name City Street House Number

  1. <ref_data_style>
  2.   <name>City Street House Number</name>
  3.   <desc>City,Street and House Number</desc>
  4.   <table_roles>
  5.     <table_role name="Primary">
  6.       <display_name>Primary Table</display_name>
  7.       <desc>streets feature class</desc>
  8.       <field_roles>
  9.         <field_role name="Primary.Shape" is_geometry="true">
  10.           <display_name>Geometry</display_name>
  11.           <preferred_name>Shape</preferred_name>
  12.         </field_role>
  13.         <field_role name="Primary.ID">
  14.           <display_name>Feature ID</display_name>
  15.           <preferred_name>ID</preferred_name>
  16.           <preferred_name>POINTID</preferred_name>
  17.           <preferred_name>FEATUREID</preferred_name>
  18.           <preferred_name>FEATURE_ID</preferred_name>
  19.           <preferred_name>FEAT_ID</preferred_name>
  20.           <preferred_name>FEATUREID_1</preferred_name>
  21.           <preferred_name>FEATUREID_2</preferred_name>
  22.           <preferred_name>DYNAMAPID</preferred_name>
  23.           <preferred_name>DYNAMAP_ID</preferred_name>
  24.           <preferred_name>DYNAMAPID_1</preferred_name>
  25.           <preferred_name>DYNAMAPID_2</preferred_name>
  26.           <preferred_name>OBJECTID</preferred_name>
  27.           <preferred_name>OBJECT_ID</preferred_name>
  28.           <preferred_name>OBJECTID_1</preferred_name>
  29.           <preferred_name>OBJECTID_2</preferred_name>
  30.           <preferred_name>FID</preferred_name>
  31.           <preferred_name>FID_1</preferred_name>
  32.           <preferred_name>FID_2</preferred_name>
  33.           <preferred_name>AREAID</preferred_name>
  34.           <preferred_name>LINK_ID</preferred_name>
  35.           <preferred_name>AREA_ID</preferred_name>
  36.           <preferred_name>LINKID</preferred_name>
  37.           <preferred_name>TLID</preferred_name>
  38.         </field_role>
  39.         <field_role name="Primary.CityName">
  40.           <display_name>CityName</display_name>
  41.           <preferred_name>CityName</preferred_name>
  42.           <preferred_name>CityNameEng</preferred_name>
  43.           <preferred_name>CITY_NAME</preferred_name>
  44.           <preferred_name>CITY</preferred_name>
  45.           <preferred_name>City</preferred_name>
  46.           <preferred_name>CityCode</preferred_name>
  47.           <preferred_name>CITY_CODE</preferred_name>
  48.         </field_role>
  49.         <field_role name="Primary.StreetName">
  50.           <display_name>StreetName</display_name>
  51.           <preferred_name>StreetName</preferred_name>
  52.           <preferred_name>StreetNameEng</preferred_name>
  53.           <preferred_name>STREET_NAME</preferred_name>
  54.           <preferred_name>STREET</preferred_name>
  55.           <preferred_name>Street</preferred_name>
  56.           <preferred_name>StreetCode</preferred_name>
  57.           <preferred_name>STREET_CODE</preferred_name>
  58.         </field_role>
  59.         <field_role name="Primary.HouseNumber">
  60.           <display_name>HouseNumber</display_name>
  61.           <preferred_name>HouseNumber</preferred_name>
  62.           <preferred_name>HOUSE_NUMBER</preferred_name>
  63.           <preferred_name>House</preferred_name>
  64.           <preferred_name>HouseNum</preferred_name>
  65.           <preferred_name>HOUSE</preferred_name>
  66.         </field_role>
  67.         <field_role name="Primary.User_fld">
  68.           <display_name>Additional Field</display_name>
  69.         </field_role>
  70.       </field_roles>
  71.     </table_role>
  72.   </table_roles>
  73.   <data_source type="indexed">
  74.     <mapping_schema ref="REG_COUNTRY" />
  75.     <queries>
  76.       <query>
  77.         <tables>
  78.           <table role_ref="Primary" />
  79.         </tables>
  80.         <fields>
  81.           <field ref="Shape" field_role_ref="Primary.Shape" />
  82.           <field ref="ID" field_role_ref="Primary.ID" />
  83.           <field ref="CityName" field_role_ref="Primary.CityName" />
  84.           <field ref="StreetName" field_role_ref="Primary.StreetName" />
  85.           <field ref="HouseNumber" field_role_ref="Primary.HouseNumber" />
  86.           <field ref="User_fld" field_role_ref="Primary.User_fld" />
  87.         </fields>
  88.       </query>
  89.     </queries>
  90.   </data_source>

I haven’t touched <inputs> and <multiline_grammar> since I don’t know how they work. Testing this now will throw an exception…

2. Since in the previous step we did:

  1. <data_source type="indexed">
  2.   <mapping_schema ref="REG_COUNTRY" />
  3.   <queries>
  4.     <query>
  5.       <tables>
  6.         <table role_ref="Primary" />
  7.       </tables>
  8.       <fields>
  9.         <field ref="Shape" field_role_ref="Primary.Shape" />
  10.         <field ref="ID" field_role_ref="Primary.ID" />
  11.         <field ref="CityName" field_role_ref="Primary.CityName" />
  12.         <field ref="StreetName" field_role_ref="Primary.StreetName" />
  13.         <field ref="HouseNumber" field_role_ref="Primary.HouseNumber" />
  14.         <field ref="User_fld" field_role_ref="Primary.User_fld" />
  15.       </fields>
  16.     </query>
  17.   </queries>
  18. </data_source>

Then we need to create the REG_COUNTRY mapping_schema with those fields. Like ZIP:

  1. <field name="ZIP" grammar_ref="ZIP5">
  2.   <desc>ZIP code</desc>
  3.   <preferred_name>ZIP</preferred_name>
  4.   <preferred_name>ZIPCODE</preferred_name>
  5. </field>

But what is the grammar for CityName? Well inside grammar->Zones->ZIP5:

  1. <def name="ZIP5">
  2.   <alt>`[0-9][0-9][0-9][0-9][0-9]`</alt>
  3. </def>

(It defines ZIP5 as a string of 5 numeric characters)

Looking above it I found:

  1. <def name="City">
  2.   <alias_list_ref ref="CityAliases"/>
  3.   <alt ref="wordlist"/>
  4. </def>

(This defines City as a string of words (wordlist is word+wordlist (who loves recursive?)))

The good news is that House is defined but the bad news Street is not. But that is easily fixable we will just add below City:

  1. <def name="Street">
  2.   <alt ref="wordlist"/>
  3. </def>

(You can use City for that as well but I prefer creating this definition that later can be customized (for example street must start with “St.” can be defined here)

Later I found this definition for street:

  1. <def name="StName">
  2.   <alias_list_ref ref="StreetNameAliases"/>
  3.   <alt ref="name"/>
  4. </def>

Back to our mapping schema, well I started with a copy of USZIP and changed the name and descriptions:

  1. <mapping_schema name="REG_COUNTRY" geom_type="point">
  2.   <desc>Inner Country schema - city,street,house</desc>
  3.   <desc>Point features containing Inner Country schema - city,street,house.</desc>
  4.   <fields>

(Shape and Id I kept the same)

  1. <field name="CityName" grammar_ref="City">
  2.   <desc>City Name</desc>
  3.   <preferred_name>CityName</preferred_name>
  4.   <preferred_name>CITY_NAME</preferred_name>
  5. </field>
  6. <field name="StreetName" grammar_ref="Street">
  7.   <desc>Street Name</desc>
  8.   <preferred_name>StreetName</preferred_name>
  9.   <preferred_name>STREET_NAME</preferred_name>
  10. </field>
  11. <field name="HouseNumber" grammar_ref="House">
  12.   <desc>House Number</desc>
  13.   <preferred_name>HouseNumber</preferred_name>
  14.   <preferred_name>HOUSE_NUMBER</preferred_name>
  15. </field>

(I kept User_fld since it’s not required and I just don’t know what it does)

Next <index> this I decided to copy+change from SingleAddress, this defines how the index of the data is going to be built:

  1. <index>
  2.   <dictionary ref="House"/>
  3.   <dictionary ref="StreetName" search="true"/>
  4.   <dictionary ref="City" search="true"/>
  5.   <dictionary ref="ID" type="ids"/>
  6.   <relationship>
  7.     <field_ref ref="ZIP"/>
  8.   </relationship>
  9.   <reverse_relationship>
  10.     <field_ref ref="House"/>
  11.     <field_ref ref="StreetName"/>
  12.     <field_ref ref="City"/>
  13.     <field_ref ref="ID"/>
  14.     <field_ref ref="User_fld"/>
  15.   </reverse_relationship>
  16. </index>

Outputs, hope it works:

  1. <outputs>
  2.   <output ref="Shape" type="geometry"/>
  3.   <output component="Status" candidate_mode="false" length="1"/>
  4.   <output component="Score" type="float" decimal_digits="2"/>
  5.   <output name="Match_addr" length="100">
  6.     <format>
  7.       <field_value ref="House"/>
  8.       <field_value ref="StreetName"/>
  9.       <field_value ref="City"/>
  10.     </format>
  11.   </output>
  12.   <output name="Ref_ID" ref="ID" type="fromdata" selector="WriteReferenceIDField"/>
  13.   <output ref="User_fld" type="string" length="120" selector="WriteAdditionalOutputFields" />
  14.   <output component="Match_time" type="float" selector="ShowElapsedTime"/>
  15. </outputs>

Reverse GeoCoding, I just copy changed this to my needs:

  1. <reverse_geocoding>
  2.   <reverse_geocoding_method name="Address">
  3.     <outputs>
  4.       <output ref="Shape" type="geometry" />
  5.       <output ref="ZIP" length="5" />
  6.       <output component="Match_time" type="float" selector="ShowElapsedTime"/>
  7.     </outputs>
  8.   </reverse_geocoding_method>
  9. </reverse_geocoding>

Result (cross my fingers and hope it works):

  1. <reverse_geocoding>
  2.   <reverse_geocoding_method name="Address">
  3.     <outputs>
  4.       <output ref="Shape" type="geometry" />
  5.       <output ref="House" length="15" />
  6.       <output ref="StreetName" length="100" />
  7.       <output ref="City" length="100" />
  8.       <output component="Match_time" type="float" selector="ShowElapsedTime"/>
  9.     </outputs>
  10.   </reverse_geocoding_method>
  11. </reverse_geocoding>

I just commented standardization (hope it’s not needed)

Testing got me this Exception:

System.InvalidCastException was unhandled by user code
  Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'ESRI.ArcGIS.Location.IReferenceDataTables'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{600A5898-DDC1-11D3-9F74-00C04F8ED1C4}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

 

 

Testing

Testing the changes: with ArcCatalog

TODO: I don’t really have ArcCatalog…

Testing the changes: with ArcObjects

I wrote a post about it and it can be found here.

 

TODO: add a link to the introduction

TODO: add a link to the arcObjects testing

TODO: Fix introduction post

Resources:

Customizing ArcGIS 10 locators (An Esri Geocoding Technical Paper)

Keywords: ESRI, ArcGis Server, geocode, geocoding, address locator