[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [udig-devel] Multiple FeatureTypes in a Layer | 
First of all I would encourage you to update to 1.1.1 - it is actually 
stable and much better then the long string of release candidates :-)
Joe Dente wrote:
These layers created using the MemoryDataStore perform very poorly.
They generally have a simple Geometry (LineString, Polygon, or Point)
and are occasionally heavily styled (2 to 8 symbolizers per Feature).
We have several sporadic render issues that only happen when we have
several MemoryDataStore layers active (problems normally start happening
when we have 10 or more MemoryDataStore layers).  It doesn't seem to
matter how many Features are in a layer.  We can have hundreds of point
Features in a single layer and have better performance than if we had 10
point features in 10 layers.
  
That is the background I need :-)  To start out with we *really* should 
get you started on making
your own MemoryDataStore that is tuned for rendering. Please understand 
that the MemoryDataStore
was actually done as "documentation" by me for DataStore developers. As 
such I went to great trouble
to make it behave exactly like a remote database or remote WFS. As such 
it actually copies the data out
of an internal TreeMap; copying one feature at a time; and doing a "deep 
copy" of all the geometry
data.  Why do this? Well I wanted to be sure that if someone modified 
the data they got out of the
datastore it would behave exactly like the content was off site ...
Also note it is using a TreeMap (sorted by FeatureId) rather than 
something nice for rendering like
a spatial index.
Do I encourage you to make your own MemoryDataStore (and of course would 
love if you shared
it with the community because then I will not have to make one).
However ... the split you are seeing between more features in a layer 
and more layers is very real. Each layer
has its own renderer and its own raster that it is rendering into; and 
the more rasters you have like this the
longer the "composition" step as the rasters are combined in the current 
z-order into a final image.
The first issue we regularly see is a Z-Order render issue; the Z-Order
will be correct on the data model, but incorrect when it's rendered.
This failure is sporadic and it's more likely to occur if you have more
MemoryDataStore layers active.
  
That does not make too much sense to me .. each layer has its own raster 
and they are combined together
using a simple for loop. Perhaps Emily can shed some light on this?
So while I believe you; the problem does not match my understanding of 
the code. :-(
The second issue occurs when we write to the FeatureStore to edit our
Features.  We have a widget that can adjust the geospatial data of
Featuers (adjust the location of points that make up a polygon, etc).
If several MemoryDataStore layers are active, rendering issues start
occurring where the data model and the content of the FeatureStore will
be correct, but the rendering will be incorrect (for example, the
FeatureStore will have a polygon of 3 points, but a polygon of 4 points
will be rendered).  When this happens triggering an extra refresh after
the canvas finishes rendering will normally cleanup any rendering
artifacts.
  
This is a case of those memory datastores offering transaction 
independence; I cannot remember if these
issues were sorted out by RC14 or not. There was a bug where the 
rendering was not using the Transaction
(and thus seeing different data) then what was being edited (on a 
transaction).
Both of the above issues are extremely distracting and both seem to be
directly related to the number of MemoryDataStore layers we are trying
to render.
  
I suspect that the issues are actually in uDig - and were the kind of 
issues being ironed out as uDig 1.1.0 was
put together.
I appreciate any advice you can offer and thanks for taking the time to
read this post.
  
Not a problem Joe; thanks for providing enough detail.I am hoping one of 
the other developers here
recognizes something in your description. I currently do not work on the 
stable branch of uDig and am
unlikely to help on a casual basis. There are however several active 
developers on the stable branch; the
next step may be to set up a test case so others can see the problem.
I assume that this is the kind of annoying timing based issue that does 
not appear if you are stepping through
with a debugger?
Jody
Thanks,
Joe
-----Original Message-----
From: udig-devel-bounces@xxxxxxxxxxxxxxxxxxxxx
[mailto:udig-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf Of Jody
Garnett
Sent: Wednesday, December 17, 2008 5:07 PM
To: User-friendly Desktop Internet GIS
Subject: Re: [udig-devel] Multiple FeatureTypes in a Layer
Hi Joe
There are two steps to rendering that kind of occur at right angles to 
each other ....
1. Portrayal: Content is pulled from the GeoResource (or several!) and 
rendered onto a raster ..
2. Composition: the rasters for each layer are merged up into a single 
image that is displayed
A few renderers (like WMS) actually portray several "layers" of 
information onto a single raster; the feature based renderers currently 
do not do this ... but you could experiment with that if you think it 
will make a difference.
I would like to make sure you think this will make a difference; you say
that your performance issues seem to be realted to the number of layers 
rather than the number of features. Can you give me an idea where your 
features come from? The system groups the renders according to what they
are up to ... you often only want two disk based renders going at once 
(or your hard drive disk will "thrash" as it goes back and forth on the 
disk between files). For external data sources like databases and web 
feature servers we are not as concerned.
The code that controls how many layers a renderer wants to handle is the
RenderMetricsFactory and RenderMetrics. The fact that a layer has many 
IGeoResources available to it is more to cover the case where the same 
information is available form several services and you may want to have 
failover; or the different services may offer different abilities for 
the same data. An easy example is information published by geoserver is 
available as a WMS and a WFS. You can display the WMS; but do features 
selection using the WFS. For more details see the section on rendering 
in the developers guide.
Emily has also looked into performance issues on trunk and has a "tiled"
rendering system that you may be interested in; the idea is to save what
has been rendered for a little bit so you can pan around the screen 
smoothly.
If you are working with remote WMS services trunk also has support for 
WMS-C (as implemented by GeoWebCache and TileServer). The same 
functionality (ie caching tiles) should be available on the client side 
using udig if we can make a user interface allowing people to define 
their "tilesets". I *think* LISASoft just got some work in this area so 
we may see some progress on this soon.
I will also point out you can make a custom renderer to render several 
layers of your choosing - you do not need to stick to the ones provided 
out of the box.
So if you can provide more information about what you are up to; the 
size of data you are using and so on we can give better advise.
For the general problem of rendering features their are a couple of 
obvious directions:
- set the min / max scale for the layer ... only show the feature 
content when you are "close enough" for it to matter .... this is very 
popular and has enabled a few projects I have worked on to be 
successful. (this works and you can use it)
- feature decimation (ie simplification) and storing the result in a 
cache ... would enable you to work with features quickly when zoomed out
(Nobody is working on this now)
- feature cache ... if the dataset is small enough you can cache it in 
memory (there are two caches available QuadTree and SRTree). I think 
emily is looking at this now on the geotools-devel list - when she gets 
closer you should volunteer to help her test)
- storing the result of rendering .. this is the "tiled renderer" 
approach that Emily just made available on trunk in October.
Finally I am sure you are aware their are developers around that can 
help you; I mentioned Emily a couple of times; Jesse wrote the rendering
system and can probably be hired, and I am training a couple of 
developers at LISAsoft that can be available in the new year.
Aside: Did you get your PointSymbolizer displacement stuff sorted out? I
am considering adding all the set methods back into the style objects...
Jody
Joe Dente wrote:
  
Hi,
Is there a way to put multiple FeatureTypes in the same layer in UDig?
    
  
We've been trying to cut back on the number of layers we produce in 
UDig when putting Features on maps, as we have performance issues that
    
  
seem to be related to the number of layers we have rather than the 
number of features. After digging around in the code and google for 
some time I do not believe this is possible, but I wanted to be sure. 
The way I understand things, each IGeoResource can only have a single 
FeatureType and FeatureSource. LayerImpl, contains a list of 
IGeoResources, which would lead me to believe that you can put 
multiple IGeoResources and therefore multiple FeatureTypes into a 
single layer. However, almost all the code in LayerImpl I see simply 
uses the first IGeoResource found in the list (getBounds(), 
getCrsInternal(), and getSchema() to name a few). Also, the 
LayerFactoryImpl does not contain any methods for creating layers with
    
  
multiple IGeoResources. Why then does the LayerImpl contain a list of 
IGeoResources rather than just a single IGeoResource member variable?
Thanks,
Joe
    
------------------------------------------------------------------------
  
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel
  
    
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel