Select to view content in your preferred language

Buffer zone according to the surface

4655
22
Jump to solution
04-04-2018 10:56 AM
RobertoFilloramo
Occasional Contributor

Using ArcGIS (10.3.1), is it possible to create a buffer zone according to the surface with a variable radius (i.e. 5-10-15 Km)? Which means that the buffer zone is not "flat", yet it has a shape that followed the surface.

Thanks

0 Kudos
22 Replies
RobertoFilloramo
Occasional Contributor

Well, I checked and I have not a buf_3D, so I guess I will have to try again the code; moreover, if I switch one all the layers created by the code I obtain that just only a buffer has specific info in its attribute table (as you can see in the pics; 1-general, 2-detail, 3-detail with attribute table). Therefore, I could consider it a mistake too.

0 Kudos
XanderBakker
Esri Esteemed Contributor

I think at this point it would be best to run the code on the sample you provided me and see if you get the same results. If there is no result, it is not a matter of interpreting the result, but something is going wrong in the process. Als please attach the code that you are using so I can compare it with mine and see is there is something wrong with the code. Perhaps we should include some messaging in the code too to see what is going on.

0 Kudos
DanPatterson_Retired
MVP Emeritus

As an example, lets take an artificial terrain whose elevation undulates every 100 meters by X meters.

The 3D length can be calculated for this and any line of x, y and z coordinates.

x = np.linspace(0, 1000., 11)
y = np.zeros(11)
zm = 20
zs = np.array([0, zm, 0, zm, 0, zm, 0, zm, 0, zm, 0])
el = np.array(list(zip(x, y, zs)))‍‍‍‍‍

For various cases, you will notice that the zs vary between 0 and zm up and down from start to end.

Some results for various zm

zm = 10 (total and segmented)

[(1004.9875621120891,  array([ 100.5,  100.5,  100.5,  100.5,  100.5,  100.5,  100.5,  100.5,  100.5, 100.5]))]

zm = 20 

[(1019.8039027185569,  array([ 101.98,  101.98,  101.98,  101.98,  101.98,  101.98,  101.98,  101.98, 101.98,  101.98]))]

xm = 30

[(1044.0306508910548,  array([ 104.4,  104.4,  104.4,  104.4,  104.4,  104.4,  104.4,  104.4,  104.4,  104.4]))]

zm = 40

[(1077.0329614269008,  array([ 107.7,  107.7,  107.7,  107.7,  107.7,  107.7,  107.7,  107.7,  107.7, 107.7]))]

zm = 50

[(1118.0339887498949,  array([ 111.8,  111.8,  111.8,  111.8,  111.8,  111.8,  111.8,  111.8,  111.8,  111.8]))]
Now for the first (zm=10)  and last one,(zm = 50) the total elevation change is the sum of the zs * 2, to account for the rise and fall between points.
So the question becomes, do you have a cumulative elevation difference of 100 m or 500 m per kilometer?
You are not going to notice anything probably when zm is < 20 (1019m 3d versus 1000m)