That sounds like it could be just the ticket Martin ! Thanks so much. I'll play with that and let you know how I get on.
Michael On 3 December 2013 12:36, Martin Davis <[email protected]> wrote: > I just realized that you don't even have to alter STRtree to support a > custom filter function. STRtree already provides a method which accepts a > custom ItemDistance function. This could be given an implementation which > forces the distance of objects *not* in the current compass slice to be > Double.MAX_VALUE. > > > On Mon, Dec 2, 2013 at 5:25 PM, Martin Davis <[email protected]> wrote: >> >> A fascinating problem, Michael. >> >> How's this for a idea: use a direction-constrained nearest neighbour >> search. (Don't bother googling this - I just made it up!). The STRtree in >> JTS provides a nearest-neighbour search made efficient by walking the R-tree >> node hierarchy. It should be possible to add some further logic to the >> search algorithm to reject candidates which do not lie in the compass >> direction of interest. (It seems like it will be straightforward to compute >> whether a candidate lies with the compass slice). >> >> You'll have to open up the STRtree nearest neighbour code and add >> provision for a custom filter to be run on each candidate as they are added >> to the current search list. This should be built using a filter function >> interface, to make it reusable. >> >> >> On Mon, Dec 2, 2013 at 4:21 PM, Michael Bedward >> <[email protected]> wrote: >>> >>> Hi Martin, >>> >>> The following is a general algorithm query rather than a specific JTS >>> question - hope that's ok. >>> >>> I have a set of polygons which represent urban areas within a >>> fire-prone landscape. There are about 5000 polygons varying widely in >>> area, spatial extent, number of vertices and boundary complexity. >>> >>> I have the task of creating a regular grid of sample points within the >>> surrounding landscape and, for each point, determining the distance to >>> the nearest polygon within each of eight compass segments (ie. N to >>> NE, NE to E...). The results only need to be expressed as categorized >>> values based on a small number of distance cut-points. >>> >>> I've been trying to nut out something other than a brute force >>> approach to this without much success so far. One of the possibly less >>> brutish approaches I've thought of involves the following: >>> >>> 1. Split up the urban polygons by intersecting them with a regular >>> lattice, create PreparedGeometry objects for the resulting parts and >>> put them into an STRtree. >>> >>> 2. Construct a sampling template made up of polygons representing the >>> compass segments, each split according to the distance cut-points >>> (looking a bit like a dart board), possibly using a custom >>> CoordinateSequence to have vertex coordinates calculated on the fly >>> based on the centre coordinate. >>> >>> 3. For each sample point location: >>> For each compass segment: >>> For inner to outer segment part: >>> Query the spatial index with the segment part envelope >>> and, if any urban polygons are returned, test for >>> intersection. >>> >>> I'm sure there must be a better way. Any suggestions or comments will >>> be gratefully accepted. >>> >>> Michael >>> >>> >>> ------------------------------------------------------------------------------ >>> Rapidly troubleshoot problems before they affect your business. Most IT >>> organizations don't have a clear picture of how application performance >>> affects their revenue. With AppDynamics, you get 100% visibility into >>> your >>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics >>> Pro! >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Jts-topo-suite-user mailing list >>> [email protected] >>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user >> >> > ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk _______________________________________________ Jts-topo-suite-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
