Question

identify where 4 collisions happened within a 1000m stretch of road

  • 3 January 2018
  • 4 replies
  • 1 view

Badge

Hi, I'm fairly new to FME and am hoping to tap into your knowledge! I'm trying to score roads depending on their safety record.

The criteria is 4 KSI (Killed or seriously injured) collisions within a 1000 metre stretch of road in a rural environment, and over 500 metres within in urban area, over the previous three-year period.

I have a dataset containing collisions across the county over five years, which includes coordinates, severity and date (so i can easily filter out those that are too old or not serious or fatal - 820 collisions after filtering).

I have a Mitab file containing the roads (with a unique reference and a field for urban / rural) - but the lines indicate the centre line of the road and as such they do not join at junctions. We're talking about 27,570 links so I can't change this.

I can conjure up a way of seeing how many collision points have another 3 points within a 500 or 1000m cluster, but I'm stumped as to how I can link it to stretches of road?

I'm using FME desktop 2016.1.2.1 and ArcInfo or ArcView 10.4.1

THANKS!


4 replies

Userlevel 4

I did something similar a few years ago, but that was using linear referencing and as such it's not quite a match for what you're up to, but I think the principle should still apply.

I think the first order is to assign each accident (point) to a road segment (line). The NeighborFinder may be helpful with this, but you may have to take special care about intersections. If there is no way to automatically associate accidents with their proper road segment, you could e.g. consider treating "ambiguous" accidents separately, i.e. accidents within a certain radius of an intersection.

To create intersections, you can use an Intersector. You could then e.g. use a GeographicBufferer and the SpatialFilter to isolate accidents close to intersections.

Once every accident has been assigned a road segment, you can use the road id (preferrably not the segment id, if possible) as a Group By-clause for further processing.

I hope this can get you a bit further.

Badge

Hi @reneewsp

I wonder if building buffers with Bufferer around the points and then analyzing how many buffers overlap with AreaOnAreaOverlayer could be helpful. Another option would be to use NeighborFinder together with ListElementCounter to find accident points with many neighbours. Once you find accident clusters, I guess, it will be easier to find road segments they belong to... although, without seeing the data this is not very clear to me (e.g. what road an accident happening at intersection should be linked to).

Badge

Hi @reneewsp

I wonder if building buffers with Bufferer around the points and then analyzing how many buffers overlap with AreaOnAreaOverlayer could be helpful. Another option would be to use NeighborFinder together with ListElementCounter to find accident points with many neighbours. Once you find accident clusters, I guess, it will be easier to find road segments they belong to... although, without seeing the data this is not very clear to me (e.g. what road an accident happening at intersection should be linked to).

Hi Lena, this is pretty much the approach i'd come up with so far - however, that would pick up clusters of accidents which may not occur on the same road but on a side or parallel road. Thank you though :)

 

 

Badge

I did something similar a few years ago, but that was using linear referencing and as such it's not quite a match for what you're up to, but I think the principle should still apply.

I think the first order is to assign each accident (point) to a road segment (line). The NeighborFinder may be helpful with this, but you may have to take special care about intersections. If there is no way to automatically associate accidents with their proper road segment, you could e.g. consider treating "ambiguous" accidents separately, i.e. accidents within a certain radius of an intersection.

To create intersections, you can use an Intersector. You could then e.g. use a GeographicBufferer and the SpatialFilter to isolate accidents close to intersections.

Once every accident has been assigned a road segment, you can use the road id (preferrably not the segment id, if possible) as a Group By-clause for further processing.

I hope this can get you a bit further.

Hi David, thank you for your response. I've not used any of those transformers before, so I'll have a play using a sample of the data. Thanks!

Reply