Tutorial :distance from point within a polygon to polygon edge



Question:

I am working with a huge area, 7 states of forest and nonforest using the NLCD data. Within some of the forested areas is a plot (this is my master's thesis I am working on). I have stumped everyone I have asked with this large dataset but we are certain there is a resolution out there. The forest/nonforest area is a signed and discrete raster. I was able to make the forested area into polygons by subsetting out the forested area. I am not able to make the nonforest area into polygons (too large). So I was trying to get point distance (the point is within the polygon) to the edge of the forested polygon. Do you have suggestions for getting the distance of a point to the forest edge?


Solution:1

Well, this really does depend on a couple of things; specifically, which edge do you want? Do you want to find the nearest edge, or do you have some other criteria that you want to select an edge by (for example, cardinal direction)?

If you want to find the nearest edge, you basically want to iterate across all of the line segments the polygon defines, doing a line-segment-to-point distance calculation; this will find your distance. There's a good implementation of the algorithm in Python on this question, and there's some good description of the algorithms there.


Solution:2

Here is some code that output the distance from a point to an edge, wether the polygon is convex or not, CCW or not. You'll have to test for all your polygons' edges. It might be a little slow for a large set of edges.

- (double) distanceFromPoint:(yourPoint)testPoint  {    double pointX = edgePointB.x - edgePointA.x;  double pointY = edgePointB.y - edgePointA.y;    double k = pointX * pointX + pointY * pointY;  double u = ((testPoint.x - edgePointA.x) * pointX + (edgePointA.y - edgePointA.y) * pointY) / k;    if (u > 1)      u = 1;  else if (u < 0)      u = 0;    double x = edgePointA.x + (u * pointX);  double y = edgePointA.y + (u * pointY);    double dx = x - testPoint.x;  double dy = y - testPoint.y;    return sqrt((dx * dx) + (dy * dy));    }  


Solution:3

if you aren't sure that the point is within the outer polygon, test that first. Then, to test for the distance to closest forest edge, you could try something like this:

http://www.bdcc.co.uk/Gmaps/BdccGeo.js

Google has a wealth of results for 'distance from point to polygon edge'


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »