Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Efficient query if a point is inside any polygon in a list of polygons

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Efficient query if a point is inside any polygon in a list of polygons


Chronological Thread 
  • From: Andreas Fabri <>
  • To:
  • Subject: Re: [cgal-discuss] Efficient query if a point is inside any polygon in a list of polygons
  • Date: Tue, 14 Jun 2022 18:07:37 +0200
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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 749rw6/L1E=
  • Ironport-hdrordr: A9a23:3OHy8KmLqtM5zAFiWLzwpdkqx6vpDfLI3DAbv31ZSRFFG/Fw9/ rCoB1p726TtN9xYh4dcL+7WZVoLUmsl6KdpLNhRItKPzOHhILLFu9fBOLZqlWKcREWtNQtsp uIGJIObeEYY2IK6foSrDPIcOoI8Z2gz6Htr+Lfw3BxbRgCUc1dxjY8LBmbVnBsTANLHt4YGf Onl7J6jgvlRk9SVP2SIlMsY9Luzue76a7OUFo4PFoc0SGrtxmP05KSKWnj4j4uFwx1hY0a2U z+riTFysyYwoqG9iM=
  • Ironport-phdr: A9a23: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 4/qpHVFiVsLUQ==
  • Ironport-sdr: 6fjq/f5dmIXXYUqftgQHtFM9wDybPTKS/k9APc3de0jeox3sRhmZSt0l/kEfFjdLB2UnZPhjJf kpr9MWlSIogLFkEy3qtTbpgl/c0ewtHqZbtMSerwouGT8aEQoTZotnOm4XocVcJLSZO4LBU6aG gXvh+9AOH7h3mPZMhOrhVlaIGIMvwgQKYg7KDtIYAl0ZxcvBg7KBO1Op7nTMspOiheGZC0lanv woOJF4NP5kpaoQKGvZofRcvos6QfJtTRGUiFa/lufAQ6GZpzH9xqVMtWwMEZdkJE7ZT2wtcqWf fOULyvBmsbKZNweOxgW+6thQ

Let me add my 10 cents for yet more alternatives.

You can put the polygons in a constrained triangulation and mark all triangular faces which are inside a polygon.
You then perform a hilbert_sort on your points, and  perform the point location of the triangulation,
and for the i-th point you give the location of the (i-1)-th point as hint to accelerate the traversal.

In case you know all polygons and all points at the beginning, a plane sweep should do it,
that is there should be no need for an arrangement or triangulation.    A point event of the
sweep should be able to determine if on the sweepline you are inside or outside.
This does not exist out of the box though.

Best,

Andreas

On 6/14/2022 5:50 PM, Andrew Cunningham wrote:
Hi,
I had to deal with a similar issue. I treated this as a 3D ray tracing problem as the technique is very robust.

- triangulate the polygons ( remembering which polygon the triangles belong to)
- Add the triangles to a 3D AABB tree with z=0
- shoot a ray from say z=1 in the direction 0,0,-1 using x,y of your query point
- first_intersection() will return the triangle

 https://doc.cgal.org/latest/AABB_tree/index.html#aabb_ray_shooting

If this is a performance critical application you could use embree ( open source, very high performance ray tracer) instead of CGAL for raytracing. Also if you can search multiple points in parallel then it's a trivially parallel problem for which you can use, say, OpenMP

Andrew
On Jun 10, 2022, at 1:04 PM, Renato Silveira <> wrote:


Dear all,

I need to query if a point is inside any polygon from a list of many polygons. Is there a spatial search tree that speeds up this process?

Thanks for any insight

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss

-- 
Andreas Fabri, PhD
Chief Officer, GeometryFactory
Editor, The CGAL Project



Archive powered by MHonArc 2.6.19+.

Top of Page