Hey Mark,
Very interesting... The CoordinateRounder did the trick. Rounding to
the nearest 0.0001 meters (transformer parameters = 4) was sufficient
to make the SpatialRelator work with a "TOUCHES" test.

Thanks for all the help!
Thom

(I was going to send along a sample workspace that shows the problem
and solution, but it is probably not needed at this point.)


--- In [email protected], "mark2atsafe" <[EMAIL PROTECTED]> wrote:
>
> Hi Thom,
> I'm sure this isn't a limitation; the SpatialRelator should handle
> points and lines easily enough. However, it is incredibly complex - or
> so it seems to me - plus there may be other factors at work. Possible
> issues are...
> 
> 1) Precision problem.
> Route the points and lines into the Visualizer. Ensure the precision
> display is set to its fullest (view > options > display full
> precision) and compare the points to the line end points. 
> If there are differences this is where the problem lies. 
> 
> Why would this happen? Well there are issues caused by a limit on
> precision (ie it isn't infinite) and by FME converting from integer to
> floating point and vice versa. If it doesn't make much sense don't
> worry - a lot of it goes way over my head too. Simply add a
> CoordinateRounder to your workspace and it would usually fix the issue.
> 
> 2) Predicate problem.
> Do you know what a Dimensionally Extended 9 Intersection Matrix is? Me
> neither. But if you look up the SpatialFilterFactory in the FME
> Functions, Factories and Transformers manual (part of FME help) then
> it may help to explain. 
> 
> To test a point on a line you would be testing the point INTERIOR
> against the line EXTERIOR. That means the upper right square in the
> matrix needs to be true to get a match. The CROSSES predicate has this
> test, but also requires the top left square to be true, which probably
> doesn't work for you.
> 
> Basically you need to check what you are exactly testing, and if no
> default predicate uses those tests you can create your own.
> This would also help to explain why the predicates work using an area
> feature as the candidate.
> 
> 
> If neither of these help, or you just think that something is going
> plain wrong, then feel free to send the workspace, with a small sample
> of data that demonstrates the problem, to [EMAIL PROTECTED]
> 
> Oh - and don't read this email more than twice, or you'll get a fairly
> severe headache just thinking about it all. The help docs have pretty
> diagrams that explain the predicate matrix much better!
> 
> Mark
> 
> 
> --- In [email protected], "Thom DeCarlo" <t.r.decarlo@> wrote:
> >
> > Ok, I think I've got it. The problem I was having with the
> > SpatialRelator transformer was that it does not seem to be able to
> > compare points to lines. 
> > 
> > To solve the problem I applied the Bufferer transformer to my lines
> > and used the generated areas as the candidate features in my
> > SpatialRelator. I also changed the test parameter to WITHIN (i.e., "Is
> > the BASE within S ground units of the CANDIDATE line segment?"). By
> > this method I was able to create the relationships that I expected.
> > 
> > Is this a known limitation of the SpatialRelator?
> > 
> > Thom
> > 
> > --- In [email protected], "Thom DeCarlo" <t.r.decarlo@> wrote:
> > >
> > > I'm real close now, but I can't seem to make the SpatialRelator work
> > > properly. I'm using the input line segments to generate the 2D
points
> > > via the CoordinateFetcher and 2DPointReplacer. I eliminate duplicate
> > > nodes with the Matcher and then use the remaining points as the Base
> > > for the SpatialRelator and the original lines as the Candidates.
But,
> > > regardless of which test I perform (touches, contains, intersects,
> > > etc) I always get 0 related candidates. Am I using this thing
> > > incorrectly? (I can provide the data and workspace if that would
> help.)
> > > 
> > > Thanks!
> > > Thom
> > > 
> > > --- In [email protected], "mark2atsafe" <mark.ireland@> wrote:
> > > >
> > > > That's exactly what I wrote in the update request: "the geometry
> > > > already matches the required network, and all overlaps are
genuine"
> > > > 
> > > > To create end nodes you can either use the Chopper or - a better
> > > > solution I think - grab the coords with the CoordinateFetcher and
> > > > write them with the 2DPointReplacer.
> > > > 
> > > > I'll let you know the response to the update request. Obviously
> if you
> > > > can come up with a compelling business case there is more chance
> of it
> > > > being implemented. Anyone else in the group need this function?
> > > > 
> > > > Mark
> > > > 
> > > > --- In [email protected], "Thom DeCarlo" <t.r.decarlo@> wrote:
> > > > >
> > > > > I think the problem is that the TopologyBuilder is smarter than
> > i need
> > > > > it to be. My line network is already "clean" in that the lines
> > connect
> > > > > and their endpoints are the only things I want to calculate
upon. 
> > > > > 
> > > > > I'm not certain, but it *looks* like I can use the
> > > > > SpatialRelationshipFactory to build the topology. If I can
create
> > > > > seperate node features for each line endpoint, I can pass the
> nodes
> > > > > and lines through seperate counters to provide unique ids and
> > then use
> > > > > the node as the base and the line as the candidate for the
> > > > > SpatialRelator. 
> > > > > 
> > > > > Is there a factory that will generate nodes from the
endpoints of
> > > lines?
> > > > > 
> > > > > But, it might take two passes through the SpatialRelator,
> > because the
> > > > > nodes must know what lines they touch and the lines must
know what
> > > > > nodes they touch.
> > > > > 
> > > > > Thanks!
> > > > > Thom
> > > > > 
> > > > > --- In [email protected], "mark2atsafe" <mark.ireland@> wrote:
> > > > > >
> > > > > > Bah! You can tell that first glance was the only one I took!
> > > > > > 
> > > > > > In that case I don't believe there is anything you can do;
> the two
> > > > > > functions appear to be mutually exclusive. Of course you could
> > > always
> > > > > > number the nodes manually and then apply the values to the
> lines.
> > > > > > Wouldn't be too hard to do.
> > > > > > 
> > > > > > In the meantime I can file a request to implement such
> > > functionality.
> > > > > > 
> > > > > > Regards,
> > > > > > 
> > > > > > Mark
> > > > > > 
> > > > > > 
> > > > > > --- In [email protected], "Thom DeCarlo" <t.r.decarlo@>
wrote:
> > > > > > >
> > > > > > > Hey Mark,
> > > > > > > At first glance the results looked good. The lines crossed
> > without
> > > > > > > producing nodes at the intersections while the endpoints
> > generated
> > > > > > nodes. 
> > > > > > > 
> > > > > > > However, the connectivity is now broken. All of the
lines say
> > > > that the
> > > > > > > "_from_node" is 1 and the "_to_node" is 2. Is there
something
> > > else I
> > > > > > > can do to generate the complete endpoint connectivity
> structure?
> > > > > > > 
> > > > > > > Thanks!
> > > > > > > Thom
> > > > > > > 
> > > > > > > --- In [email protected], "mark2atsafe" <mark.ireland@>
> wrote:
> > > > > > > >
> > > > > > > > Hi Thom,
> > > > > > > > I think you can do what you want quite easily.
> > > > > > > > 
> > > > > > > > Run all of your line features through a Counter to give
> them a
> > > > > unique
> > > > > > > > ID (unless they have one already).
> > > > > > > > 
> > > > > > > > Then set the TopologyBuilder group-by to use the
unique ID.
> > > > > > > > 
> > > > > > > > Doing this will exclude overlapping lines from the node
> > > > generation;
> > > > > > > > overlaps would only get noded where their IDs are the
same.
> > > > However,
> > > > > > > > nodes are still created where end-points meet.
> > > > > > > > 
> > > > > > > > Hope this helps,
> > > > > > > > 
> > > > > > > > Mark
> > > > > > > > 
> > > > > > > > Mark Ireland, Product Support Engineer
> > > > > > > > Safe Software Inc. Surrey, BC, CANADA
> > > > > > > > support@ http://www.safe.com
> > > > > > > > Solutions for Spatial Data Translation, Distribution and
> > Access
> > > > > > > > 
> > > > > > > > 
> > > > > > > > --- In [email protected], "Thom DeCarlo" <t.r.decarlo@>
> > wrote:
> > > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > > Now that I've finally gotten my line network mostly
> cleaned
> > > > up I'm
> > > > > > > > > trying to figure out how to work with the
TopologyBuilder.
> > > > > Right off
> > > > > > > > > the bat the first problem I'm having is that I only
> want to
> > > > > generate
> > > > > > > > > nodes where line endpoints touch either other
endpoints or
> > > other
> > > > > > > > > lines. I *don't* want to generate nodes where lines
cross
> > > > lines. 
> > > > > > > > > 
> > > > > > > > > Is there any way to do this with the TopologyBuilder?
> Or is
> > > > there
> > > > > > > > > another factory that can do this? I don't see anything
> > in the
> > > > > > > > > documentation to help me here.
> > > > > > > > > 
> > > > > > > > > Thanks,
> > > > > > > > > Thom
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>








Get the maximum benefit from your FME, FME Objects, or SpatialDirect via our 
Professional Services team.  Visit www.safe.com/services for details. 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/fme/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to