Popups in ArcGIS.com are pretty cool and easy to create. Here is a map I just made for stream gauges and weather stations. It is a copy of the USGS map with popups enabled. Just click the points in the map to get more information.
View Larger Map
Friday, May 6, 2011
Thursday, April 28, 2011
IGIC Webinar - GIS In the cloud follow up
In my presentation today for IGIC I discussed three aspects of GIS in the cloud.
Using ArcGIS.com entirely to share maps
The web map that I created in the presentation is accessible here: http://www.arcgis.com/home/webmap/viewer.html?webmap=b825be4db4ae40e6ad7b16629a5fb672
ArcGIS.com documentation:
http://help.arcgis.com/en/arcgisonline/help/index.html#//010q00000002000000.htm
I didn’t even get into ArcGIS Explorer online and making presentations. That is an incredibly powerful concept. ArcGIS Explorer online has its own help pages available here: http://help.arcgis.com/en/arcgisexplorer/help/
These web maps that you create in ArcGIS.com can also be used in an iPhone or Windows Phone 7 as well.
Using ArcGIS Online to make you more productive with ArcGIS Desktop
Desktop documentation for working with ArcGIS online:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Adding_data_from_ArcGIS_online/006600000441000000/
and:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/00sp/00sp0000001z000000.htm
I showed downloading a layer package(Earthquake epicenters and Indiana Big Trees) from ArcGIS.com. There is more information on layer packages here:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/00s5/00s500000013000000.htm
and creating a map packages here:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Creating_a_map_package/006600000403000000/
The drive time analysis Geoprocessing tool that I used in the presentation is available here:
http://www.arcgis.com/home/item.html?id=16f372f4d05d40c3ab6040a98dbcae7d
Connecting to the server from ArcGIS Desktop can be done with this URL:
http://sampleserver1.arcgisonline.com/ArcGIS/Services
Building an ArcGIS Server system in the cloud using Amazon EC2
The resource center gallery for local government where I downloaded the Citizen Service Request Template is here:
http://localgovtemplates2.esri.com/gallery/gallery.html
And you can access the template directly here:
http://www.arcgis.com/home/item.html?id=cf64d38f5d1d4b34867a59073f5cd0b6
Documentation for working with ArcGIS Server on Amazon EC2 is available here:
http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_on_amazon_ec2/index.html
I worked through a replication workflow with the cloud. The ArcGIS Server on Amazon EC2 documentation has more information on this here:
http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_on_amazon_ec2/index.html#/Replication_to_an_Amazon_EC2_instance_using_geodata_services/00rq0000000p000000/
and replication documentation in the ArcGIS Desktop Help:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/0027/002700000020000000.htm
I hope everyone found the webinar useful. If you haven't taken 5 minutes to fill out the survey yet, please click here.
- Using ArcGIS.com entirely to share maps
- Using ArcGIS Online to make you more productive with ArcGIS Desktop
- Building an ArcGIS Server system in the cloud using Amazon EC2
Using ArcGIS.com entirely to share maps
The web map that I created in the presentation is accessible here: http://www.arcgis.com/home/webmap/viewer.html?webmap=b825be4db4ae40e6ad7b16629a5fb672
ArcGIS.com documentation:
http://help.arcgis.com/en/arcgisonline/help/index.html#//010q00000002000000.htm
I didn’t even get into ArcGIS Explorer online and making presentations. That is an incredibly powerful concept. ArcGIS Explorer online has its own help pages available here: http://help.arcgis.com/en/arcgisexplorer/help/
These web maps that you create in ArcGIS.com can also be used in an iPhone or Windows Phone 7 as well.
Using ArcGIS Online to make you more productive with ArcGIS Desktop
Desktop documentation for working with ArcGIS online:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Adding_data_from_ArcGIS_online/006600000441000000/
and:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/00sp/00sp0000001z000000.htm
I showed downloading a layer package(Earthquake epicenters and Indiana Big Trees) from ArcGIS.com. There is more information on layer packages here:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/00s5/00s500000013000000.htm
and creating a map packages here:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Creating_a_map_package/006600000403000000/
The drive time analysis Geoprocessing tool that I used in the presentation is available here:
http://www.arcgis.com/home/item.html?id=16f372f4d05d40c3ab6040a98dbcae7d
Connecting to the server from ArcGIS Desktop can be done with this URL:
http://sampleserver1.arcgisonline.com/ArcGIS/Services
Building an ArcGIS Server system in the cloud using Amazon EC2
The resource center gallery for local government where I downloaded the Citizen Service Request Template is here:
http://localgovtemplates2.esri.com/gallery/gallery.html
And you can access the template directly here:
http://www.arcgis.com/home/item.html?id=cf64d38f5d1d4b34867a59073f5cd0b6
Documentation for working with ArcGIS Server on Amazon EC2 is available here:
http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_on_amazon_ec2/index.html

I worked through a replication workflow with the cloud. The ArcGIS Server on Amazon EC2 documentation has more information on this here:
http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_on_amazon_ec2/index.html#/Replication_to_an_Amazon_EC2_instance_using_geodata_services/00rq0000000p000000/
and replication documentation in the ArcGIS Desktop Help:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/0027/002700000020000000.htm
I hope everyone found the webinar useful. If you haven't taken 5 minutes to fill out the survey yet, please click here.
Wednesday, February 2, 2011
Max instances = a really big number
First off, sorry for the long delays between posts. This year I plan to be more active.
So recently I got asked about the max instances used in ArcGIS Server. What should I set it to? How does this relate to capacity?
Max instances is the total number of map workers processes that can respond to a map request. so if a map service has more of these then it has more capacity to respond to requests. I use the term processes here loosely. They are actually only separate processes (ArcSOC.exe) when your service is set to high-isolation. when in low isolation the instances are worker threads inside of an ArcSOC.exe processes. Rarely is it a good idea to use low-isolation so lets just stick with the default high-isolation.
So back to the question. What should I set max instances to for a service. My recommendation is 1000000 or 10000000 or something ridiculously big like that. However, if you do this, you MUST also set capacity on each SOC machine. Capacity is the total number of instances that a SOC machine will support. If you don't have a good idea of what to set this to, guess (maybe 50). Then monitor your system. Its really difficult to get this number right out of the gate so system monitoring is really important. If you find yourself at max instance but the machine still has capacity then up the number accordingly. It is probably better to guess on the low side and adjust up then the other way around. 25 or 50 is a good place to start.
Now back to that ridiculously big max instance number. The reason I like to set this number so high is it lets ArcGIS Server adjust the instance to the popular services as it sees fit.
Lets say the capacity on your system is 10 and you have two map services A and B.
Scenario 1: Both A and B have max instances set to 5. Let’s say service A becomes wildly popular but nobody is interested in service B. The best you can do is use half the capacity of your system (5 instance).
Scenario 2: Both A and B have max instances set to 1,000,000. Again service A becomes wildly popular but nobody is interested in service B. Now the system can focus all of its capacity where it is needed, on service A. The total number of instances used will only ever equal your capacity.
So I generally recommend this ridiculously high maximum approach. Mostly because it is extremely difficult to figure out up front, what the overall usage is going to be for a service. This will increase the amount of instance destruction and creation (which is costly) but I think it is worth it to fully utilize your system. You can also adjust your idle timeout to a longer interval to reduce the amount of instance turnover. I like to set my min instances to 0 and max instances to 1000000 and set my idle timeout to about a day (86400). That way you won't dip to 0 instances for a service unless it has gone unused for a day. This could lead to a Monday morning groggy server problem but that could be mitigated with scripts or if you notice the services that are always hit Monday morning, set their minimums to 1.
So recently I got asked about the max instances used in ArcGIS Server. What should I set it to? How does this relate to capacity?
Max instances is the total number of map workers processes that can respond to a map request. so if a map service has more of these then it has more capacity to respond to requests. I use the term processes here loosely. They are actually only separate processes (ArcSOC.exe) when your service is set to high-isolation. when in low isolation the instances are worker threads inside of an ArcSOC.exe processes. Rarely is it a good idea to use low-isolation so lets just stick with the default high-isolation.
So back to the question. What should I set max instances to for a service. My recommendation is 1000000 or 10000000 or something ridiculously big like that. However, if you do this, you MUST also set capacity on each SOC machine. Capacity is the total number of instances that a SOC machine will support. If you don't have a good idea of what to set this to, guess (maybe 50). Then monitor your system. Its really difficult to get this number right out of the gate so system monitoring is really important. If you find yourself at max instance but the machine still has capacity then up the number accordingly. It is probably better to guess on the low side and adjust up then the other way around. 25 or 50 is a good place to start.
Now back to that ridiculously big max instance number. The reason I like to set this number so high is it lets ArcGIS Server adjust the instance to the popular services as it sees fit.
Lets say the capacity on your system is 10 and you have two map services A and B.
Scenario 1: Both A and B have max instances set to 5. Let’s say service A becomes wildly popular but nobody is interested in service B. The best you can do is use half the capacity of your system (5 instance).
Scenario 2: Both A and B have max instances set to 1,000,000. Again service A becomes wildly popular but nobody is interested in service B. Now the system can focus all of its capacity where it is needed, on service A. The total number of instances used will only ever equal your capacity.
So I generally recommend this ridiculously high maximum approach. Mostly because it is extremely difficult to figure out up front, what the overall usage is going to be for a service. This will increase the amount of instance destruction and creation (which is costly) but I think it is worth it to fully utilize your system. You can also adjust your idle timeout to a longer interval to reduce the amount of instance turnover. I like to set my min instances to 0 and max instances to 1000000 and set my idle timeout to about a day (86400). That way you won't dip to 0 instances for a service unless it has gone unused for a day. This could lead to a Monday morning groggy server problem but that could be mitigated with scripts or if you notice the services that are always hit Monday morning, set their minimums to 1.
Monday, February 1, 2010
ArcGIS Server Security and Windows 7
So I got this new fancy machine with Windows 7 installed. Let me tell you, it is a breath of fresh air after all those years of XP. Anyway, I was setting up a demo for ArcGIS Server security and I noticed that after I configured ArcGIS server to use SQL users and groups I got an error when I tried to create any users. At the bottom of manager I got the following error:
Unable to connect to SQL Server. Possible reasons include SQL Server not running, network problems, and permission denied for the account used to access SQL Server. See ArcGIS Server Help for more information.
The reason for this is IIS uses an ApplicationPoolIdentity instead of the Network Service. You can read more about this ApplicationPoolIdentity in the blog Goodbye Network Service. ArcGIS server is setup to grant access to the SQL Data base for Network Service but not for this new application pool identity. So after you run through the wizard to setup SQL for users and roles you need to run this little SQL script to grant the ApplicationPoolIdentity access to the database. You will need SQL Server Management Studio to run this script.
The following script creates a new login in SQL server for the DefaultAppPool. It then creates a user in aspnetdb database and grants it appropriate permission to manage the membership and role tables. If you named your database something other than aspnetdb you will need to change this script according.
CREATE LOGIN [IIS APPPOOL\DefaultAppPool]
FROM WINDOWS WITH DEFAULT_DATABASE=[aspnetdb]
USE [aspnetdb]
CREATE USER [IIS APPPOOL\DefaultAppPool]
FOR LOGIN [IIS APPPOOL\DefaultAppPool]
EXEC sp_addrolemember N'aspnet_Membership_FullAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_ReportingAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Membership_BasicAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Membership_ReportingAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_BasicAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_FullAccess', N'IIS APPPOOL\DefaultAppPool'
GO
Unable to connect to SQL Server. Possible reasons include SQL Server not running, network problems, and permission denied for the account used to access SQL Server. See ArcGIS Server Help for more information.
The reason for this is IIS uses an ApplicationPoolIdentity instead of the Network Service. You can read more about this ApplicationPoolIdentity in the blog Goodbye Network Service. ArcGIS server is setup to grant access to the SQL Data base for Network Service but not for this new application pool identity. So after you run through the wizard to setup SQL for users and roles you need to run this little SQL script to grant the ApplicationPoolIdentity access to the database. You will need SQL Server Management Studio to run this script.
The following script creates a new login in SQL server for the DefaultAppPool. It then creates a user in aspnetdb database and grants it appropriate permission to manage the membership and role tables. If you named your database something other than aspnetdb you will need to change this script according.
CREATE LOGIN [IIS APPPOOL\DefaultAppPool]
FROM WINDOWS WITH DEFAULT_DATABASE=[aspnetdb]
USE [aspnetdb]
CREATE USER [IIS APPPOOL\DefaultAppPool]
FOR LOGIN [IIS APPPOOL\DefaultAppPool]
EXEC sp_addrolemember N'aspnet_Membership_FullAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_ReportingAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Membership_BasicAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Membership_ReportingAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_BasicAccess', N'IIS APPPOOL\DefaultAppPool'
EXEC sp_addrolemember N'aspnet_Roles_FullAccess', N'IIS APPPOOL\DefaultAppPool'
GO
Tuesday, December 8, 2009
Silverlight Combobox with keyboard input
Recently I had to create some comboboxes in a silverlight app that contained quite a few items. Scrolling through so many items in the list made it difficult to find what you want. I wanted the combo to respond to keyboard input such that I could press a key and have it jump to the first item in the list that started with that letter. I was kind of surprised not to find this as a standard property of the silverlight combo.
The solution I came up with uses the KeyUp event to select the appropriate item in the list. The trick is, you need to handle the KeyUp event for the Combo as well as the ItemsPanel of the combo. Once you start scrolling or interact with the list, you are interacting with the ItemsPanel of the combo, so you need to handle the events there if you want to allow keyboard input multiple times. The XAML looks like this:
<ComboBox
Width="50"
Height="20"
x:Name="cboSimple"
KeyUp="cboSimple_KeyUp" >
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel KeyUp="cboSimple_KeyUp"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBoxItem Content="A" />
<ComboBoxItem Content="B" />
<ComboBoxItem Content="C" />
<ComboBoxItem Content="D" />
<ComboBoxItem Content="E" />
</ComboBox>
Now when you handle the event you to select the item in the combo. So instead of working with the sender for the event, you will work with the combo by name. LINQ can be used for finding all the items that start with the letter selected on the keyboard.
private void cboSimple_KeyUp(object sender, KeyEventArgs e)
{
SelectItemInCombo(cboSimple, string.Format("{0}", Convert.ToChar(e.PlatformKeyCode)));
}
private void SelectItemInCombo(ComboBox cBox, string keyLetter)
{
IEnumerable<object> itemsWithStartcChar =
cBox.Items.Where(c => ((ComboBoxItem)c).Content.ToString().StartsWith(keyLetter));
if (itemsWithStartcChar.Count() > 0)
{
cBox.SelectedItem = itemsWithStartcChar.First();
}
}
Notice that first I do a select so I can get a count of the items that start with the letter that was pressed. Without this you get an exception on the First function if the list is empty.
This is also a very simple list. If your combo contains more than simple strings you will need to find the string within the ComboBoxItem that you are sorting by.
The solution I came up with uses the KeyUp event to select the appropriate item in the list. The trick is, you need to handle the KeyUp event for the Combo as well as the ItemsPanel of the combo. Once you start scrolling or interact with the list, you are interacting with the ItemsPanel of the combo, so you need to handle the events there if you want to allow keyboard input multiple times. The XAML looks like this:
<ComboBox
Width="50"
Height="20"
x:Name="cboSimple"
KeyUp="cboSimple_KeyUp" >
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel KeyUp="cboSimple_KeyUp"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBoxItem Content="A" />
<ComboBoxItem Content="B" />
<ComboBoxItem Content="C" />
<ComboBoxItem Content="D" />
<ComboBoxItem Content="E" />
</ComboBox>
Now when you handle the event you to select the item in the combo. So instead of working with the sender for the event, you will work with the combo by name. LINQ can be used for finding all the items that start with the letter selected on the keyboard.
private void cboSimple_KeyUp(object sender, KeyEventArgs e)
{
SelectItemInCombo(cboSimple, string.Format("{0}", Convert.ToChar(e.PlatformKeyCode)));
}
private void SelectItemInCombo(ComboBox cBox, string keyLetter)
{
IEnumerable<object> itemsWithStartcChar =
cBox.Items.Where(c => ((ComboBoxItem)c).Content.ToString().StartsWith(keyLetter));
if (itemsWithStartcChar.Count() > 0)
{
cBox.SelectedItem = itemsWithStartcChar.First();
}
}
Notice that first I do a select so I can get a count of the items that start with the letter that was pressed. Without this you get an exception on the First function if the list is empty.
This is also a very simple list. If your combo contains more than simple strings you will need to find the string within the ComboBoxItem that you are sorting by.
Tuesday, December 1, 2009
ArcGIS Server and Virtualization
I've gotten several questions lately regarding virtualization and capacity planning with regard to ArcGIS Server. Below are my answers to some of these questions.
Q: What is ESRI’s official supportability of virtualization of ArcGIS Server?
A: ArcGIS Server is supported in a virtualized system. See: http://www.esri.com/software/arcgis/arcgisserver/common-questions.html. Go down to Standards | Interoperability | IT | Security. The third question down deals with virtualization. Basically, virtual systems are treated the same as physical systems.
Q: What versions of Microsoft Windows are supportable deployments? 32 or 64bit support?
A: The same as support for physical systems. http://wikis.esri.com/wiki/display/ag93bsr/Web+ADF+for+the+Microsoft+.NET+Framework.
Q: What kind of resources (RAM / CPU / Disk) do I need to allocate to ArcGIS Server?
A: It all depends on the services that you are using, the applications that consume those services (desktop, web/server, web/browser), and the number of users that will be interacting with the system. The book Building a GIS discusses how to use the Capacity Planning Tool that you can use to estimate capacity. You can find info on that here: http://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=141&moduleID=27. To get a more exact picture of performance and scalability you should test an application in a configuration to see how many users it will support. There is information on how to do this here: http://resources.esri.com/arcgisserver/adf/dotnet/index.cfm?fa=mediaGalleryDetails&mediaID=6D73B2DB-1422-2418-344143680A5154BA
Q: Are there any special considerations for virtual systems?
A: The one performance issue that usually plagues VM’s is disk IO. ArcGIS Server tends to do a lot of disk IO. Geoprocessing services do the most disk IO but even a simple dynamic map request involves a write to disk. So improving the performance and scalability of your disk IO will have a significant impact on system performance. For this reason, I prefer to put my ArcGIS Server, server directories on a SAN. I’m not talking about a virtual disk on a SAN, I mean the SAN is attached directly to the VM. This way, you get the fast disk IO from your SAN without the dealing with the disk IO of the virtual machine. This also makes it easier to allocate space for the machine and it makes it easy to share the same server directories between VMs.
Q: What is ESRI’s official supportability of virtualization of ArcGIS Server?
A: ArcGIS Server is supported in a virtualized system. See: http://www.esri.com/software/arcgis/arcgisserver/common-questions.html. Go down to Standards | Interoperability | IT | Security. The third question down deals with virtualization. Basically, virtual systems are treated the same as physical systems.
Q: What versions of Microsoft Windows are supportable deployments? 32 or 64bit support?
A: The same as support for physical systems. http://wikis.esri.com/wiki/display/ag93bsr/Web+ADF+for+the+Microsoft+.NET+Framework.
Q: What kind of resources (RAM / CPU / Disk) do I need to allocate to ArcGIS Server?
A: It all depends on the services that you are using, the applications that consume those services (desktop, web/server, web/browser), and the number of users that will be interacting with the system. The book Building a GIS discusses how to use the Capacity Planning Tool that you can use to estimate capacity. You can find info on that here: http://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=141&moduleID=27. To get a more exact picture of performance and scalability you should test an application in a configuration to see how many users it will support. There is information on how to do this here: http://resources.esri.com/arcgisserver/adf/dotnet/index.cfm?fa=mediaGalleryDetails&mediaID=6D73B2DB-1422-2418-344143680A5154BA
Q: Are there any special considerations for virtual systems?
A: The one performance issue that usually plagues VM’s is disk IO. ArcGIS Server tends to do a lot of disk IO. Geoprocessing services do the most disk IO but even a simple dynamic map request involves a write to disk. So improving the performance and scalability of your disk IO will have a significant impact on system performance. For this reason, I prefer to put my ArcGIS Server, server directories on a SAN. I’m not talking about a virtual disk on a SAN, I mean the SAN is attached directly to the VM. This way, you get the fast disk IO from your SAN without the dealing with the disk IO of the virtual machine. This also makes it easier to allocate space for the machine and it makes it easy to share the same server directories between VMs.
Thursday, August 13, 2009
ArcGIS Server installed on a domain controller
Several folks have asked me if it is ok to install ArcGIS Server on a domain controller. The simple answer is no. The main reason is the GIS server uses local groups to control access and a domain controller does not allow for local groups. Another really good reason is that Microsoft says that you shouldn't use a domain controller as a server for IIS or otherwise.
See:
http://www.microsoft.com/windows/windows2000/en/server/iis/htm/core/iisckl.htm (under specifically Do not use PDC as a server)
And
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/3a0742c4-f45a-4504-a232-83dd085bcfb3.mspx?mfr=true
See:
http://www.microsoft.com/windows/windows2000/en/server/iis/htm/core/iisckl.htm (under specifically Do not use PDC as a server)
And
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/3a0742c4-f45a-4504-a232-83dd085bcfb3.mspx?mfr=true
Subscribe to:
Posts (Atom)