<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Delphi API 0.1 for ArcGIS Server 10 in ArcGIS REST APIs and Services Questions</title>
    <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140940#M656</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Has anything been done with the API, am interested in putting a map onto a desktop application from my ArcGIS Server services.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 13 Aug 2014 09:08:01 GMT</pubDate>
    <dc:creator>PhilipHughes</dc:creator>
    <dc:date>2014-08-13T09:08:01Z</dc:date>
    <item>
      <title>Delphi API 0.1 for ArcGIS Server 10</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140938#M654</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Even with auto-save, I still lost my post before submitting.&amp;nbsp; I worked on it for an hour!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, I started work on a Delphi API for ArcGIS Server.&amp;nbsp; What it does is communicate with ArcGIS Server through the REST API using JSON objects.&amp;nbsp; In Delphi I have classes and types for almost 100 of those ArcGIS objects exposed in the REST API.&amp;nbsp; If I continue this work, there's lost more to do.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The unit is pretty bad in it's version 0.1 state.&amp;nbsp; I don't use a lot of memory clean-up, it's poorly documented, and could be organized a lot better.&amp;nbsp; The thing is, it already does what *I* need it to do, which isn't even the tip of the iceberg.&amp;nbsp; What I'm asking you guys is if you want me to continue work on the API or not, or perhaps you don't care.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is an example that compiles when you add the ArcGISServer unit to the uses clause:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
function GoArcGIS( X, Y: Double; Catalog, MapService, MapLayer, FieldName: String ): String;
///&amp;nbsp; You can try calling this function with the following values:
///&amp;nbsp; 1945785.00909788, 715764.111071926, '',
var
&amp;nbsp; pConnection: TArcGISServer;
&amp;nbsp; pGeocodedPt: TAGSPoint;
&amp;nbsp; pCatalog: TAGSCatalog;
&amp;nbsp; pMapService: TAGSMapService;
&amp;nbsp; pBriefLayer: TAGSBriefLayer;
&amp;nbsp; pMapLayer: TAGSLayerOrTable;
&amp;nbsp; pQueryResults: TAGSFeatureSet;
&amp;nbsp; bFound: Boolean;
const
&amp;nbsp; ServerProtocol = 'http';
&amp;nbsp; ServerHost = 'sampleserver1.arcgisonline.com';
&amp;nbsp; ArcGISServerInstance = 'ArcGIS';
begin
&amp;nbsp; //Initializations to keep the compiler happy since I'm calling Free in the finally clause
&amp;nbsp; pCatalog := nil;
&amp;nbsp; pMapService := nil;
&amp;nbsp; pMapLayer := nil;
&amp;nbsp; pQueryResults := nil;

&amp;nbsp; pConnection := TArcGISServer.Create( nil );
&amp;nbsp; pGeocodedPt := TAGSPoint.Create;
&amp;nbsp; pGeocodedPt.X := X;
&amp;nbsp; pGeocodedPt.Y := Y;
&amp;nbsp; pGeocodedPt.SpatialReference.Wkid := 32043; //NAD 27 Utah Central
&amp;nbsp; try
&amp;nbsp;&amp;nbsp;&amp;nbsp; pCatalog := pConnection.GetCatalog( ServerProtocol, ServerHost, ArcGISServerInstance, Catalog );
&amp;nbsp;&amp;nbsp;&amp;nbsp; if pCatalog = nil then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pMapService := pCatalog.GetMapService( pConnection, MapService );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pMapService = nil then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bFound := False;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pBriefLayer in pMapService.Layers do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not bFound and ( pBriefLayer.Name = MapLayer ) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bFound := True;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pMapLayer := pMapService.GetLayerOrTable( pConnection, pBriefLayer.Id );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pMapLayer = nil then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pQueryResults := pMapLayer.Query( pConnection, '', pGeocodedPt, nil, esriSpatialRelIntersects, '', '', '', FieldName, False );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pQueryResults = nil then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pQueryResults.Features.Count = 0 then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pQueryResults.Features[ 0 ].Attributes = nil then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not pQueryResults.Features[ 0 ].Attributes.ContainsKey( FieldName ) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := ''
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := pQueryResults.Features[ 0 ].Attributes[ FieldName ];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not bFound then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := '';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp; finally
&amp;nbsp;&amp;nbsp;&amp;nbsp; pConnection.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pGeocodedPt.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pCatalog.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMapService.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMapLayer.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pQueryResults.Free;
&amp;nbsp; end;
end;
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you call the above function with these values, you should get the value Utah, since the provided point is Orem's City Center, which is in Utah County of the state of Utah.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
GoArcGIS( 1945785.00909788, 715764.111071926, 'Specialty', 'ESRI_StateCityHighway_USA', 'counties', 'NAME' );
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Because it's Delphi code, you could easily make a Desktop application that harnesses ArcGIS Server's REST API, or a Web Broker application, or a DLL, or an ActiveX component, or some VCL components, or whatever else you wanted with Delphi's IDE.&amp;nbsp; The trick is that you should have a fairly current version of Delphi (I wrote it in XE2) and you should have the Enterprise version, since JSON object units don't exist in the Professional version (or so I'm told).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Let me know what you guys think.&amp;nbsp; Also, I really want to get back to documenting how to create ActiveX components for use inside ArcGIS Desktop programs with Delphi XE2.&amp;nbsp; But there is yet another COM bug in Delphi that prevents it from compiling correctly, specifically bug QC 104063.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;"Roj"&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 13 Jun 2012 17:36:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140938#M654</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2012-06-13T17:36:51Z</dc:date>
    </item>
    <item>
      <title>Re: Delphi API 0.1 for ArcGIS Server 10</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140939#M655</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Here is the same unit, but with better memory managment.&amp;nbsp; Still not a whole lot of code comments.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jun 2012 18:46:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140939#M655</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2012-06-15T18:46:58Z</dc:date>
    </item>
    <item>
      <title>Re: Delphi API 0.1 for ArcGIS Server 10</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140940#M656</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Has anything been done with the API, am interested in putting a map onto a desktop application from my ArcGIS Server services.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 13 Aug 2014 09:08:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140940#M656</guid>
      <dc:creator>PhilipHughes</dc:creator>
      <dc:date>2014-08-13T09:08:01Z</dc:date>
    </item>
    <item>
      <title>Re: Delphi API 0.1 for ArcGIS Server 10</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140941#M657</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have not pursued this any further, I apologize.&amp;nbsp; If you are wanting to put a map into a Delphi application, probably just use a TWebBrowser.&amp;nbsp; Other than that, I can't think of what else you'd do.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I still have four stupid programs that run on MapObjects.&amp;nbsp; Since direct connect has not been supported for some time now, I am not sure what I will do once ArcSDE no longer provides service connections.&amp;nbsp; I was hoping to rewrite those internal applications using ArcGIS Server in Delphi, but I keep getting other projects to start and finish.&amp;nbsp; What I will very likely do is have a nightly export of shapefiles from ArcSDE and have my MapObjects programs connect to those.&amp;nbsp; Stink.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;"Roj"&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Aug 2014 14:18:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/delphi-api-0-1-for-arcgis-server-10/m-p/140941#M657</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2014-08-15T14:18:51Z</dc:date>
    </item>
  </channel>
</rss>

