# Extracting all points within a certain distance and height difference from a Raster

I have a raster containing tens of millions of points all with X, Y and Z data defined. I need to figure out a simple way to extract and create a new raster or vector with ALL points at a 720 m distance from each other (X,Y) and at 120 m elevation difference (Z) from each other.

I have ZERO knowledge of SQL and Python. I have been trying to do this on VBA and came up with a couple of algorithms but the processing time is unreasonable and unrealistic. I am sure there must be a simple GIS approach to accomplish this but cannot seem to find it.

I am using ArcMap.

• I am using ArcMap. Thanks for your comment. I will also change it in the original question :). Aug 7, 2014 at 8:41
• You say 720m on the horizontal and 120m on the vertical but from where? Sounds like you have some sort of point cloud but you could search for points that full fill your criteria from any location within this cloud. Surely you must have some sort of seed location or another criteria that you have not mentioned such as maximizing the number of points that full fill the criteria? Aug 7, 2014 at 10:19
• Like I said I am trying to "extract ALL points at a 720 m distance from each other (X,Y) and at 120 m elevation difference (Z) from each other." There is no "seed location", I am scanning ALL the points. Aug 7, 2014 at 11:10
• One of the biggest challenges I envision with this is how the result is portrayed. Would it be acceptable to have a raster result in which `0` = has no points 720m away & ±120m elevation, `1` = one or more points 720m away & ±120m elevation? Or, do you need to count how many points would meet the criteria? Aug 7, 2014 at 11:16
• Dear Erica, The first choice would be more than acceptable. I have no requirement to count how many points meet this criteria but I do need to be able to see them as compared to the original raster. According to your suggestion, any point/pixel assigned a value of 1 will have another or several other points within the required elevation and distance from it, so that is perfect! The only question I have is how to accomplish this in an efficient manner? Aug 7, 2014 at 11:58

A perhaps-too-simple approach would be to use Focal Statistics.

• Define the neighborhood of interest as an annulus, with inner radius just under 720m and outer radius just over 720m. (This depends somewhat on cell size. For example, 5m cells would have an annulus of 717.5 - 722.5; this might be too large a window for a 1m cell raster, though.)
• Use statistics type `MIN`, to find the lowest elevation value in the neighborhood.
• Repeat a second time, use statistics type `MAX`, to find the highest elevation value in the neighborhood.
• Using Raster Calculator, evaluate whether the elevation differences are large enough. Something like

`Con((Abs("DEM" - "FSMin") > 120) | (Abs("DEM" - "FSMax") > 120), 1, 0)`

If the original-min difference or original-max difference exceeds 120m, the value is 1, otherwise 0. (Note: I haven't tested the syntax.)

This only tells you whether a cell has one or more neighboring cells that meet your distance/elevation criteria, it does not tell you how many.

• Wow.... I think that worked.... unbelievable. Thank you so much. I've been spending weeks tinkering with VBA trying to do this when the solution is quite simple on GIS. God bless you. Aug 7, 2014 at 12:38
• doesn't this identify points with a neighbor that's at least 120m difference in elevation? I suspect that's the intent of the question, but the wording is "at 120m difference". Aug 9, 2014 at 23:22
• @Llaves Yes, you're right. I suspect that finding exactly 120m difference at exactly 720m would require a very interesting script. Aug 10, 2014 at 0:45
• Regardless, there has to be an interval since we are dealing with natural terrain. For my particular application elevation differences superior to 120 meters are actually more interesting. I should have been more precise in my original statement. Thank you guys anyway. Aug 10, 2014 at 19:01