Vector GIS Data line-of-sight?
I have a situation where I'm only concerned with a few vector layers and two-dimensional line-of-sight. I know that line-of-sight is usually performed on raster data because the typical use is topography. Because that wording is vague and close to useless here's my situation:
I have a polygon shoreline vector shapefile, a "source" point placed in the water somewhere, and a "buffer" polygon layer that represents a large radius circle around the "source" point. I'm only interested in the parts of the buffer polygon that are "within sight" of the source point. In the image below the red dot is the source, the orange polygon is the buffer clipped with the shoreline, and the yellow polygon is what I'm interested in. Even this isn't as fine as I'd like.
Image: http://i.stack.imgur.com/IKBLv.png
I want to automate the process I use now (开发者_运维问答fairly time-consuming) and would prefer to use python/numpy/scipy/OGR/GRASS instead of ESRI's stuff.
Any idea how to trace along the line and check for "visibility"? I could rasterize everything and use a traditional radial line-of-sight script within GRASS but that seems like way dealing with too much data held in memory and running checks for pixels we know wouldn't produce a collision for the intersection of a few vectors. I want to be as light as possible while maintaining the highest accuracy possible.
How about considering (iteratively) the line between your point and each point in the shoreline shapefile? If it intersects the "land" polygon (crosses over land), then that point on shore is not visible. Take all the points that are visible, and use them to form a new polygon of the visible area.
精彩评论