Archive for the 'ESRI' Category

If you want to hear what I sound like

Very Spatial interviewed me at the dev summit but since I can’t download MP3s at work I will have to wait until tonight to hear all the embarrassing things I say. They really are a nice duo to talk with and, as per usual, they had to stop me from talking since my mouth runneth like the Sacramento river …

Final day and still in Palm Springs

Well the final day was interesting - I was tired and feeling a bit burnt so I didn’t really attend any sessions. Instead I went to lunch with Kerry, Anne, and Jeremy and had some interesting non-GIS discussions. Unfortunately I had gotten the Jamba juice with the performance boost which turns out to be not a good idea for my stomach first thing in the morning. We came back just in time for the Q&A session.

Nothing earth shattering was revealed there except there was very much the sense that ESRI was reaching out for developers to partner with them. They are also looking for good people to hire (Jack mentioned something like 500 open positions at ESRI currently). There was a suggestion to have ESRI expand the blogging - which got cheers from the crowd. There was more discussion on the pricing for server. There was also a request to have sessions and spread the conference out combined with more hands on work, such as pre-conference 1/2 day and full day sessions . I recomended a hands-on-lab with preloaded data and software so we could go and try some of the code we just saw in a session or we could pull someone from an island to help us out.

On the pricing issue I recommneded that ESRI look to MS for it’s ability to push into the small business marketplace. MS has done a great job of owning the small business space with aggresive pricing. Our company has quite a few seats of Arc desktop products at various levels and a few server products. But if I went to them and said how about 30K more for another server product I think there would be some serious pushback. On the other hand we have entered in various levels of MS enterprise licensing. ESRI should look for some small business enterpise licensing model.  Help us to spread GIS around our organization and we are more likely to spread it outside the organization as well.

Overall I think the developer summit was the hawesome. As primarily a developer, I will not be  attending the UC any more but instead be focusing on this conference instead. I get to meet ESRI developers and developers who use ESRI products. The discussions are right where I want them to be and focused on the issues I have to deal with. The feel of the conference is definetly much more developer friendly.  The only reason I would not reccomend it is purely selfish: I do not want it getting so big that it becomes gigantoid and more impersonal.

I had two major goals when attending - more geodb and more .NET.  I am now ready to go home and hit the ground running.

Improvements: They really need to do a better job with the food for vegetarians. While wireless was generally good overall, there were a few times when connections were spotty. More power outlets in the session rooms. The conference should be one day longer and the sessions should be shorter. I think 30-45 minutes is a better length. It would focus the presentations and it would be easier for me to not feel overwhelmed.  ESRI should encourage more birds of a feather sessions so developers can interact more with each other.

If you are thinking that you want to grow your developer community then do not base your product decisions off the people who show up at the conference. While it is important to gauge support from your current user base it is also important to gather information from people outside the community. So asking at the closing session how many people are interested in a .NET or Java connector verus a C++ connector is sure to get a you an overwhelming response for .NET or Java since 95% of the audience members program in that language. Biased survey techniques give you very biased anwers.

The second part of my title comes from the fact that my flight to Sac got cancelled last night. Matt and I were on the same flight to Phoenix and when we got there we soon realized there were some delays. Because of delays into phoenix I would have missed my connection to Sac and would have been stuck looking for a hotel in Phoenix at 10pm last night. . So I spent another night in Palm springs. I am not sure what Matt chose to do but there were quite a few unhappy U.S. Airways people last night.

GEODB replication

Replication

Simple - copy and overwrite
Problems - no safeguards against data loss and redudant copies

DBMS replication
requirements - super duper knowledge of geodb tables and strucutres to know what to recplicate. No tools in arcgis
Doesn’t support complex types. Doesn’t work between different DB vendors

Positives - can work with non-versioned data, can replicate entire db,

Geodb replication
You can edit db independently and synch as needed over LAN or WAN
Works in connected and disconnected environments
Can replicate subsets and uses versioning
Though released at 9.2 it build off of stuff in ArcGIS since 8.? missed it

Type of replication
Checkout-checkin (only one synch back up to master)
Now have two way and one way which allows for multiple syncs.

Workflows- can involve both multi-user geodbs and single user geodb. But you can also use it as a means to distribute data.

GETTING STARTED:

Anticipate future needs in terms of spatial extent when defining data to replicate.
Have a well defined data model before creating replicas.
Choose the right replica type - consider 2 way replicas over checkin-checkout but use 1 way replication over 2 way where possible (it is simpler with no versions on child).
Use models or scripts for replicas you plan to create on a regular basis and set up with Windows scheduler
Consider some of these option -
re-use schema (build the schema before getting data)
register only - replicates pre-copied data (says that this data should be considered as participating in a replica
Relationship classes are expensive
Schedule synchs using a simple GP model - doing it regulary helps free up resources and makes sure things are up to date
Integrate synch with version management strategy - synch before running reconcile and compress services - reconcile serve should cover replicas with a manual reconcile policy

Network speed
For slow speeds use ArcGIS Server and geodata services - ultra slow should look at disconnected synch techniques

WHEN to write code

Basic creation and synching can be done with GP and require no coding
Write code when:
want to make it part of a large application
If you want to extend the process with custome business logic
Methods not exposed UI

COARSe Grained API (Recommended)
Geodataserver library - works locally or over the internet
Fine-Grained - local only

Connected - all replicas are available on the network either always or intermittenly, such as bringing in a laptop
Disconnected - not on the same network - you need to manage the message exchange. I think might be a good option to make sure you have backups for field work doesn’t get lost. They could email replicas each night or perhaps put them on a USB stick or something. Then if the data is lost you are good. Can you mix and match??

Create Replica in a Connected environment - steps

initialize a geodataserver for the source and target geodatabase - a bunch of code that I am spacing out on. I don’t understand if you need to have an ArcGIS Server up and running for this? I guess it does not matter since ArcGIS Server Basic Enterprise allows for an install of ArcGIS Server for geodb replication. I guess the same license key unlocks SDE portion of server and the Basic level of ArcGIS server…. interesting.

K, I just grabbed this from the code - you can point the synchonizer to a file at disk and then tell it to impor.

Best practices

You can only schema synchronize simple feature classes and tables - use replica regiratration open for large dataset replication create - use GeoDataserver instead ReplicateAgent when creating checkout to a new personal geodb or file geodb.

You can extend replication functionality by implementing a Workspace extension that suppoorts IWorkspaceReplicaEvents.

Demo to create a custom workspace extension to allow for the replication of non-versioned feature class. More code and I am burnt so I am really having problems focusing - but of course it looks easy here.  Alright, given my current mental state I am going to go sit on a couch somewhere and try to recharge a bit…

Web Service API to Server

I think this is definetly one of the cool ways to interact with ArcGIS Server. It also has the speed advantage of not being a DCOM call for each setting of a property. Here is some of the doc I wrote way back when on web services for the Server.

On to the Talk…

Based upon the WSDL and uses simple value types (familiar to ArcGIS Developers).

There is a service to tell you the services available called the services catalog web serivce. Http://servername/arcgisinstance/services?wsdl

getServiceDescription tells you the services and it’s capabilities.

MAP Service
use it to generate maps as well as information to be overlaid on the map, identify and query features which are returned as geodatbase record sets. Can easily changed to an ADO.NET recordset
You can ask for tiling from a tiled map cache service - then tiles can also be fetched by http get.

There is a slide with some of the most important methods you can query and now a demonstration. Shows getting the wsdl location from ArcCatalog and then look at the result in IE. Nice integration with VS2005. Add a Web Reference which contains the service url with ?wsdl on the end. Then you create all teh native c# objects - no COM proxies - no reference to the ESRI assemblies. Showing a simple call and response and now adding a map image to the form. Cool demo showing some of the range of stuff you can do with just the web services. Zooming, panning, and using bookmarks…

Cached map services:
Get info on the tiling scheme and you can get the virtual directory to allow you to start writing GET requests and bypass the server. You can use a Info object to know how the tiles are positions and set up.

Relationship to ArcObjects

There is a ArcObject (AO) which represents each of these WebService - so the AO object model diagram helps you understand how the web services interact. I know that the way you call them though is not exactly the same so be careful with how far you rely on the AO doc to understand what to do with the WSDL generated classes.

GLOBE Services - delivers data to 3D map and globe but I don’t think you can use it outside of a ArcGIS application

Geoprocessing Service - lots - o - methods so you can use this outside of an ArcGIS (AO) application. There is a synchornus and async modes of execution. Sync is only for small results since it locks the SOC until the job is done. Ansync is probably more useful for people since it will also allow you to draw results on a map. Time for another demo and I can’t wait to see this one!!

Clip data that is on the server and send it back to the client. It needs an mxd with a toolbox which creates a MapService and a GeoprocessingService. You can get a list of tools and what the tool needs to run and some help about it.

!!Looks like a dev pattern is to ask the server for a default value to build the value object for you and then populate it with the values you want.

How is the spatial geometry stored in that result set?? I am betting it is from the geodb schema XSD. That demo was awesome - did I mention there were no interops involved in this at all!!!

GEODATA services and replication - allows for access to a geodb over the web - can be used for synchronizing databases - has methods for browsing datasets, exporting datasets to xml, creating check-out, 1 and 2 way replicas, exporting and importing replicas… Rock! When it exports data you can pick the different formats to deliver the data.

Time for another demo. You can use data from SDE directly or based upon a map document (mxd).

You know this adds even more thoughts about Dave B’s thoughts on code generation. You could actually dynamically build an application using this service since you could ask the for the geodb schema. How boss would that be - Use an application to generate a simple application customized to a particular web service.hmmmmmmm

GEOCODE Service - 9.2 has high performance locators and it can be used in conjunction with an NETWORK ANALYSIS Service.  You can associate these with a map.

I am starting to burn out on sitting in sessions - I may have to go talk to people at islands or something. DONE

Turbocharging GeoDB interactions

Turbocharge
Some of the geodatabases uses different providers and some geodb object care about teh provider of the data

Object class properties
There are 4 methods that control it’s behavior - he is covering the methods you need to implement or that you can use to query an object to understand it’s geodb behavior. You ask questions of the feautre classes to see this. Care about this espwcially if you write a featureClass extension. You can only tighten a policy but not loosen.

Validating Data
Why we allow invalid data when loading?
Do not want it to disappear when loading - some storage representation allowed invalid geometries.
The goal is to keep data and then have you go look for bad stuff.

How to validate
Ephemeral topologies - keep it only QAQC but it is not permanent in the dataset
Validation rules
Class extensions - they can do validation checks
You can also catch things that are editor events.

When to validate
After loading but PRIOR to versioning but if you miss that
After loading but PRIOR to other users creating new versions off default - if you miss that
Before posting edits to Default (QA version)

There is an ivalidate API I validation interface - it is a quick abort logic - first error all done
The order to validation is subtype, attribute rules, network connectivity, custom rules (class extension), and then relationship rules.

How to do
IObjectClassExtension fill in the validate method (I think)

Dataset extensions
Class extensions and workspace extensions
Internal Arch. pattern for adding new datasets types to geodatabase
No need to touch GDB kernel, examples are network datasets, terrain datasets, representation classes, cadastral fabrics.

Can’t make your own but it changes how you work with the data - simplified end user access pattern. Navigation becomes generic, no need to use dataset type specific interfaces

IobjectClassContainer
IFeatureClassContainer

Slide of code that is hard to see.

Schema updates and creation - don’t use names but instead use a data elments which was grown out of geoprocessing. Once you populate this object with properties you then pass it into factory which gives you the dataset. This pattern will become significant to GEODB users in the future. Get comfortable with it…

EVENTS
Feature events and class extension events only appl to custom classes but other events are just fired

Example IRowEvents
OnChange - first functionality called in Store()

There is a chain of calls - you need the slide and you should think of this if you want your code to be called somewhere particular in the chain of events fired on a store event.

IObjectClass[Schema]Events - when you change the behavior of a feature class - add an object class extension or make something participate in a topology.

There are also events if you write a feature class extension that let’s you know if a relate class changes

He is covering a lot and it is hard for me to get it all here so I may switch my narrative mode….

There are ItopologyClassEvents for validation and it gives you all the areas that were validated.

There are also workspaceEditEvents - start or stop editing events and undo redo stuff

There are also IWorkspaceReplicaEvents which gives an event before and after creating children

There are IVersionEvents with things like OnReconcile or OnConfilctsDetected.

IVersionEvents2 which are added at 9.2


Cursors againRows created by class cursor are bound to the class that created the cursor - queryDef is not bound to any class so you can create joins.Search Cursors:
When in an edit session the query may actually just go to the cache and not be reconciled . A search cursor flushes the editor before doing your search.Update Cursor:
NextRow -> updateRow -> NextRow….
Update cursors are never satisfied by the cache and it will also flush the cache.
If class support Store events then under the hoods it is an update cursor. The UpdateRow Method - if you call it on a row that was not just retrieved the from the cursor you are hosed. Don’t do it!

Insert Cursor:
Best performance when using buffering and proper flushing. Crucial to InsertRow and Flush have the proper error handle since both can result in rows written to teh database.
Flush frequency is a tradeoff with performance vs your tolerance for how much data you want to redo on error
!!Try to ensure that class has no spatial class - extra processing is required with a cache since it is synchonizing the cache with the inserts to the geodb
There are two sets of buffers - one in your client and one on the workspace

QueryDef cursor

They bypass any row cache
Call an evaluate and you will call all rows for all classes to flush - same as stopEditOperation
They do not support editing of the rows.

Cursor Recycling
It reuses data structures for the row and so you better not try to pass it around
Recycling is asuggestion not a guarantee - they may not be able to give it - but assume you are going to get one
More of the same from yesterday.
It can save you a bunch of memory because the geodb does it’s own caching and recycling lets it use the cache.

Non-recylcing cursors, subfields, and editing
!!They may overide the subfield of a query filter to create a nonj-recycling cursor resulting in all field being fetched because of the caching. If the class is being edited then it won’t allow subqueries.

Cursor scope

don’t hold cursors if you don’t need them - scope the cursor to edit operation not edit sessions.

More facts - see the slide when it is published since there is a lot of text:
Use getrows rather than getRow in a loop
Search Cursors are favored for editing.

Map Caches are important to know and make sure understand all the ins and outs.

GEODATABASE Selection Sets

These are not arcmap selections it is an object that references a set of rows by object ids - it is bound to a class, you can add and remove ids, you can query the selection set
esriSelectionType

IDSet - object ID reference not guaranteed to remain in memory
Snapsot - we guarantee that they are stored in memory
hybrid - it starts out snapshot but based on a threshold it will transition to IDSet

SeletionOption:
AllIds, onlyOne, or Empty if you want to fill it yourself

Best practices - if you are doing a combine operation create it as an IDSet
Extracting object ids only - use an ID enumerator rather than a search cursors

Avoid the use of hybrid selection type if you the size is larger than the transition - default is 100. So if you know it will be less than go with snapshot but if you know it is more then use IDSet becuase to transition is two different queries.

Favor AddList over add since it is better to add the whole collection. If you know the list of ObjectIds then create an empty selection set and then calls addlist of the ids rather than doing a search with a “IN ” filter with a list of IDs

Read more »

.NET & Java SIG

I know I should be at the Java SIG but Dave is a smart cookie and I am trying to drink more .NET kool-aid.

Dave has written a hibernate like data binding layer for ArcObjects and it really sweet. He is talking about all the advantages to isolating the business layer from the ArcObjects layer. Anyone who has seen the value of using an object-relational tool should love this right away. He is demo-ing it working inside of Visual Studio.

Rather than querying the geodb for the Objects to build he is using an xsd transformed geodb schema export. It makes your business code cleaner and safer and isolates changes in the geodb from forcing a rewrite of business rewrite.

NEXT STEPS

Domain specific languages is really an xml schema and since it has a schema that is all you need to generate a geodatabase. Goodbye UML for geodb design - instead use the domain specific language. Awesome vision on this one - though I want to see it really happen - he claims it is theoretical. There is also some DSL stuff for Java as well so this could be a good cross-platform solution for ESRI if they can pull it off. Given the depth of XML and XSD expertise in house and their close partnership with Microsoft I think this might actually fly…

Art is talking now so I may skip over to the Java SIG just to hang with some of my homies…

All Done

JAVA SIG

I walked in to see some IBM guy giving a talk - ho hum

Question from the audience - about Server Object Extensions in Unix - Jay at a higher level.

Clarification on Java performance - there is a slight performance hit for in process (such as Engine) but there is no performance difference for out of process (Server).

Question about Portal compliance to the IBM dude - it is important to IBM and they have done it for a long time. He goes on and on about how they are using it and how it is important to their strategy going forward. I think I might go back to the .NET session for a while….

.NET SESSION

Damian talking … discussion about pricing … tension between large enterpise customers who expect it to cost more and smaller shops that think it is too much (like me). Someone talks about selling just web ADF separately.

The Gartner talk

This talk is great so far, funny, even handed, and interesting… I am writing in real time so there are frequent saves and updates.

Most major shops are using both Java and windows - they make sense in different scanerios

.NET is here to stay - win32 is dead and everybody needs to get on board with that reality

.NET 3.0 is effectivley the replacement for win32 - it is now closerto J2EE with J2SE - it is baked deep into Vista. MS has bet the business on this for the next 20 years

Predicts not many people developing on 3.0 for 18 months - needs Orcas and the server side infrastructure (Vista server aka longhorn). Start experimenting now. Which language to use - he says to use either one unless you are going into the hard core bit shifting which favors C#, though you can use COBOL. One of the nice parts of the CLR is it’s language agnostic. It more has to do with the developer profile and what you feel comfortable with - VB is favored for opportunistic while C# is systematic but they are gonna meld over time. He says that MS wants to split the Dev community to avoid competition in their product - VB for smaller projects and C# for larger high end projects - but don’t believe the hype.

MS vs Open Source - a lot of mixed messages - rank and file are ok with open source while management has problems - sounds like ESRI. On to mon - he says it works surprisingly great but the Int. Prop. issues are going prevent uptake.

JAVA now

A remarkable success story - all enterprise software vendors on the planet have an investment in Java. Problem with Java today is it takes too long to build and deploy and maintain an application. It comes from their openness with everyone trying to agree. I have thought this for a while - it is hard to get good design from committees but you get better buy in. He says small to moderate projects (6 developers over 6 months) .NET has about a 20% performance benefit in time to market and development time. I am not sure how much I agree with him about this but let’s go with it for the sake of discussion.

Ok - time for me to comment on him overall - he is definetly playing to the MS crowd and a bit more in the MS camp.It’s not completely over the top but it is pretty obvious that he is more comfortable in that area. I am sure the MS people in the audience will call me being overly sensitive but look at his wording. He is coming up to some things where he can turn that around but he just punted on that. Like doing Swing GUI - I sense he has no sense of Matisse in netbeans or RDP in eclipse. So I have switched into grain of salt mode…

I am now kinda tuning out since I think there is an axe to grind.

.NET is for smaller to mid size shops but Java owns the larger enterprise shops. He is seeing more and more within one app of people using Java and .NET together. If you go this route keep your non-prefered platform to less than 30% of your code coverage - and the 30% is usually specialized for reasons. He says measure it multiple ways and use a composite score.

here are the factors that differentiate:

(Java vs MS)

1. Vendor independence and cross platform vs exploit synergy of a single platform
2. Systematic development vs RAD development
3. Central and highly trained IT staff vs Decentralized business unit developers

Again here he misses some of the key technology for some points of Java. You can write stored procedures in Oracle using Java yet he did not mention that.

He sees Microsoft growing more into the future more than Java.

He says the trade-off is flexibility versus productivity (Java versus MS) - he caveats this with a 5 yr time frame for prediction.

Ok he just hit me over the head to see why Sun is adding Ruby and Python and Javascript to the JVM - it is trying to get things like the CLR for .NET where you have a wider choice of languages. Don’t ask me why I never saw that before but now I get it.

All done…

Enterprise Applications with the Geodatabase

This looks to be code heavy and for people who know geodb
Workspaces:
each connection creates an ArcSDE and DB<S process
ArcGIS maintains a workspace/connection pool to save resources.

Using application server - descreases client load but increases server load
Direct Connection - no service so you decrease server load by increasing load on client

You can connect using a propertySet or a connection file. The benefit to a connection file is that you don’t have to hard code your connection parameters into your source.

Personal ArcSDE geodatabases - code example showing how to create them on the fly and attach and detach.

SCHEMA CACHING
Schema caching - cached snapshot of the GDB schema tables
Requires that you have a static schema model but the benefit is improved performance by reducing roundtrips

IWorkspaceFactorySchemaCache is the interface where it all happens.

Use it when you have large and static data models or if the application opens and uses many classes (such as feature classes). These should opened at the start of the application and reference maintained throughout the lifetime of the application.

Enable schame cache before tables are opened - you can also enable at the factory level. After this all opens will be optomized.

Cache needs to be “fresh”
In in dynamic environemnt schema changes will not be available until refresh but there is an API to see if it is stale.

!!You must disable the cache before releasing the workspace object.

CURSORS
3 class of cursors- search for querying, update for positional update, and insert for bulk inserts

1 QueryDefCursor - not bound to a class are used for defined queries
GOOD FOR COMPLEX SCENARIOS

Recycling a cursor
every call to next row resuses the same memory chunk so it is quicker but can not be used when you need to keep a reference to a row on the call to nextRow. So don’t pass that reference around since the data inside changes with each call to nextRow. IF an set of rows is needed for a function cal then use non-recycling

QUERYING AND JOINING DATA

spatial caching - client side caching of feature values for a given spatial extent (MapCache in ArcMAP) - can speed up queries - ISpatialCacheManager2 - use it when you have many spatial queries within a common extent. Make sure to make you extent the complete area you are going to work within. This will also chew memory depending on how many featurea are in the area.
Need to have all feature classes open before filling the cache. You can ask the cache manager if it is filled).

At 9.2 query filter allows for group by or order by in the PostFixClause. Very nice.

SpatialFilter will use caches

VIEW, TABLE JOINS AND COMPLEX QUERIES
Persisted views. You can open views as tables (read only) using the opentable on workspace
can only have one spatial column supported data types in returned fields (no custom types).

On the fly joins
QuerDefs (IQueryDef) - must be in the same datasource, represented as a cursor, can’t be added to ArcMAP. Only grab the fields that you need to make this go faster and consume less memory

QueryTable(ITableQueryName)
Tables must be within same datasource, matches all candidates, uses QueryDef Object, can be used with non-spatial.
Create a new TableQueryName, set the queryDef and Primary Key, Cast to IDatasetName setting workspace and Name, open the name object as a table. Can also use the ST_Geomtery functions in the where clase for the queryDef.

RelQueryTables(IRelQueryTable)
Tables can in differentsources, mathches on first candidate on 1:M and one other caveat that I missed. Create a new in memory RelationshipClassFactory, add the tables,the fields, and join, open the RelQueryTable

EDITING AND TRANSACTIONS
Transaction models -
non-versioned which utilizes DB transaction, scope is controlled through startEditing and StopEditing calls

Versioned - long transactions
Read consistency and isolation per verison
transaction is defined by scope of the edit sessions
Changes are only viewable by the editor until the edit session is explicitly saved, but does have undo and redo. Transaction scope controlled through Start and StopOperation

Outside of an edit session (updating)
ITransaction interface can get access to all this fun stuffthere  is also ItransactionsOptions interface can be used to set AutoCommitInterval (default is 1000), 0 == no automatic commits. Careful with a bulk inserts since if you don’t commit you chew RDBMS resources. DBMS rules apply - DDL may commit DML - change the schema and you are going to force a commit

Non-versioned editing
StartMultiUserEditing turns off autocommit (set to 0) this is how you say I want to edit using version or non-versioned featureclassess. Editing errors need to be handled around API committing the transaction (abort the edit session or not).
!!BEST to abort if you get an error
Don’t mix use of Itransaction and IMultiUserWorkspaceEdit

versioned editing
Scope is StartEditOperation and StopEditOperation to allow for interaction between versioned and non-versioned operation. Same general notes as above. Things get a bit tricker when you are editing versioned and nonversioned data in the same session since undo means different things and you need to think carefully here.

!!Transactions are person “connection” not per Version. Since connections use the same DB connection a call to commit will commit all workspaces using that connection

Non-versioned edit session - you need to see the slide it is really helpful. Pay attention to the different operations that start and stop transactions.

Archives - add a new version called a historical version which is a read only version. Queries can go against the archive table which may be faster than querying default.  There is an IHistoricalWorkspace which can be queried by date

Difference cursors - a cursor of object difference between versions - IVersionTable.Differences returns a IDfferenceCursor. Works with Historical or transactional versions. The Difference type must be specified. Within a transaction you can ask for all the feautures that were modified.

DeleteNoChange difference case does not return an IROW object but instead returns the OID so you can go get the older version from IVersion2.getCommonAncestor. Historical versions do not support all difference - inserts, updates, and deletes - again DeleteNoChange does not return the IRow

EVENTS
IVersionEvents and IVersionEvents2 use for executing specific code blocks when events fire - reconcile, post, version redefine, archive  updates events

CODE INSTRUMENTATION AND TRACING
need it to time certain operations or check how efficient the application works with enterprise (database) - number of calls and the performance of individual operations.

symptons - repeated calls to the database, slow running operation

use - ArcSDE Client intercept and trace logs and DBMS Trace files
for custom application timers around an edit or data data fetching

USE SDETRACE and SDEINTERCEPT - intercept is probably better. Using it on the client - SEE the SLIDE.
If you have a spatial cache you should see no calls to SDE once you start querying.

This session was the hawesome! All the tips and trick  I would not have gotten from the doc. But are going to be invaluable when working on apps. And it also went from soup to nuts with schemas and versioning to how to trace to look for performance problems.

.NET Mobile ADF

Excellent intro with Jeff introducing the chair inspector application where team members are going around the room and collectitng information about people using the Mobile ADF.

Positioning
Server developer solution for mobile applications
Supports field workflows
data viewing
feature inspection
basic data collection

Direct synchronization with ArcGIS Server
Connected and disconnected environments
Windows Mobile Development
At 9.2 purely an SDK.

On to the Feautres:
Supports multiple connectivity scenarios
Full Support of geodatabase transaction model
Small footprint and high performance
Includes GPS components, Data Sync Components, Map Display and interrogation
???What is the Device Data Store - is SQL Server mobile being used - that could be really interesting for remote data entry hybrid applications. NOPE - IT IS A BUNCH OF BIN FILES.

Targeted .NET compact Framework 2.0
Windows Mobile 5.0 with focus on the SmartPhone
PocketPC 2003, 2003 SE, CE 5.0. and Windows XP

WORKFLOW
Build mobile geodb - information and transaction model considerations
Author Mobile Map - design for environment and form factor
Publish Map Server - with mobile data access capabilities
Design Mobile Application - for form factor and envir.
Deploy Mobile Solution - provision devices
Synchronize Mobile GIS Solution - consider bandwidth and battery

Even with a simple user interface there is still going to be a training need to use the application.
There are ways to pull all the data down when first provisioning the map but it is flexible and configurable as the developer.

General coding guidelines
Multiple threaded environment - use BeginInvoke to push arguments to UI
Dispose of object that implement IDisposable - wrap inside using block
Use try…catch blocks where appropriate
Employ defensive coding practices - such as being careful when casting and not causing a crash.
Menu vs. Tool Considerations.

Maps and the Map Cache
Map component draws data from the map cache (threaded drawing)
Map Cache stores map data on device
Map Cache synchronizes updates with Server
Map supports markup/graphics on Display
Map supports drawing of custom layers
Map Rotation supported

Data extraction - use MapCache Extractor to create Map Caches on your desktop. Use Request_Completed event to monitor synch requests - probably want to do this on antoher thread. Use the State and Notification Broker API and about how connected you are - let’s you poll about what kind of connection you have ActiveSync versus EDGE, and then choose to synch or not. This would be helpful for smart data synching when it would be less expensive.

VS2005 demo - drag and drop of controls in real time - The map cache points to a web service endpoint - you can also say where the data will be stored for the map cache

???How do you change the storage location once you deploy to the device?

GPS Components - Serial and File GPS - the file is for simulation/going through a set of file points. There is also a GPS Display which lets you show where you are are. There are a lot of great design time components to make things look pretty.

There is ADO.NET integration - spatial and attribute queries
The FeatureLayers and some other layer are actuall ADO.NET compliant so you interact with them like any other ADO.NET component.

Editing Features - edits can be performed regardless of connection status
Geometry edits - sketch map action and components for points, lines, and polygons with snapping for feauture layers.
Demo of editing - pretty darn sweet.
Here is one the tradeoffs as I see it:

Custom layers - provides a way to fure in custom data feeds into your map cache, such as weather layers or real time traffic feeds. They are showing the live traffic demo. Allows you to write you own live local or google local for the cell phone.
They are running out of time so things are going quick now

Future Direction:
Improve performance for large base maps
Improve editing - doesn’t work on smartphone or use GPS
Add a mapGraphicsLayer for redlining
Add Web Services security - token based to secure the pipe.

This has functionality similar to ArcPad but to get the value added you need a license for Server. But going that route also allows you to program in VB.NET or C# rather than the heinous world of VBScript or JScript for ArcPad. So if you can afford the Advanced server license I think this would great to have. I think I am going to try and talk to ArcPAD people and see what they have to say.

Overall a good talk with interesting example. Where or where are my EDN DVDs

.NET engine application development

They have written a lot of the base class information. Seems like this session is focusing on how to build engine pieces so they also work in ArcMap as well. They say these samples are in the SDK.

They have a hookHelper class to allow for the use of the command or tool between engine and desktop.

Use the hookHelper to get to objects you are interested in. For desktop a command hook object is a MxDocument but for Engine it would be a Toolbar. By using the hooking help this can be avoided.

HookHelp also has a IHookactions - to perform common actions on simple geomtries, flash, zoom, pan…

Palettes
They are the toolbar items that expand to a group of icons

Start by creating a menu
She adds some command and then a menu to her menu. then adds that menu to the toolbar control. Now she is going to do it on a pop-up (which I think is a pallete). This seems a bit more invovled.
Created a toolbar menu - added an item to it, declared it on the toolbar, and then popup the menu when the user right clicks.

Extensions: can share data between software components - really appropriate for larger systems.  State of command is controlled by the state of the extensions. Edit application as an exmaple. I don’t really get all that is going on

Now some about how to save out the state of the application.
There is a customizedialog class. You can add your toolbar control into customize mode. Take a customize dialog object and startDialog it to show up for the user to edit the toolbar that is in your engine application. To save changes…..You can save it out to a text file and then load it from a text file

Tips and tricks:
Mapcontrol and pagelayout control synchronization - there is stuff in the SDK. In engine mapcontrol and pagelayout control don’t know about each other.

There is another document for a workaround for controls displaying issues in 96 vs. 120 dpi. On a laptop that might have 120 DPI layout might get funky.

Quick demo of OpenGL

On to Singletons but passed on demos and it was going to show even more sharing data between other pieces of the code

But overall it was a good session - makes me understand that I need to spend some more time digging into the .NET

As a general note - these sessions are too long. I think 45 minutes would have been better.

« Previous PageNext Page »