Analyzing unprojected (spherical, geodetic) vector data and Matplotlib

Hello all,

I need to do analysis of vector data (linear features, polylines) on the surface of a sphere. Many of the lines span a significant portion of the circumferance of the the body in question (Jupiter's moon Europa), and I want to be able to do the display of the data and analysis within Matplotlib.

Rather than writing my own (probably lame) module for manipulating and generating linear features stored as lists of (lat,lon) points, I'd prefer to build on someone else's work.

After a little searching around, it seems like most open GIS packages (e.g. OGL, GDAL) seem to work exclusively within a projected planar space. Am I missing something? Is there anyone else out there that does this kind of thing? What solutions do people have that work well with Matplotlib and the Basemap toolkit?

Ideally, I'd like to have the ability to perform transformations on the polylines, rotating and translating them on the surface of the sphere (without having to do the spherical trig myself), and I have to be able to have features cross the "date line" and wrap-around intelligently, calculate great-circle distances (and forward/back azimuths), best-fit great circles, etc.

Thanks for any recommendations you might have,
Zane

···

--
Zane Selvans
Amateur Human
zane@...1923...
303/815-6866
PGP Key: 55E0815F

Zane Selvans wrote:

Hello all,

I need to do analysis of vector data (linear features, polylines) on the surface of a sphere. Many of the lines span a significant portion of the circumferance of the the body in question (Jupiter's moon Europa), and I want to be able to do the display of the data and analysis within Matplotlib.

Rather than writing my own (probably lame) module for manipulating and generating linear features stored as lists of (lat,lon) points, I'd prefer to build on someone else's work.

After a little searching around, it seems like most open GIS packages (e.g. OGL, GDAL) seem to work exclusively within a projected planar space. Am I missing something? Is there anyone else out there that does this kind of thing? What solutions do people have that work well with Matplotlib and the Basemap toolkit?

Ideally, I'd like to have the ability to perform transformations on the polylines, rotating and translating them on the surface of the sphere (without having to do the spherical trig myself), and I have to be able to have features cross the "date line" and wrap-around intelligently, calculate great-circle distances (and forward/back azimuths), best-fit great circles, etc.

Thanks for any recommendations you might have,
Zane

Zane: Basemap can calculate great-circle distances (with forward/back azimuths). I'm not to clear on the types of transformations you need, but Basemap basically just does the forward and inverse transformations from map projection to geographic (lat/lon) coordinates. My guess is that it won't do the type of rotation and translation that you want to do.

-Jeff

···

--
Jeffrey S. Whitaker Phone : (303)497-6313
NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449
325 Broadway Boulder, CO, USA 80305-3328

Well, the translation/rotation on a sphere is just a kind of wish-list thing... but it would be awfully nice. It seems like someone must have done that, for re-drawing continental outlines as they drift across the surface of the earth over time or something.

What I do need, for instance, is to be able to build up a polyline object given a starting (lat,lon), an azimuth, and a distance to go. Like:

start at (lat0,lon0)
go 10km at a heading (calculated based on my location and time)
what is my new (lat,lon)?
Calculate a new heading (based on my new location and time)
go another 10km along that heading.
etc.

saving each of the (lat,lon) points that I stop at, every X km along the way.

It needs to work even if I go near a pole, or across the "wrap-around" point in Longitude.

Then I need to be able to take that lineament (list of lat,lon points) and compare its shape to the great circle which best fits its overall trajectory, e.g. distance to the best-fit great circle from the lineament as a function of distance along the lineament.

I want to be able to generate statistically similar synthetic lineaments, based on a mapped lineament, like, lineaments that have a similar power spectrum (compared to their best fit great circle), but a different overall shape, or orientation.

And I need to be able to calculate the points at which different lineaments intersect, and the ordering of the intersections along lineaments... I.e. the lineament object needs to be able to answer the question, given a set of other lineament obejcts, "who do I intersect with, and in what order, and how far along me is each of those intersections?"

It's only at the very end that I need to be able to take one of these polylines and send it to the map for visualization. Mostly I need to be able to analyze it.

Thanks for any suggestions on packages to look at.

I should dig deeper into Basemap to see what all it does.

Zane

Jeff Whitaker wrote:

···

Zane Selvans wrote:

Hello all,

I need to do analysis of vector data (linear features, polylines) on the surface of a sphere. Many of the lines span a significant portion of the circumferance of the the body in question (Jupiter's moon Europa), and I want to be able to do the display of the data and analysis within Matplotlib.

Rather than writing my own (probably lame) module for manipulating and generating linear features stored as lists of (lat,lon) points, I'd prefer to build on someone else's work.

After a little searching around, it seems like most open GIS packages (e.g. OGL, GDAL) seem to work exclusively within a projected planar space. Am I missing something? Is there anyone else out there that does this kind of thing? What solutions do people have that work well with Matplotlib and the Basemap toolkit?

Ideally, I'd like to have the ability to perform transformations on the polylines, rotating and translating them on the surface of the sphere (without having to do the spherical trig myself), and I have to be able to have features cross the "date line" and wrap-around intelligently, calculate great-circle distances (and forward/back azimuths), best-fit great circles, etc.

Thanks for any recommendations you might have,
Zane

Zane: Basemap can calculate great-circle distances (with forward/back azimuths). I'm not to clear on the types of transformations you need, but Basemap basically just does the forward and inverse transformations from map projection to geographic (lat/lon) coordinates. My guess is that it won't do the type of rotation and translation that you want to do.

-Jeff

--
Zane Selvans
Amateur Human
zane@...1923...
303/815-6866
PGP Key: 55E0815F

Zane Selvans wrote:

Well, the translation/rotation on a sphere is just a kind of wish-list thing... but it would be awfully nice. It seems like someone must have done that, for re-drawing continental outlines as they drift across the surface of the earth over time or something.

What I do need, for instance, is to be able to build up a polyline object given a starting (lat,lon), an azimuth, and a distance to go. Like:

start at (lat0,lon0)
go 10km at a heading (calculated based on my location and time)
what is my new (lat,lon)?
Calculate a new heading (based on my new location and time)
go another 10km along that heading.
etc.

saving each of the (lat,lon) points that I stop at, every X km along the way.

It needs to work even if I go near a pole, or across the "wrap-around" point in Longitude.

Then I need to be able to take that lineament (list of lat,lon points) and compare its shape to the great circle which best fits its overall trajectory, e.g. distance to the best-fit great circle from the lineament as a function of distance along the lineament.

I want to be able to generate statistically similar synthetic lineaments, based on a mapped lineament, like, lineaments that have a similar power spectrum (compared to their best fit great circle), but a different overall shape, or orientation.

And I need to be able to calculate the points at which different lineaments intersect, and the ordering of the intersections along lineaments... I.e. the lineament object needs to be able to answer the question, given a set of other lineament obejcts, "who do I intersect with, and in what order, and how far along me is each of those intersections?"

It's only at the very end that I need to be able to take one of these polylines and send it to the map for visualization. Mostly I need to be able to analyze it.

Thanks for any suggestions on packages to look at.

I should dig deeper into Basemap to see what all it does.

Zane

Zane: Check out the pyproj module included in basemap, specifically pyproj.Geod (http://pyproj.googlecode.com/svn/trunk/README.html).

It can accessed by doing

from mpl_toolkits.basemap import pyproj (in svn)
from matplotlib.toolkits.basemap import pyproj (in the released version)

-Jeff

···

Jeff Whitaker wrote:

Zane Selvans wrote:

Hello all,

I need to do analysis of vector data (linear features, polylines) on the surface of a sphere. Many of the lines span a significant portion of the circumferance of the the body in question (Jupiter's moon Europa), and I want to be able to do the display of the data and analysis within Matplotlib.

Rather than writing my own (probably lame) module for manipulating and generating linear features stored as lists of (lat,lon) points, I'd prefer to build on someone else's work.

After a little searching around, it seems like most open GIS packages (e.g. OGL, GDAL) seem to work exclusively within a projected planar space. Am I missing something? Is there anyone else out there that does this kind of thing? What solutions do people have that work well with Matplotlib and the Basemap toolkit?

Ideally, I'd like to have the ability to perform transformations on the polylines, rotating and translating them on the surface of the sphere (without having to do the spherical trig myself), and I have to be able to have features cross the "date line" and wrap-around intelligently, calculate great-circle distances (and forward/back azimuths), best-fit great circles, etc.

Thanks for any recommendations you might have,
Zane

Zane: Basemap can calculate great-circle distances (with forward/back azimuths). I'm not to clear on the types of transformations you need, but Basemap basically just does the forward and inverse transformations from map projection to geographic (lat/lon) coordinates. My guess is that it won't do the type of rotation and translation that you want to do.

-Jeff

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options
  
--
Jeffrey S. Whitaker Phone : (303)497-6313
NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449
325 Broadway Boulder, CO, USA 80305-3328