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/
