I want to look at the land use on the shoreline of a river relative to a specifc point on the river. I have created a point on the shoreline using the Near tool. Following this I am having trouble. I want to create a buffer that goes down the shoreline 100m in either direction and inshore 20m. I am hoping to do this for many points so a batch solution would be great.
-
Buffer the point on the river bank by 100m, clip the river boundary (do you have just the boundary?) and buffer by 20m (end type flat) then erase by the river to remove the section inside the river. If you're wanting a batch solution does that include arcpy? model builder? ArcObjects?– Michael StimsonCommented Apr 21, 2015 at 22:15
-
1@MichaelMiles-Stimson that wouldn't be a true 100m buffer given the curve. It might be 'close enough' but in theory an accurate solution is going to have to use linear referencing.– Chris WCommented Apr 21, 2015 at 22:40
-
Any chance you have network analyst? I just thought of a 'cheat' using the Service Area solver that would make short work of this.– Chris WCommented Apr 21, 2015 at 23:01
-
Absolutely @ChrisW, is that 100m 'as the crow flies' or 100m of bank, measured along the polyline from the point... then again, are we over thinking the problem? More info is needed on what exactly is 100m of bank before composing an answer. I would like to see the Network Analyst solution, I haven't had much to do with that extension and wouldn't mind seeing how this would solve it - could come in handy later.– Michael StimsonCommented Apr 21, 2015 at 23:55
-
1@MichaelMiles-Stimson Nothing particularly complicated. Assuming river lines are topologically correct and ready for quick import as a network, the Service Area solver is basically a 'along the line buffer' tool and it can automatically snap input points to the nearest point on the network, eliminating that step/tool. Output can be lines or polygons. Lines would let you skip to the 20m buffer step of your comment, polygons might take some tweaking (gis.stackexchange.com/questions/93603).– Chris WCommented Apr 22, 2015 at 5:57
2 Answers
Agree with Chris W. This field calculator expression will calculate from and to measures in a point file, providing there is a single river - polyline:
def CalcFromToMeasures(shp,n):
mxd = arcpy.mapping.MapDocument("CURRENT")
lr=arcpy.mapping.ListLayers(mxd, "river")[0]
with arcpy.da.SearchCursor(lr, "Shape@") as cursor:
for row in cursor:
river=row[0];break
pointPosition= river.measureOnLine(shp)
fromM=max(0,pointPosition-100)
toM=min(river.length, pointPosition+100)
pickList=(fromM,toM)
return pickList[n]
Run it on a field(double) in the original points table using
CalcFromToMeasures( !Shape!,0)
to calculate FROM measure. To compute TO measure, replace 0 by 1. Create route from river, create events (line). The rest according to Michael solution.
The Devil, of course, is always in the details. You need to look at several things.
First the river itself: You talk about 'a' river. It sounds as though you are talking about land use along specific reaches of a single river. Is that the case?
Second the bank: Are you interested only in the land use along one bank of the river?
Then the representation of the river in the available GIS data: Is the river defined in the GIS by one line or two? Is there a stream centreline denoting flow? Is the line work oriented according the downstream rule?
Next the points on the river: How are those generated? Are they consistently closer to one bank than the other?
The first potential solution that comes to mind is dynamic segmentation. You should be able to define your 200m reaches with linear referencing along the river and then buffer. Look in the ESRI help for dynamic segmentation and linear referencing.