In conjunction with the new PBS National Parks series, George Dailey’s My National Parks and ArcGIS Explorer blog series begins today.
Yesterday we posted about how to add Yellowstone National Park’s Old Faithful Web cam to your Explorer map, and we’ll be following along with additional National Park topics.
Part 1 of this series gave you a brief introduction to cross-domain policies, and showed you where to correctly place your policy files. In this post we want to show you some basic troubleshooting techniques for both Adobe Flex and Microsoft Silverlight. If you are having problems such as maps not displaying, or you are getting security sandbox errors then you may be having cross-domain policy problems. Here are some basic guidelines to follow:
- Make sure the policy file is downloading
- Make sure you are using the latest policy file
- Check your policy file settings
- Examine the error messages
- Set your project to run on local web server
Note, in this post we are focusing on resources within your domain and sub-domains; for example http://www.yourwebsite.com/ and http://maps.yourwebsite.com/. The cross-domain file needs to be on the machine with the data or service, and not necessarily the machine hosting the Flex (SWC) or Silverlight app (XAP). Also, if you are having problems accessing third party resources, then you’ll need to work with the third party directly to figure out their cross-domain policies and procedures.
Make Sure the Policy File is Downloading
There are a number of easy ways to verify if the policy file is being downloaded to the client. In Firefox click on the “Net” tab in Firebug. Or, if you are using Internet Explorer then Fiddler is a good choice. If you want more details on Firebug and Fiddler there’s a short write up in a previous ArcGIS Developer blog post. Silverlight developers should also look at using Silverlight Spy. Silverlight Spy gets the extra bonus points for having a cross-domain access policy validator.
If the client app can find and download the policy file, you should see a “200 OK” message. Another trick is to try and load the URL from a browser window, for example: http://tasks.arcgisonline.com/crossdomain.xml if that’s the server you are trying to access content from.
Make Sure You Are Using the Latest Policy File
When you make changes to the cross-domain file, be sure to refresh/reload the page to make sure the browser “sees” the latest version. If you have tried multiple web page reloads and still see “304 Not Modified”, then you have a few options:
You can clear your entire cache, although this often isn’t very desirable if you have a lot of useful links stored. In Firefox 3.5.x they recognized this problem and implemented a very nice, new feature that lets you remove everything from the last hour called Clear Recent History.
You can bypass the cache and force the whole page to reload even if there is a cached copy. Here’s a page that explains how to do this: http://en.wikipedia.org/wiki/Bypass_your_cache.
Check the Policy File Settings
Do a little digging into what settings are appropriate for your domain security. A typical default file is completely open and allows access to all your sub-domains from any external domain. This may not meet your organizations security requirements. Adobe’s Cross-domain Policy File Specification article has a good discussion on the different configuration options for crossdomain.xml. For Silverlight developers, there is an MSDN article on Network Security and Access Restrictions that talks about the various configuration options in clientaccesspolicy.xml.
Examine the Errors
Most of the time, reading the error carefully will offer some important hints on how to resolve the problem. The really important information will be in the very first line or two of the error message dump. Just as an FYI, Flex has over twenty different errors related to Security sandbox violations. Silverlight 3 has only a handful related specifically to security sandbox violations.
Here are a few of some of the most common problems with hints and suggestions on how you might be able to resolve them:
Cross-domain policy file is missing, or incorrectly configured to allow access. Check to see if policy file is downloading, and check its settings.
Cross-domain policy file is missing, or incorrectly configured to allow access. Check to see if policy file is downloading, and check its settings.
File is missing, or in the wrong directory. See Part 1 for suggestions on how to locate the root directory.
A few things could be wrong here. Check your policy file pathname carefully. Copy the URL into a browser to see if it loads the policy file. Check your firewall logs to make sure the request isn’t being blocked, especially if its on a non-standard port number, for example: http://subdomain.yourwebsite.com:8001/map.aspx.
The URL is blocked or the policy file wasn’t found by URLLoader() or URLRequest(). It can also show up when using HTTPS and HTTPService(). Re-check that your URL is correctly spelled and is loadable. Try to run the app in a browser while using Firebug or Fiddler.
The policy file loaded okay, but domain access is not allowed. Check the policy file settings.
Problem is with the server not the client app. Check directory permissions and other configuration files for your server. On a Windows Server check the Event Viewer log since it will contain all the details for the error.
Set Project to Run on Local Web Server
If you are running into cross-domain problems on your dev box while making calls to external web services, or if you want to more accurately represent a production environment, try setting your Flex Builder or Visual Studio project to run on your local web server (e.g. IIS or Apache).
Here’s an example for Visual Studio 2008 and IIS 7. For Flex, see the example screenshot below. Also don’t forget to move your cross-domain policy files to your local web server root.
We have had a lot of talk about Unique ID’s in the last few weeks and GUID’s have came up a few times. We wanted to add some more information to this topic. GUID’s or Globally Unique Identifier are essentially unique values. These are used by the geodatabase for replication and editing in ArcGIS Mobile in a special field called Global ID. This Global ID field is managed by ArcGIS. When a feature is created, it is auto populated with a GUID, either in ArcGIS Desktop, ArcGIS Server or in ArcGIS Mobile. This should not be used for a Unique ID. These values can change if you have to reload the data at some point or if you drop the Global ID field and re-add it. I would say that you should not use any field managed by something as a unique ID. But there is a GUID Option.
There is also a GUID field type. This allows you to use the GUID data type as a unique ID. It is up to you to manage it, but there are some tools to help. We are looking at adding an option in the Dynamic Value table so the Attribute Assistant that is part of the editing template can add a GUID for you. I have included a VBScript function that can be used in the Field Calculator. Please see the attach GUID.Cal file.
You can read more about GUID’s on this Wiki article. – http://en.wikipedia.org/wiki/Globally_Unique_Identifier
Notes can be used to add lots of different content to your map, including photos, reports, videos, and more. Here we’ll take a look at using notes to add a live Web cam, this one from Yellowstone National Park.
First, let’s have a look at the Yellowstone National Park Web site where we’ll find a page that contains the Web cam that provides a view of Old Faithful and the Upper Geyser Basin. At the Park site, under Photos and Multimedia, we’ll find a description and link that take us to the live Web cam page.
If we click to open the cam we’ll see the current view of the Upper Geyser Basin, and if we’re lucky we’ll see Old Faithful erupting (we weren’t lucky at the time we made this post).
In ArcGIS Explorer we’ve switched our basemap from the default basemap to the physical basemap which includes the topo maps for the US. We use Find and enter “Old Faithful” to locate the geyser, then choose to move our location to the map which creates a note that we’ll edit.
Clicking the note pushpin to open its popup, we start editing by clicking Edit Popup.
Looking again at the Yellowstone National Park Web cam, you’ll see the URL that points to the cam at the top of the window.
Just copy the URL and paste it into the note popup contents.
And now we’ve got the Web cam placed on our map, so we can click to see if we can catch Old Faithful erupting, export it (save it as an NMC file), or share it by E-mailing it to others.
For more information on notes, check the following ArcGIS Explorer Help topics under Adding Notes to the map in Contents:
We have had several questions about configuring the Tax Parcel Editing Toolbar from those of you in the Land Records community who have downloaded it. Thank you for all of your good feedback and questions. The toolbar can be configured to set default values and behaviors for its tools. You can configure settings such as the feature class and field names used for searches and for retiring parcels, as well as default values for the Snake PIN tool and Zipper Task. If you would like to configure the toolbar settings to meet the specific needs of your tax parcel editors, read on for instructions.
An XML configuration file called TaxParcelDesktopTools.config is included with the Toolbar during installation. By editing the configuration file, you can change the settings for the toolbar. Here is where you can find the configuration file if you used the default installation path.
Before editing the file it is a good idea to make a copy as a backup. The file can be opened in Notepad, but it’s better to use an IDE application like Microsoft Visual Web Developer 2008 Express Edition to provide color coded text like you will see in the XML code shown throughout this blog entry. When you open the XML configuration file, you will notice that it contains a series of key and value pairs such as the one shown below. The key and value pairs control various behaviors of the toolbar.
<add key=“Search_ParcelID_FeatureClass“ value=“TaxParcel“ />
Warning: Do not modify the key text. Only the values should be altered.
Let’s examine the various components of the configuration file.
The first part of the configuration file configures the search capability of the toolbar. The keys control each feature class and field name to search on and control the zoom extent around a search result. Here are the keys for the Parcel ID search, for example:
<add key =“Search_ParcelID_FeatureClass” value=“TaxParcel“/>
<add key =“Search_ParcelID_FieldName” value=“PARCELID“/>
<add key =“Search_ParcelID_ExpandX” value=“1.5“/>
<add key =“Search_ParcelID_ExpandY” value=“1.5“/>
<add key =“Search_ParcelID_ExpandAsRatio” value=“true“/>
The Parcel ID search looks for a feature in the TaxParcel feature class with a value in the PARCELID field that matches the search value entered. When a parcel is found by the search or when a user clicks on a parcel from the list of results, the display zooms to 1.5 times the extent of the parcel in both the X and Y directions.
Notice in the configuration file that for each of the four types of searches included on the “Search By” list (Parcel ID, Conveyance, Map Page, or PLSS Polygon) there is a set of configurable parameters using XML key and value pairs. The purpose of the keys is as follows:
a. FeatureClass – This value is the name of the feature class for the layer in the map that the application will search.
b. FieldName – This value tells the application which field in the feature class to use for the search query.
c. ExpandX (optional) – If a record is found, the map will zoom to it but zoom out by this amount in the X direction.
d. ExpandY (optional) – If a record is found, the map will zoom to it but zoom out by this amount in the Y direction.
e. ExpandAsRatio (optional) – Controls whether the zoom out expansion is a ratio or an actual distance.
Search Results Window
When a search query returns multiple results, it is up to the user to manually select the correct record to zoom to. This is done by double clicking a record in the Search Results Window. You can control whether the Search Results Window pops up automatically after every search using the following key.
<add key =“Search_SearchResultsWindow_OpenAfterSearch” value=“true“/>
The valid settings for the value key are:
a. true – The Search Window will appear automatically after every search.
b. false – The Search Window will remain hidden until the user clicks the button to show it.
Retire Selected Parcels
The Retire Selected Parcels tool provides a quick way to export selected tax parcels to an archive feature class before they are edited. The keys control which feature classes and fields are used during the process.
<add key =“RetireTaxParcel_DynamicValuesFeatureLimit” value=“1000“/>
<add key =“RetireTaxParcel_OriginFeatureClass” value=“TaxParcel“/>
<add key =“RetireTaxParcel_OriginParcelIDField” value=“PARCELID“/>
<add key =“RetireTaxParcel_DestFeatureClass” value=“TaxParcelHistory“/>
<add key =“RetireTaxParcel_DestParcelIDField” value=“PARCELID“/>
<add key =“RetireTaxParcel_DestDocumentReferenceField” value=“DOCREF“/>
<add key =“RetireTaxParcel_DestHistoryTypeField” value=“HISTORYTYP“/>
<add key =“RetireTaxParcel_DestHistoryDateField” value=“HISTORYDT“/>
<add key =“RetireTaxParcel_DestCommentsField” value=“COMMENTS“/>
<add key =“RetireTaxParcel_HistoryTypeDomainList” value=“Retired Tax Parcel,ROW Vacation,Alley Vacation,Other,Unknown“/>
The purpose for each of the keys is described here:
a. DynamicValuesFeatureLimit – This is a control valve for the OnCreate trigger for Dynamic Values. Too many records can be very CPU intensive, thus the need for a limit.
b. OriginFeatureClass – Selected features will be copied from this feature class.
c. OriginParcelIDField – The specified field in the origin feature class will provide the parcel ID attribute value for the new record created in the History layer.
d. DestFeatureClass – This feature class is the target for the copied records.
e. DestParcelIDField – The parcel ID attribute value will be pasted in this destination feature class field for each record.
f. DestDocumentReferenceField – Information entered into the document reference input of the Retire Selected Parcels form is added into this destination feature class field.
g. DestHistoryTypeField – The History Type chosen on the Retire Selected Parcels form is added to this destination feature class field. An attribute domain that includes the valid history types should be set on this field.
h. DestHistoryDateField – This destination feature class field will hold the timestamp of when the record was added to the history layer.
i. DestCommentsField – The text entered into the Comments on the form is added into this destination feature class field.
j. HistoryTypeDomainList – Enter the valid domain values from your destination feature class history type field here. The drop-down list in the Retire Selected Parcels form comes from here.
The zipper task uses a form to control which features will be “zipped up” together within a given tolerance.
<add key =“ZipperTask_SearchDistance” value=“30“/>
The value for the SearchDistance key specifies the tolerance in map units for the coordinate search during the zipping process. The zipper task form uses this value.
Snake PIN Task
The Snake PIN task is used to create parcel identification numbers for parcels using a digitized sketch (snake path) by incrementing from a starting value.
<add key =“SnakePIN_TargetLayerName” value=“TaxParcel“/>
<add key =“SnakePIN_TargetLayerField” value=“PARCELID“/>
<add key =“SnakePIN_StartValue” value=“1“/>
<add key =“SnakePIN_IncrementValue” value=“1“/>
<add key =“SnakePIN_PrefixValue” value=“”/>
<add key =“SnakePIN_SuffixValue” value=“”/>
<add key =“SnakePIN_IncludeEnds” value=“true“/>
<add key =“SnakePIN_ParsePrefixes” value=“false“/>
a. TargetLayerName – This is the default layer for the task. The form will search for this layer in the map.
b. TargetLayerField – This is the default field in the target layer to use for the new PIN values.
c. StartValue – This is the default starting value for the first parcel found in the digitized sketch.
d. IncrementValue – Each subsequent parcel found along the sketch will have its PIN value equal to the last value plus this value.
e. PrefixValue – This will put a value in the Prefix box in the form. It is blank by default.
f. SuffixValue – This will put a value in the Suffix box in the form. It is blank by default.
g. IncludeEnds- This Boolean value specifies whether to update the PIN for the first and last parcels found along the digitized sketch.
h. ParsePrefixes – When the results of incremented values exceed the string length of the original value it may be necessary to drop a digit from the Prefix value. Since Prefixes are not always used this value is set to false by default.
The Combine Parcels tool uses the built-in Merge command with a little twist. It has the capability to capture shared boundaries before a merge and copy them to a historical line layer. This functionality can be turned on or off.
<add key =“MergeCmd_UpdateHistory” value=“true“/>
<add key =“MergeCmd_MergeLayer” value=“TaxParcel“/>
<add key =“MergeCmd_HistoryLayer” value=“ParcelBoundary“/>
<add key =“MergeCmd_HistoryField” value=“CARTLNTYP“/>
<add key =“MergeCmd_HistoryVal” value=“Tax Parcel Historical Boundary“/>
The purpose of each key is as follows:
a. UpdateHistory – This is the toggle for the historical boundary functionality. True = on and false = off.
b. MergeLayer – The merge layer is the feature class that contains the selected records that are being merged (tax parcels).
c. HistoryLayer – A line feature class that will take the shared boundaries of selected records before they are merged.
d. HistoryField – The name of the field in the history layer feature class that is used to symbolize old boundaries.
e. HistoryVal – The text value that will be written in the history field for the new record (typically a domain value).
The Dynamic Values extension is used to automatically update attributes when a feature is created or modified. It uses a table in the database to keep track of which functions will be performed on various datasets. Please consult the Tax Parcel Editing Toolbar Functionality blog entry for more information about this tool and its options for updating fields.
<add key =“DynamicValues_TableName” value=“DYNAMICVALUE“/>
<add key =“DynamicValues_EnabledOnStartUp” value=“true“/>
Following is the purpose of the dynamic value keys:
a. TableName – The name of the table that will be used for keeping track of the functions that need to be performed when data is created or changed in registered layer(s). This table should be in the map document.
b. EnabledOnStartUp – The extension can be toggled on or off from the toolbar. This parameter controls whether the extension is turned on when ArcMap is opened or not.
We hope you find this information to be helpful. Feel free to post comments or send an email to ArcGISTeamLandRecords@esri.com.