In which region does my (arbitrary) point lie?

  • Thread starter Thread starter billiards
  • Start date Start date
  • Tags Tags
    Point
AI Thread Summary
The discussion revolves around the challenge of determining which tectonic plate region each point from a large dataset (over 100,000 points) falls into, based on complex polygon boundaries defined in a text file. A suggested approach involves preprocessing the map by dividing it into manageable rectangles based on latitude and longitude, allowing for efficient initial filtering of potential plates before checking specific edges for each point. The user expresses a desire for a transportable solution that can adapt to different plate boundary models or datasets. They reference the point-in-polygon problem and mention finding relevant algorithms, specifically the ray-casting algorithm, which could be useful for their needs. The user successfully implements the code and warns about potential complications near the Greenwich Meridian. They plan to test the code on their full dataset soon and will share the results regarding performance.
billiards
Messages
765
Reaction score
16
My problem is that I have a bunch of regions, in this case they are tectonic plates. Each region has a complex boundary, described by polygons, in a text file with co-ordinates.

images?q=tbn:ANd9GcTtVDIzDfO1gqBZYix7Tzw_gnDnaLJTOEIEOJfR3OBG42k8mZJNJw.jpg


I have a long list of points (>100,000) distributed globally and I need to know in which region each point lies.

Basically I need an algorithm, that can be easily coded up in fortran.

Any helpers?
 
Last edited:
Technology news on Phys.org
I don't know how quick that is, but for 100 000 points I think you can spend some time on preprocessing: Divide the map into parts which are easy to handle (like "rectangles" in latitude/longitude), and check which plates and which edges are within a specific rectangle first. This can be done with a loop over the edges, I think. It determines all rectangles with edges, the other rectangles are easy once this is done.
Afterwards, for each point, get the corresponding rectangle (trivial). If it has more than one plate, check the borders in this rectangle.
 
Thanks for your reply mfb. I was considering that kind of approach but really I am looking for something that is more transportable, so the code can be used for example with other plate boundary models, or with any arbitrary data set.

I think I may have stumbled upon the solution.

http://en.wikipedia.org/wiki/Point_in_polygon

In fact the code looks like it is available here:

http://rosettacode.org/wiki/Ray-casting_algorithm

I'll have a go and report back.

Cheers
 
Well, that needs a lot of calculations, as you have to check every edge for every point.

so the code can be used for example with other plate boundary models, or with any arbitrary data set.
It can, you just have to run the preprocessing again.
 
mfb said:
Well, that needs a lot of calculations, as you have to check every edge for every point.

Yes but that's what computers are for :-)
 
Well, if computing time is not an issue, sure...
 
Just in case anyone wwas wondering. I got my code to work.

If anone ever tries to do this and stumbles upon this thread, the above code is good: I warn you, though: Think carefully about what happens about the Greenwich Meridian (lon=0/360).

ps, I haven't run on my 100 000+ points yet but will do on Monday so I'll let ya''ll know how long it takes. cos I'm sure you're dying to kknow
 
Back
Top