Re: coordinates on land [message #18177] |
Wed, 15 December 1999 00:00 |
Mark Hadfield
Messages: 783 Registered: May 1995
|
Senior Member |
|
|
Klaus Scipal <kscipal@ipf.tuwien.ac.at> wrote in message
news:82p4ia$bf$1@news.tuwien.ac.at...
>
> I am looking for an IDL procedure that tells me if a point (given in
> longitude and latitude) is situated on land or on water.
> for example the point 10�N and 20�E is situated on land (in Africa) the
> point 10�N 40�W is situated on water (the Atlantic)
I'm not aware of any ready-to-run solution to this problem. The problem can
be divided into two parts:
1.) Describe land areas as closed polygons.
2.) Establish if the point in question is inside any of the polygons.
There was some discussion about part 2 on this newsgroup a few weeks ago. I
posted some code based on summing angles around the point in question to the
polygon vertices; several other people posted code or made suggestions.
Re part 1, AFAIK the coastline datasets that come with IDL are not suitable
because they contain duplicate points or intersecting edges. There is a
coastline dataset designed specifically for this purpose, called "GSHHS - A
Global Self-consistent, Hierarchical, High-resolution Shoreline Database",
at
http://www.ngdc.noaa.gov/mgg/shorelines/gshhs.html
The GSHHS data come in a straightforward binary format. I intend to write
IDL routines to read the GSHHS data REAL SOON NOW.
---
Mark Hadfield
m.hadfield@niwa.cri.nz http://katipo.niwa.cri.nz/~hadfield/
National Institute for Water and Atmospheric Research
PO Box 14-901, Wellington, New Zealand
|
|
|
Re: coordinates on land [message #18216 is a reply to message #18177] |
Thu, 09 December 1999 00:00  |
davidf
Messages: 2866 Registered: September 1996
|
Senior Member |
|
|
Klaus Scipal (kscipal@ipf.tuwien.ac.at) writes:
> I am looking for an IDL procedure that tells me if a point (given in
> longitude and latitude) is situated on land or on water.
> for example the point 10�N and 20�E is situated on land (in Africa) the
> point 10�N 40�W is situated on water (the Atlantic)
Here is something quick and dirty. Returns a 1 if the location
is on land and a 0 otherwise.
Cheers,
David
--
FUNCTION On_Land, longitude, latitude
; Longitude ranges from -180 to 180.
; Latitude ranges from -90 to +90.
On_Error, 1
IF N_Params() NE 2 THEN Message, 'Incorrect number of arguments'
; Fill window with map continents. Water = 0, Land = 1.
Window, XSize=360, YSize=180, /Free, /Pixmap
Map_Set, /Cylindrical, 0, 0, Position=[0,0,1,1], /NoBorder, Color=0L
Map_Continents, /Fill, Color=1L
image = TVRD()
; Convert location to device coordinates.
location = Convert_Coord(longitude, latitude, /Data, /To_Device)
; Delete window. Return location pixel value.
WDelete, !D.Window
RETURN, image[0 > location[0] < 359, 0 > location[1] < 179]
END
--
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
|
|
|