Raba - Defend your code RSS 2.0
# Friday, April 10, 2009

Last month I've presented a simple newbie's tutorial about NTS - Net Topology Suite.
Here you can download the code sample & presentation.

What is it NTS (Net Topology Suite)?

  • implements geometry model defined in OpenGis Consortium (OGC)
  • implements  simple features inside the OpenGis Consortium (OGC) as Geographic Data access
  • implements Some great OGC writers as: GmlWriter (Geographic markup language), WktWriter (Well Known Text)

How do I know whether I need NTS:

  1. You are coding a GIS (Geographic Information Systems) applications
  2. You want to use a known Convention for Point, Polygon, Polyline etc.
  3. You want simple implementation for OGC

3 times No - you don't need this
3 times Yes - you must read this article and probably use it.

You can read more about Kml & C#3.0 - at my last post.
I will keep posting more samples in the near future.

Friday, April 10, 2009 10:15:45 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
.Net 3.5 | C#3.0 | GIS

This post inspired by Gal Ochana.

Gal is a new gifted programmer at my team, she presented a great presentation about Linq to XML - you can download code here.
The great bonus at her presentation was the Linq to Kml Sample, I would like to share this with you.

The kml itself is an XML file at our sample it looks like this:

   1: <?xml version="1.0" encoding="UTF-8"?>
   2: <kml xmlns="http://www.opengis.net/kml/2.2">
   3:     <Placemark>    
   4:         <name continent="America">America</name>    
   5:         <description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>    
   6:         <Point>      
   7:             <coordinates>-100.0822035425683,37.42228990140251,0</coordinates>    
   8:         </Point>  
   9:     </Placemark>
  10:     <Placemark>    
  11:         <name continent="Africa">Africa</name>    
  12:         <description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>    
  13:         <Point>      
  14:             <coordinates>20.0822035425683,20.42228990140251,0</coordinates>    
  15:         </Point>  
  16:     </Placemark>
  17:     <Placemark>    
  18:         <name continent="Asia">Asia</name>    
  19:         <description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>    
  20:         <Point>      
  21:             <coordinates>42.0822035425683,33.42228990140251,0</coordinates>    
  22:         </Point>  
  23:     </Placemark>
  24:     <Placemark>    
  25:         <name continent="Europe">Europe</name>    
  26:         <description>Europe</description>    
  27:         <Point>      
  28:             <coordinates>100.0822035425683,62.42228990140251,0</coordinates>    
  29:         </Point>  
  30:     </Placemark>
  31: </kml>


You can read more about Kml here.


Screen-shot of the above kml in the ArcGis-Explorer:

You can see in the above Kml file sample the continents represented as a simple points, of course you can extend it to include polygons, poly-lines or anything else that valid within KML standard.
The only things that differs Kml from the known Xml file is the namespace that we will need to handle in our code, let's see the query itself:

   1: XNamespace ns = "http://www.opengis.net/kml/2.2"; 
   2:  
   3: XDocument kmlDoc = XDocument.Load(InputKml);
   4:  
   5: var result = from placemark in kmlDoc.Descendants(ns + "Placemark")
   6:              where (placemark.Element(ns + "name")
   7:                              .Attribute("continent").Value == 
   8:                              Continents.SelectedItem.ToString())
   9:              select placemark;

 

line 1: declare the full namespace that will be used for the attributes and Tags
line 3: loading the kml input file
line 5-9: run a simple query to select a single continent, pay attention to the namespace that we concatenate for selecting the right node.

Here you can see a screen-shot with the result of the above query using the "Asia" continent as the selected item.

Enjoy.

Friday, April 10, 2009 10:03:14 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
.Net 3.5 | C#3.0 | LINQ | GIS | AGX
# Friday, December 19, 2008

For the last 3 months we suffer from many problems on our ArcGis-Servers.
The main problem is our architecture which planned on 4-cores (dual) + 12 GB RAM, but the main problem is that our server holds Win2003-32bit, which can handle only 4GB RAM.

This lack of 8GB causes us many page-faults. our SOC.exe causes our server to hold the server on 4 GB RAM permanently. (which means 100%)

 

Of course That we first need to extend our architecture to have more Spatial-Servers to deal the pressure but it will take time till buying and installing new servers, in the meanwhile we are trying to figure out creative ways to decrease the RAM Usages.


Yesterday Mody (from Systematics, ESRI's representative in Israel) sent me this link:

http://webhelp.esri.com/arcgisserver/9.3/dotNet/index.htm#tuning_services.htm (read the recycle section)

The article is talking about the 9.3 version (while we are using the 9.2 sp1) but it still help me understand something about how the people at Redland think.

 

Quote from the Recycle section: "Recycling destroys and re-creates all running instances of a service, whether or not those instances are above the minimum specified. To periodically return the number of running instances to the minimum specified, the service must be stopped and restarted."

It says that the recycle:

1) Will re-create all instances - which means that the "in use" number will be set to 0 - on every recycle.

2) It won't Change the number of "available instances" to the minimum (for example if we set minimum=4 and maximum=8, and before recycle the available=5, after recycle it will still be on 5)

 

Pros

  • ESRI's idea says that If your machine sometime had 5 users instead of the 4 you planned - so the machine needed to create the new instance. Such scenario can happen again, so They won't kill the instance at your recycle. and the next time you will need the 5th instance all the machine will have to do - is take it (without paying the creation time)

Cons

  • Machines that holds many types of Server-Objects and each of them will grow up above its minimum, it will cause the machine to work very slow, cause each instance take more memory, While the idea that the 5th user will return it more obvious that not all server-objects instances will be back to their high level usages.
    More instance -> Needed more CPU, even if they are not in use -> machine will work slower even with no less users.

 

My New Feature request:

I would like to have  recycle-preferences\options, For example: I would like to choose between two types of recycle:
The first type -  recycle and re-init the available instance to minimum.
The second type - recycle only. (like the one exist today)
Moreover, I would like to set more than one recycle item per server-object.
For Example:
I can set two recycle items: the first recycle will be twice a day and won't change the available instances(the second type), while the second type will be once a week, and will set the available instances to the minimum.

 

Enjoy.

Friday, December 19, 2008 12:08:42 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
GIS | ArcGis Server | Software Development
# Friday, May 30, 2008

I had the honor meeting Tom Brown, here in Israel. Systematics (the representative of Esri in Israel) bring him to three days. On Wednesday Tom gave a lecture about SDE- new features and Performance and on Thursday he had a one-on-one meetings. I hope Tom will publish his presentations so I could link it from here.

Here are some tips I've learned from those two days:

Register all your tables
You might register all your tables with ArcSDE using sdetable -o register (even the non-geo-layers), this will add a row to the GDB_OBJECTCLASSES. The main reason is optimizations, for each time the ArcObject api will try to access your tables\layers he won't need to search for it all over the tables-dictionary.

Do NOT overload feature datasetes just for managing it better. You probably ask why? This is because when editing and browsing the layer it will initialize all the classes underneath the dataset. use this only for Topology and Geometric Networks.

Profiling your SDE (enabling sdeintercept)

you can enable it as a client or maybe as the server, I'll probably use it in my ArcGIS Server, so  for me I need to install the SDE client libraries, after installing you will need to set the sdeintercept variable, you can put this line in a batch file and run it whenever you need it:

   1: set SDEINTERCEPT=crwtf 
   2: set SDEINTERCEPTLOC=D:\tmp\sde_server

Intercepting the operations to SDE will create a huge file so it will be a good practice to enable it for a specific operation, watch the file to understand what happen clear it and start over again for another operation. I didn't try this yet, but I will publish more on it whenever I found more time.

Move edits to base option (Versioning-workflow)
We all know the Versioned and the non-Versioned pros and cons, ESRI give us new option, now we can work like a versioned option, but still our data will be save and accessed as non-versioned (with one DEFAULT table of data). you will be able to query the main table using simple SQL and without the need for Compress it from time to time. this model called the Move edits to base option (aka: Hybrid model)

Geodatabase and Raster's archiving
At my project we handle a huge processes of loading large Rasters to the SDE, this operation can take some time but the main problem is that your database is archiving each bit to help it recover failures. Archiving operations cause the redo-log to grow and blow, which cause us to turn off archiving. Tom also showed a command for turning off the archiving. At Thursday he thought loud of another idea, that, maybe, in the next versions the loading of Rasters will be using direct write which will bypass the redo logs.

Spatial Types
Oh boy, this is a syntactic sugar, from the 9.2 versions (oracle) you can write such bunch of code

   1: SELECT sa.name "Sensitive Areas", hs.name "Hazardous Sites" 
   2: FROM   sensitive_areas sa, 
   3:        hazardous_sites hs 
   4: WHERE  
   5:        ST_Overlaps (sa.zone, ST_Buffer (hs.location,.01)) = 1;

 

   1: INSERT INTO hazardous_sites 
   2: VALUES (1, 102, 'W. H. Kleenare Chemical Repository', db2gse.ST_PointFromText('point (52 24)',1)

 

You can extend your reading here.

Two tips for the next versions:
TDDer prespective:
Testing spatial queries is hard but important, as you can see the query above there are many scenarios:

  • point inside an area
  • point outside the area
  • point on the area border

Here I would be more than happy to have a test table to see the results, and to give a better readability for the next programmer who would like to run my query.

Keep it simple:
As you can see the insert statement I need to know the next number for insertion it is also connected to another table in the database. I don't want my programmers to bother about this index, as I see this it can be solved by adding an automatic triggers while registering the layer as Geodatabase.

Friday, May 30, 2008 2:37:18 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
DataBase | GIS | SDE | TDD
# Saturday, May 17, 2008

This Where 2.0 video is a must, for all of you GIS users, managers and GIS-evangelists.
(you can also read and view it in those links:  at Chris Spagnuolo's post or at James Fee's post)

I've also recommend reading Dave's post (this post inspired by him) and I agreed with him about the GIS-buzz that will give benefits for everyone.

From now on, you can take your blog\home\web-site\news-reader geographic information and put it on a maps, I am not sure what is the benefit, but you can do this. Who is going to use it or watch it?!
Instead, try thinking about an already-exists-application that handle deliveries between warehouses and try to locate its trucks and warehouses on a map, such idea will probably have more users. It will be more complicated cause this objects don't have a GIS metadata and it is also not so easy to give them those details, for example: the DB is already created without X and Y parameters, there is no country\place indicator in the warehouse field. moreover, we want to have a geo-processing utility which retrieve the shortest-path between those warehouses (in Israel roads, which have their own Business Logic - such as: different spatial reference, new roads, traffic-jams etc.)
For such operation we will probably need a GIS expert to create all those services for the end-user mash-up. after everything will be ready, we could simply mash-it-up together.

The main problem that the experts (those who will create the services) are looking for something more accurate, while the mash-up users are looking for a simple Geo-Knowledgeless API.

For example, The Google API looks like this:

new GLatLng(34.019968,-118.289988);

It actually looks enough for most users and application, but for the GIS-experts it looks ridiculous.
For those who still didn't understand what I mean, it is the same like saying "I am just 10 xxx from you house" - so 10 what? is it meters, is it kilometers or maybe you are talking about minutes ...

Here is a better approach for a point(*).

    public class Point : Geometry, IPoint, IGeometry, ICloneable, IComparable, IComparable<IGeometry>, IEquatable<IGeometry>
    {
        public Point(ICoordinate coordinate);
        public Point(double x, double y);
        public Point(ICoordinateSequence coordinates, IGeometryFactory factory);
        public Point(double x, double y, double z);

        public override IGeometry Boundary { get; }
        public override Dimensions BoundaryDimension { get; }
        public override ICoordinate Coordinate { get; }
        public override ICoordinate[] Coordinates { get; }
        public ICoordinateSequence CoordinateSequence { get; }
        public override Dimensions Dimension { get; }
        public override string GeometryType { get; }
        public override bool IsEmpty { get; }
        public override bool IsSimple { get; }
        public override bool IsValid { get; }
        public override int NumPoints { get; }
        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }
    }

The default Lat,Long lack the coordinate system. We can see (in the second sample for point) the ICoordinate. you can also have Z parameter.
Pay attention to the Point Constructor with only (double x, double y) as parameter, this is pretty much the same as the GLatLng object. which probably use the WGS84 as its default.

I am not sure what Google are trying to achieve, if we are looking for the home (Internet) users - it will probably be enough, but still not sure how they are going to convert Ed50  data (such as: Israeli\Europe roads data) to WGS84 usage. for such operations I think they must add more options to their Geographic objects.

Simplicity note:
The thing I like the most is the simplicity in configuring a new point, which probably is a must for an humble-users. you should try this in your application\services. In such object (GLatLng)  the user should know nothing but the service must be more sophisticated.

(*) The Point class was taken from the SharpMap Api.

Saturday, May 17, 2008 5:11:43 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
GIS | Software Development
# Monday, March 03, 2008

There is a new (google) group for the ArcDeveloper.Net (or may we call it Alt-ESRI)
Help us to give you a better API.

Monday, March 03, 2008 9:39:07 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
.Net 3.5 | GIS | ArcGis Server | Software Development | WCF
# Monday, February 11, 2008

We are using the ArcGis Explorer as our 3d-Browser, and we would like to create a task.config file for each task. You can read more at my last post about Load config file dynamically (here).

Why this Architecture good for us?
Every one can install its explorer on his computer without any problem, we would like to add our own Task-Specific configurations for example: server-names to connect to, task-screen-size, links to web sites etc.
first, such details you cannot be save to the AGX-installation directory because it already installed. second, we would like to send them again and again every time the task will be updated and downloaded.

Any way, after reading this we still have two questions to answer:

1) how to get to the tasks directory
2) how to find our specific task

The answers for those questions are pretty simple:
1) To get to the task directory you should use this parameters:

   1:  Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\ESRI\ArcGIS Explorer\Tasks";

This answer will solve you the "how to found the tasks directory programmatically" but you'll still have to find the specific task directory that is interesting you.
Anyway, this is good but not good enough. I would like the E2 API to give me its Environment parameters and not to force me to code it by myself. It smell like something that can be change... and I'll be glad if the people at the ArcGis Explorer will create something like: public static class E2Environemnt which will implement such property. For now: we implement our own Environment extensions.

2) To Find the specific task you should dig the black box of E2 and you will find this cool factory:

   1:  ESRI.ArcGIS.E2API.E2TaskFactory factory = new ESRI.ArcGIS.E2API.E2TaskFactory();
   2:  string taskDirectoryName  = factory.GetTaskSubfolderNameFromAssemblyName(currentTask); 

So What's the catch I've asked? This is an internal implementation, ESRI don't like you if you'll use it... (you can read more about my question in the AGX forum). And I will ask just one simple question, why?! why not to make it internal or even private class. why we should read it at the XML comments?!

And here is my preferred solution (as Rob answered in the ArcGis Explorer forum), it make the job for me right now and it is the simple way to do it:

   1:  System.Reflection.Assembly.GetExecutingAssembly().Location;

Enjoy.

Monday, February 11, 2008 6:10:38 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
.Net 2.0 | GIS | AGX | Software Development

There are time you would like to load your configuration data from a specific config file or maybe even from the config file but not from the main one, I'll explain it using an example from the real world (last week refactoring).
We have many client which run the ArcGis Explorer (AGX) client (Geographic application like Google Earth), this client can be installed on each and every client, and it has its own configuration files. Within our team we write tasks that running on that AGX. while opening the application it will download to your profile directory the relevant DLL's for running those tasks. but hey those DLL's will be in a separate directory, neither in the GAC nor in the AGX executable directory. You can find many examples for such scenarios.


Here you can see the two different directories: one for the E2.exe and its config file, and the specific task DLL's and its config file (Sample.dll.config)

All we wanted to make is a Task specific configuration. so we would like it to work on every other task we will create.
First you might know this bunch of code, this will help you load the Sample.dll.config file from the wanted directory (The Task directory).

   1:  // Get the application configuration file path.
   2:  string exeFilePath = @"C:\ShaniData\Projects2008\ConfigHandlerDemo\Sample.dll.config"; 
   3:   
   4:  // Map to the application configuration file.
   5:  ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
   6:  configFile.ExeConfigFilename = exeFilePath;
   7:  System.Configuration.Configuration config =
   8:  ConfigurationManager.OpenMappedExeConfiguration(configFile,
   9:  ConfigurationUserLevel.None);
  10:              
  11:  ConfigurationSection sec = config.GetSection("MailManagerConfiguration");

In this situation we should use the .Net default ConfigurationSection implementations (for example: the ApplicationSettingsSection). Those of you who think of using the DictionarySectionHandler or NameValueSectionHandler will found it returning the DefaultSection instead.

Pay also attention that your code is running from the AGX installation directory so if you'll write your own section it won't work unless it was installed on the given computer (in GAC or in the AGX installation directory).

Monday, February 11, 2008 3:38:38 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
.Net 2.0 | GIS | AGX
# Friday, December 21, 2007

The new version of AGX is out, you can found more details in here.

Here are some things I found out:

  • My old tasks works
  • Tab index (inside the tasks) is finally working properly
  • The streaming looks slow - even very slow I'm not sure if this is because of my networks problems or because of ESRI's servers but it was better with the previous version
  • Better handling the outer links (having a bug while opening a site it also opens: "about:blank" empty window near it)
  • More cool icons for instead of the simple pushpins

Still (really) missing

  • Scale bar (on the bottom of the page, or even in task)
  • Simple "Add connection" to Google Maps (servers) & Virtual Earth (servers)
  • SDK for 2008 (The given one fits to 2005 only)

Here is a simple result I make using the new popup window:

Enjoy.

Friday, December 21, 2007 1:42:07 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
GIS | AGX
# Saturday, November 24, 2007

Esri published the last service pack for 9.2 versions. as far as I know the next publish will be the 9.3, at the beginning of 2008.
I've found out that most of the people are either afraid of the service packs or just installing them without reading.
So, take a break, drink your coffee and start here: The full story behind the Service Packs
But for those of you that are too lazy to read, maybe this short interesting_features_for_my_team can also help you.

At my team we use the ArcGis Server, with two types of clients: ArcGis Explorer and Web Application(WebADF.net) and we are also have a little use of the Editor products. So if your team is like mine you can use this partially-feature-list, anyway my team-mates can probably found this post useful.

SP4 changes:

  • NIM007093 - Hebrew strings are not in Right-to-Left reading order when typing Hebrew characters in attribute table under editing mode for Hebrew locale.
  • NIM011253 - ArcGlobe: If you rename a layer based on an ArcGis Server globe service, your change isn't always persisted, and the original default layer name returns. For example, when you open an ArcGlobe globe document from the ArcGis Online Web site, the layer names are the full service names, not the more user-friendly layer names used when the documents were published.
  • NIM011449 - A problem was discovered with network dataset route and service area solutions after an upgrade of spatial reference to 9.2 high precision. Particular route solutions derived in the high precision ArcSDE geodatabase network dataset if the accepted tolerance and xy domain that were chosen were different after a network rebuild then the results in the low precision feature dataset.
  • NIM011532 - The IFeatureEdit and IFeatureEdit2 methods do not produce correct results when editing in projected space.
  • NIM011551 - Under some circumstances the RecordSet class isn’t correctly propagating the errors raised by calling ICursor::NextRow on the wrapped table. This can cause client code to mistakenly assume operations have been performed successfully (such as serializing the RecordSet to XML).
  • SP 3 changes:

  • NIM007055 - Enhance the OverviewMap control to have a static image mode so that the OverviewMap image is not requesting a new image on each extent or scale change.
  • NIM012292 - Memory leak in ArcSOC.exe process when doing many Identify requests over time.
  • NIM009324 - The Geometry1.Distance(Geometry2) method throws out exception when geometry1 or geometry2 is a polyline or a polygon.
  • SP 2 changes:

  • NIM006387 - Unable to update the scale bar image in a callback.
  • NIM006657 - Zooming in to a very large scale will eventually fail the zoom out map action.
  • NIM007046 - Add support for rotated map resources to the Web ADF.
  • NIM004867 - The Web ADF Map control does not work within .NET Web parts.
  •  

    Two more errors I am expiriencing and not sure about their state:

  • There are times that the ArcGis Server manager application show the well-known "we are sorry ..." . and no one knows what to do, but refreshing it again and again.
  • The ArcGis Server produce 404.3 error code because its cache files have no extenssion and it cannot access them from the ArcGis Explorer (which: 1) slowing down the requests. 2) cause a lot of errors on server).
  • Have a great coding, Till the next release...

    Saturday, November 24, 2007 11:03:43 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
    GIS | ArcGis Server
    # Wednesday, August 15, 2007

    Hello to my new visitors from ArcExperts.net.

    A little background about me you can read here.
    I am Blogging about .Net(2.0, 3.0), Team Foundation server, Agile, Scrum and all this stuff spiced up by the ESRI's applications (ArcGis Server, ArcGis Explorer etc.)

    Thanks to Dave Bouwman for letting me publish my thought to the ArcExperts.net community.

    Wednesday, August 15, 2007 11:38:48 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
    GIS | My Site
    # Friday, July 13, 2007

    This Survey sums up everything.

    • ESRI == Microsoft, which is a big success and I am pretty sure that this is a good direction.
    • Blogs ain't the main issue at the ESRI products,

    I think that ESRI are still thinking in a GIS manner so there are more blogs for GIS users, than blogs for GIS developers.
    I think that blogs\forums\web casts\GIS casts are better way to sell you API and of course better way to help you fix it.

    Enjoy.

    Friday, July 13, 2007 9:27:05 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
    GIS | Life | Software Development

    I think that ESRI made a huge jump in the last 3 years from the ArcIms Server (and the weird AXLs files) toward using almost the same API above the MXD files and Arc-Objects architecture.
    Don't get me wrong they still have a lot to do, but hey they are doing it in the right direction.

    I wanna show something that never happened before:
    Next version (9.3) in brief
    Microsoft API & ESRI GIS
    More on the next version
    and here is the real article about the next releases.

    Some Highlight for the 9.3:

    • Windows vista capabilities
    • Working with Microsoft about adding virtual earth controls to the API.
    • When? a the first quarter of 2008! (good to know)

    Something still missing:

    • Readability and Usability testing the Arc-Objects API.
    • WPF support, I've read about OpenGL API... in the next releases.
         

    ESRI letting us know about the next releases, they still don't let us know everything but it is a something we should use.
    Moreover, they even made a good direction while working with Microsoft.

     

    Friday, July 13, 2007 9:19:30 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
    .Net 2.0 | GIS | Software Development
    # Saturday, May 26, 2007

    I've finally found some time to explore the nmf format and the AGX capabilities a little bit more than I used to read at the ESRI site.

    In my office we made the first installation on production of the AGX in Israel and I'm pretty sure we are the first in the world.
    One of the problems with being first - is the lack of knowledge and documentation, moreover this product (AGX 350) has many bugs.

    despite all those cons I am very happy with this decision, as I wrote in my last post.

    Today I will light your eyes with two properties I found, Visible & HideFromContents
    Visible - is pretty straight forward, true - will show the layer on screen, the false - will hide it from your screen.
    HideFromContents - is also straight forward but I didn't know it exist till today, this will decide whether your layer will be in the Table of Contents (TOC) or not.

    I played a little bit for you - I hope those screen shots will help you to remember this post.

     
    {Visible=true,HideFromContents=false} the layer(Bountiful_images) can be seen and can be managed by the TOC on the left.


    {Visible=true,HideFromContents=true} the layer(Bountiful_images) can be seen but can't be managed by the TOC on the left (magic-layer).


    {Visible=false,HideFromContents=true} there is a different layer on the screen than the layers above moreover you can't manage it using the TOC.

    Pay attention that in the last (Visible = false, HideFromContent=true) you cannot see the layer at all, but you can find it in tools -> manage layers .
    The problem is that you will never see this layer :). bug or feature, you decision.

    Business logic as a bonus:
    One of the customers came to me and told me they want to see a specific layer but stop users from managing (showing\hide) it.
    To me it sounds stupid, but hey this is the customer decision, and it won't cost me a thing.

    Saturday, May 26, 2007 1:22:19 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
    GIS | AGX
    # Wednesday, May 23, 2007

    Last week we launch our new products, after three months of intensive develop, we finished and gave our evaluation version to our customers.

    Our product based on the ArcGis Server 9.2 of ESRI, based on dotnet Framework and using WCF Capabilities for performing intranet Service Oriented Architecture.
    I should admit that this buzz-words works, I am not sure why and I can't tell how simple is to implement it, but every manager\team-leader\programmer that heard it has a stupid smile on his face, "Hhaaaaaaa so we can use it too?" yep, this was our intention, write it once, use it everywhere.

    One more thing on my mind, our complicated server architecture include lots of business-geographic logic, but it worth nothing, cause managers cannot estimate the time you spent on writing your inner algorithm.
    Here are some example:

    • We published a coordinate transformer service for everyone usage
    • We implement a logic for retrieving\querying maps from our server (imagine a clothing-catalog now transform your thoughts to maps-catalog)
    • We can also export Rasters from our DB to every customer
    • And we have more other server side stuff that we spent a lot of time on it, but the real people to worth it will probably be the other programmers\team-leaders on the near by office.

    Lets take a typical manager\customer, try to explain him all this stuff,
    It will sound like this:
    Me: We implement a great server side logic, every one in our company could use this it will save the other teams days/months/years.
    Customer(thinking): he spending my time and money on other teams\projects?!
    Customer(saying): what can I see from it right now?
    Manager(saying): Yes, show him something, give him to play with this new baby.
    Me: Hmm, no. see, now you can't do a thing but in the near future ...
    Customer(hearing): bla bla bla... [feeling angry]
    Manager(thinking): How do I hired this stupid

    This reactions can vary from one to another, but at the end point, customer can only understand things we sees.
    Don't try to sell them server side capabilities, and it is a cool feature that everyone can use it, but you should know what every one need and want to get and you should give it to him.

    Here are my tips:

    1. Programmers & Team-leaders - we always wanted to do a generic things, cool things and other stuff, so we could smile on our way home, (for example: code WPF on GIS Engines using the DLinq underneath all this while writing coast-to-coast unit test using our new mock object with those cool new TFS features for nightly build&running those tests) - do not give up on those features, it will make you happy after all, but use them wisely.
    2. Customers - they have a business logic to catch, we should understand their needs and give them something to play with, not just Doom/Fifa like to play with , we should listen, ask interact and understand what will make them smile when this product will ship.
    3. Managers - wants their customers happy and they also want something to play with, something to show their managers and other partners\customers to bring more money, listen them too, try to understand what can help them bring more money.
    4. Probably if you will listen carefully you could find a good point at the middle when both the customers & managers would be happy, now start thinking what can help you perform those dreams come through,

    How do we did this?
    I should admit that we do it unintentionally, but it works just great, We used the new
    AGX(350 build), it gives us a great UI almost for free, why I am saying unintentionally? because while sitting with the customers (long time ago) we talked about UI and Google-Earth-like, This tool is a beta but probably the worth beta in the world, why? because the customers want it, because it makes the customer-friends happy and when the smile we can blow his chest up and smile every time he plays with it.
    about the managers? they can do this too, their customers happy, the project in time, you also gave a great buzz-word the always like to say.
    For my team? you should ask them, but for me, I am happy because they are, we use the best technology in the world and keep doing cool things. so why not.
    This simple customer-driven technic (you can also call it Agile :) gave our team a lot of time\space to implement our server side code\architecture for further usage of other teams.

    One more tip (including example):
    For each module you write\design on the server try to give something cool that every one can see. (think about a customer-driven name for this module)
    Think about the SOA-team that is doing the hard work which no one can appreciate. Show the managers something, do it simple, with minimum time, just do it COOL, well-designed. try it to get to their business-logic.
    For example:  If they need to travel around the world and you create a great logic of minimal distance (shortest path), implement it on a simple map, you would probably do this for your own experiments so just publish it so every one could see this.

    Enjoy, Relax, Freedom.

    Wednesday, May 23, 2007 12:31:20 PM (GMT Daylight Time, UTC+01:00)  #    Comments [2] - Trackback
    .Net 2.0 | GIS | Life | WinFX
    # Saturday, March 10, 2007

    in sysinternals you can find many tools,
    this tool: Process Explorer is one that I found useful for my last week.

    I am using ESRI product called: ArcGIS Server, which is an of the shelf product with huge API and large architecture, I made some calls from the client to the server, their Map control show an Image from file system, somehow the file is locked: cannot be deleted, cannot be changed., my bigger problem that other users which using the same control and trying to watch the map cannot enter it. I wanted to find which one of the processes locked my image.
    Process explorer come to the rescue: you can find more details about its feature here.

    Do not afraid of debugging the unknown.

    Saturday, March 10, 2007 1:22:19 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] - Trackback
    GIS | ArcGis Server
    # Tuesday, February 13, 2007

    I am gonna present tomorrow to the managers about the geographical approach in my department.
    I just finished creating scenarios to those products:

    • ESRI ArcGIS Explorer
    • MS Virtual Earth 3d
    • Google Earth

    After more than 3 years developing GIS applications, I must admit that we have today good/solid SDKs, for a simple and further usage.

     

    I would like to give some scenarios to the non-trivial GIS applications:

    supermarket products:

    • can be mapped to a Geo-DB, and easily find in space.
    • think about customer who searches a product using Geo-DB application pressing the product name, and the screen will show him the best way to get there.

    Library mapping:

    • Think about mapping your library using a geographic engine, each book can easily find in space.

    Hospitals:

    • we can find behaviors of diseases in different places in the world/country/city.
    • such task wouldn't so trivial before, but today it is in a daily basic.

     

    My Tip:

    • Think about your applications today, you can easily move them one step further and give them a better UI.
    • Tomorrow you could easily earn the added value, from (Data)mining the geographic behaviors.


    Wish me luck...

    Tuesday, February 13, 2007 11:25:05 PM (GMT Standard Time, UTC+00:00)  #    Comments [3] - Trackback
    GIS | Software Development
    # Tuesday, December 19, 2006

    ESRI Just released the 9.2 version, which holds pretty much cool features, but still has a lot of stuff to work on till the next release.

    IMHO, ESRI should work much more like MS when planning the next release (talk to their clients),
    One way to do this is to free the beta on the net to whom it may concern, and open more official blogs and forums to the crowd, so we will help doing better product together.
    I think that it will help them learning more new stuff\old habits.

    This are my highlights, (I am still learning the 9.2 so I'll keep updating this list):

    1. Performance - They have today better performance than ever (I have a doubtful honor to write code using the map-objects and the ArcIms products, which were both terribly bad products {3.1 Version})
      But still, a lot to improve: build pyramids and calculate statistics still take hours even on good machines and therefore we cannot use this regularly on real time.
      The "simple" AGX, which should be used on each client, need better machine which not all of our clients can afford, and not to talk about the bandwidth.
    2. Prices - I honestly think that it is not reasonable to pay per CPU, I hope that there would more competitors (Google, Microsoft) so the price for the next version will be lower.
    3. Better Design - the code examples and the design patterns (no DP at all) are everything we learn not to do at school.
      Please take some lessons in usability (at MS School) because it is hardly to read and not intuitive.
      Not to mention the code in the Web Controls which always placed in the wrong method at the control life-cycle,(for example: load data in pre-render, Ajax stuff mixing inside simple renders)(I saw this in the beta, I didn't check it in the release, yet).
    4. WPF - It is about time that finally ESRI will work with MS step by step, I should ask why won't we use the Xaml for this version (which released almost at the same time as the FW3.0).
      ESRI should take care that the next version should be FW3.0 certified, using the Xaml.
      Not to mention the Orcas Enabled.

    Please add your suggestion, hopefully to find someone in ESRI to listen to my requests.

    Tuesday, December 19, 2006 12:06:30 AM (GMT Standard Time, UTC+00:00)  #    Comments [3] - Trackback
    GIS
    # Saturday, April 29, 2006

    I've wrote a huge article about my last two months at work, this article should be the GIS bible for beginners, but when I submit the article, it redirected me to an access denied page, cannot track my post and cannot go back to find my article.

    don't worry I'll write this again, but probably in small chunks.

    Saturday, April 29, 2006 12:26:58 PM (GMT Daylight Time, UTC+01:00)  #    Comments [4] - Trackback
    GIS | My Site
    # Thursday, February 09, 2006

    Last week Avi (my team leader) and I were in a meeting with Systematics the representatives of ESRI in Israel.
    We ought to ask some questions about the GIS Server, and I will bring here some of the answers we've got:

    1. The GIS Server 9.1 won't work with the SDE 8.3
    2. The ADF(Application Development Framework) for .Net will help us to develop GIS applications more productively (using my favorite drag&drop action).
    3. While the ADF is very useful it is also very simple, most of the wanted features you would have to program by yourself, such as saving the maps history, calculate the distance between two (or more) points which are not in the same extent. (those two examples were implemented in our systems today and won't be provided in the ADF Controls functionality)
    4. The ADF.Net won't work with the .NET2.0, we should wait for the next release.
    5. The GIS Server based on the ArcObject model, which give you more functionality (the same as we have in the client) such as editing.
      No more activeXConnector problems.
    6. The performance in the GIS Server is not better than the ArcIms, which are both very slow (you can see it in the examples below)

    Here are some demonstrations of the products:

    • An example of caching your maps,
      I loved the idea of using the cached maps (My Maps) on the right.
    • Simple example of tool tips on map (this one is damn slow, while we have only 4 layers).

       Those two still suffer from the known issues of bad performance, 
       even when they are only small projects.

    Thursday, February 09, 2006 4:47:04 PM (GMT Standard Time, UTC+00:00)  #    Comments [2] - Trackback
    .Net | GIS
    # Monday, January 16, 2006

    In my daily work I am writing a GIS (geographic information system) application.
    At my place we work for almost three years with ESRI product, which for a long time lead the market by far, although its critical disadvantages such as: performance problems, poor documentation and expensive price.
    but, with no real competitors at sight we could do nothing but pay the greens.

    I made some background checking about new GIS Tools mainly because of the performance problems but also because of the unsupervised growing prices.

    First I found this great Wikipedia link, which show us all the progress in the GIS domain,
    and summarize the known GIS tools. 

    I would like to point on my favorite tools:
    1) GRASS GIS - free tool for develop your own application, open source, run on MS-Windows, Unix and Mac Os, try this at home.

    2) Map Cruzin - enter this site and see what you can do with this one,  couldn't find the API link but friend of mine tell me great stories about writing simple code and this is running extremely fast.

    3) GeoTools - this one is my favorite, it has all the features you can only dream about.

    I'll keep testing those three deeply throw this year, hope to find the best replacement for ESRI.
    I would like to hear another point of view from you, thanks.

    Monday, January 16, 2006 10:33:11 PM (GMT Standard Time, UTC+00:00)  #    Comments [1] - Trackback
    GIS
    Archive
    <March 2010>
    SunMonTueWedThuFriSat
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910
    Disclaimer

    Disclaimer
    The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

    © Copyright 2010
    Shani Raba
    Sign In
    Statistics
    Total Posts: 134
    This Year: 1
    This Month: 0
    This Week: 0
    Comments: 97
    Cool Stuff
    Add to Technorati Favorites
    Themes
    Pick a theme:
    All Content © 2010, Shani Raba
    DasBlog theme 'Business' created by Christoph De Baene (delarou)