point_in_polygon test

tyshih at cc.nctu.edu.tw tyshih at cc.nctu.edu.tw
Thu Nov 11 00:51:34 EST 1999



The journal, 'Computers and Geosciences', would be a good 
place to search for this type algorithms.  Related codes are 
frequently availabe from the web page of the journal as well.
I don't have the url handy, but it may be find from yahoo or 
other search engine.  The latest article related to point-in-polygon
on this journal is,


   Polygon intersections in spherical topology: application to plate tectonics
                                     Schettino A
                             COMPUTERS & GEOSCIENCES 
                                 25: (1) 61-69 FEB 1999


Abstract:
This paper describes a set of algorithms for performing overlay operations on polygonal regions in spherical topology. A
solution to the intersection problem for a polygonal region on the unit sphere with respect to a base set of polygons is
proposed. The method is based upon a variant of the point-in-polygon procedure and has been successfully used to
reconstruct ancient ocean-floor age maps and plate boundaries. (C) 1999 Elsevier Science Ltd. All rights reserved.

Best regards.

Shih, T.Y.


> >On Wed, 10 Nov 1999, Robb Hill wrote:
> >
> >> Can anyone offer advice?  Any good books on these types of algorithms or
> >> code?
> >
> >Robb,
> >
> >  That's an excellent question! I, too, would like to have such a reference
> >available. The last I heard -- and this goes back a dozen years when I first
> >worked with ARC/Info -- is that the algorithms are rather closely held by
> >those (like Jack Dagerman) who developed them. After all, the
> >point-in-polygon and similar problems are why ESRI is able to charge the
> >extremely high prices they do. It's also the reason why there are more
> >raster-based analytical GISes than vector-based analytical offerings.
> >
> >  Please let me know what you find out. Have you posted to GIS-L?
> >
> >Rich
> 
> 
> This excercise seems to have confounded numerous folks in numerous areas of
> endeavour it seems...I've appended two possible solutions (headers from
> code) that I came across while searching for an answer some time ago. The
> first is a simple minimalist solution, the second is a much more
> sophisticated solution (can handle an array of polygons for the p_in_poly
> test)...but will need more work to customise. If anybody else would like
> the code (which can be freely and publicly distributed) let me know and
> I'll forward same.
> 
> Regards, Roderick
> 
> 
> /***************************************************************************
>  *                                                                         *
>  *   INPOLY.C                                                              *
>  *                                                                         *
>  *   Copyright (c) 1995-1996 Galacticomm, Inc.  Freeware source code.      *
>  *                                                                         *
>  *   Please feel free to use this source code for any purpose, commercial  *
>  *   or otherwise, as long as you don't restrict anyone else's use of      *
>  *   this source code.  Please give credit where credit is due.            *
>  *                                                                         *
>  *   Point-in-polygon algorithm, created especially for World-Wide Web     *
>  *   servers to process image maps with mouse-clickable regions.           *
>  *                                                                         *
>  *   Home for this file:  http://www.gcomm.com/develop/inpoly.c            *
>  *                                                                         *
>  *                                       6/19/95 - Bob Stein & Craig Yap   *
>  *                                       stein at gcomm.com                   *
>  *                                       craig at cse.fau.edu                 *
>  *                                                                         *
>  ***************************************************************************/
> 
> 
> /*************************************************************
> 
> Copyright (c) 1995  Raimund Seidel
> All rights reserved.
> 
> This program is distributed WITHOUT ANY WARRANTY;
> without even the implied warranty of MERCHANTABILITY or
> FITNESS FOR A PARTICULAR PURPOSE.
> 
> **************************************************************
> 
> 
> 	A RANDOMIZED PLANAR POINT LOCATION STRUCTURE
> 
> 	by R. Seidel
> 
> 	last edited:  90 Feb 10
> 
> 
> This file contains several routines for dealing with a general version
> of the so-called planar point location problem, which can be described
> as follows:  one is to preprocess a set of non-vertical straight line
> segments into a data structure so that for any given query point p one
> can determine quickly which segment is the first one directly below p.
> It is assumed that no two segments have interior points in common.
> 
> The method employed is a randomized one that I have so far not gotten
> around to write down formally in a paper.  It has the property that
> a search requires fewer than 4*ln(n) comparisons in expectation.  It has
> O(nlogn) expected preprocessing time and needs O(n) expected space.
> All expectations are over "coin flips" in the algorithm and not over
> assumed input distributions.
> 
> 
> 
> The Test Program allows for two usages:  either the input is a
> set of segments as described above and for query points the next
> segment below are returned, or the input is the sequence of corners
> counter clockwise around a simple polygon and for query points it
> is determined whether they lie inside this polygon or not.
> 
> Just compile this file and run it.  It should be fairly self-explanatory.
> 
> 
> Some warnings:  There is only minimal checking whether the input
> 	is correct (whether there are improper intersections).
> 	Although the program should not crash, the answers will not
> 	be meaningful.
> 	There is also no overflow checking.  Currently everything
> 	is done in terms of integer coordinates.  Keeping their
> 	magnitudes smaller than 2^15 will definitely avoid overflow.
> 	Using a coordinate larger than `infinity' can cause a crash.
> 
> Remarks:
>    The coordinate type can be changed from integer to something
>    else quite easily by changing the first 5 definitions.  A change
>    to floating point will of course open the usual Pandora's box
>    of precision problems.  However, they are refined to the two
>    macros point_above_segment and point_below_segment.
> 
>    These two macros along with segment_above_segment are also
>    the only things that would need to be adjusted if one wanted to
>    use this algorithm for segments that are not straight, but
>    still x-monotone.
> 
> 
> For any remarks, complaints, etc. send email to
> 
> 	seidel at lyra.berkeley.edu
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _____________________________________________________________________
> 
>  Roderick Brown                           Tele: (Int+ 61 3) 9344-9868
>  School of Earth Sciences                Dept.: (Int+ 61 3) 9344-7675
>  The University of Melbourne         Facsimile: (Int+ 61 3) 9344-7761
>  Parkville, 3052                Home Telephone: (Int+ 61 3) 9397-8848
>  Australia                     Email: r.brown at earthsci.unimelb.edu.au
> 
> ______________________________________________________________________
> 
> 
> 
> 



More information about the grass-user mailing list