Commit 664600c2 authored by Jeff Baumes's avatar Jeff Baumes

ENH: Adding a 2D geoview. Adding the geographic projection library libproj4

to Utilities. Updating the architecture of the geospatial views. All
multi-resolution sources are now subclasses of vtkGeoSource. Each source
has its own worker thread for fetching refined images or geometry.
On the 3D side, vtkGeoGlobeSource is an appropriate source for vtkGeoTerrain,
and vtkGeoAlignedImageSource is an appropriate source for
vtkGeoAlignedImageRepresentation. On the 2D side, vtkGeoProjectionSource is an
appropriate source for vtkGeoTerrain2D, and the image source is the same.
parent 9416c380
# Find LIBPROJ4 library and header file
# Sets
# LIBPROJ4_FOUND to 0 or 1 depending on the result
# LIBPROJ4_INCLUDE_DIR to directories required for using libproj4
# LIBPROJ4_LIBRARIES to libproj4 and any dependent libraries
# If LIBPROJ4_REQUIRED is defined, then a fatal error message will be generated if libproj4 is not found
if ( NOT LIBPROJ4_INCLUDE_DIR OR NOT LIBPROJ4_LIBRARIES OR NOT LIBPROJ4_FOUND )
if ( $ENV{LIBPROJ4_DIR} )
file( TO_CMAKE_PATH "$ENV{LIBPROJ4_DIR}" _LIBPROJ4_DIR )
endif ( $ENV{LIBPROJ4_DIR} )
find_library( LIBPROJ4_LIBRARIES
NAMES proj4 libproj4
PATHS
${_LIBPROJ4_DIR}/lib64
${CMAKE_INSTALL_PREFIX}/lib64
/usr/local/lib64
/usr/lib64
${_LIBPROJ4_DIR}
${_LIBPROJ4_DIR}/lib
${CMAKE_INSTALL_PREFIX}/bin
${CMAKE_INSTALL_PREFIX}/lib
/usr/local/lib
/usr/lib
NO_DEFAULT_PATH
)
find_path( LIBPROJ4_INCLUDE_DIR
NAMES lib_proj.h
PATHS
${_LIBPROJ4_DIR}
${_LIBPROJ4_DIR}/include
${CMAKE_INSTALL_PREFIX}/include
/usr/local/pgsql/include
/usr/local/include
/usr/include
/usr/include/postgresql
NO_DEFAULT_PATH
)
if ( NOT LIBPROJ4_INCLUDE_DIR OR NOT LIBPROJ4_LIBRARIES )
if ( LIBPROJ4_REQUIRED )
message( FATAL_ERROR "LIBPROJ4 is required. Set LIBPROJ4_DIR" )
endif ( LIBPROJ4_REQUIRED )
else ( NOT LIBPROJ4_INCLUDE_DIR OR NOT LIBPROJ4_LIBRARIES )
set( LIBPROJ4_FOUND 1 )
mark_as_advanced( LIBPROJ4_FOUND )
endif ( NOT LIBPROJ4_INCLUDE_DIR OR NOT LIBPROJ4_LIBRARIES )
endif ( NOT LIBPROJ4_INCLUDE_DIR OR NOT LIBPROJ4_LIBRARIES OR NOT LIBPROJ4_FOUND )
mark_as_advanced( FORCE LIBPROJ4_INCLUDE_DIR )
mark_as_advanced( FORCE LIBPROJ4_LIBRARIES )
......@@ -612,6 +612,7 @@ VTK_THIRD_PARTY_OPTION(TIFF tiff)
VTK_THIRD_PARTY_OPTION(EXPAT expat)
VTK_THIRD_PARTY_OPTION(FREETYPE freetype)
VTK_THIRD_PARTY_OPTION(LIBXML2 libxml2)
VTK_THIRD_PARTY_OPTION(LIBPROJ4 proj4)
#-----------------------------------------------------------------------------
# Configure OpenGL support.
......
......@@ -3,7 +3,7 @@ SET(UKIT GEOVIS)
SET(KIT_TCL_LIBS vtkWidgetsTCL vtkViewsTCL)
SET(KIT_PYTHON_LIBS vtkWidgetsPythonD vtkViewsPythonD)
SET(KIT_JAVA_LIBS vtkWidgetsJava vtkViewsJava)
SET(KIT_LIBS vtkWidgets vtkViews ${VTK_LIBXML2_LIBRARIES})
SET(KIT_LIBS vtkWidgets vtkViews ${VTK_LIBPROJ4_LIBRARIES})
SET( Kit_SRCS
vtkCompassRepresentation.cxx
......@@ -14,34 +14,38 @@ SET( Kit_SRCS
vtkGeoArcs.cxx
vtkGeoAssignCoordinates.cxx
vtkGeoCamera.cxx
vtkGeoComputeTextureCoordinates.cxx
vtkGeoEdgeStrategy.cxx
vtkGeoGlobeSource.cxx
vtkGeoGraphRepresentation.cxx
vtkGeoGraphRepresentation2D.cxx
vtkGeoGraticule.cxx
vtkGeoImageNode.cxx
vtkGeoInteractorStyle.cxx
vtkGeoLineRepresentation.cxx
vtkGeoMath.cxx
vtkGeoPatch.cxx
vtkGeoProjectionSource.cxx
vtkGeoProjection.cxx
vtkGeoRandomGraphSource.cxx
vtkGeoSampleArcs.cxx
vtkGeoSource.cxx
vtkGeoTreeNode.cxx
vtkGeoTerrain.cxx
vtkGeoTerrainGlobeSource.cxx
vtkGeoTerrain2D.cxx
vtkGeoTerrainNode.cxx
vtkGeoTerrainSource.cxx
vtkGeoTransform.cxx
vtkGeoView.cxx
vtkGeoView2D.cxx
vtkGlobeSource.cxx
)
SET_SOURCE_FILES_PROPERTIES(
vtkGeoPatch.cxx
vtkGeoSource.cxx
ABSTRACT
)
SET_SOURCE_FILES_PROPERTIES(
vtkGeoPatch.cxx
WRAP_EXCLUDE
)
#SET_SOURCE_FILES_PROPERTIES(
# WRAP_EXCLUDE
#)
SET(Kit_EXTRA_SRCS)
SET(Kit_EXTRA_CMDS)
......
......@@ -8,6 +8,9 @@ IF (VTK_USE_DISPLAY)
IF (VTK_DATA_ROOT)
# add tests that require data
SET(MyTests ${MyTests}
TestGeoGraticule.cxx
TestGeoProjection.cxx
TestGeoView2D.cxx
TestGeoView.cxx
)
ENDIF (VTK_DATA_ROOT)
......
#include "vtkGeoGraticule.h"
#include "vtkGeoProjection.h"
#include "vtkGeoTransform.h"
#include "vtkActor.h"
#include "vtkPNGWriter.h"
#include "vtkPolyDataWriter.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkTestUtilities.h"
#include "vtkTransformFilter.h"
#include "vtkXMLPolyDataReader.h"
#include "vtkWindowToImageFilter.h"
int TestGeoGraticule( int argc, char* argv[] )
{
int latLevel = argc > 1 ? atoi( argv[1] ) : 3;
int lngLevel = argc > 2 ? atoi( argv[2] ) : 3;
const char* fname = argc > 3 ? argv[3] : "graticule.vtk";
const char* pname = argc > 4 ? argv[4] : "rouss";
vtkGeoGraticule* ggr = vtkGeoGraticule::New();
vtkPolyDataWriter* wri = vtkPolyDataWriter::New();
vtkGeoTransform* xfm = vtkGeoTransform::New();
vtkGeoProjection* gcs = vtkGeoProjection::New();
vtkGeoProjection* pcs = vtkGeoProjection::New();
vtkTransformFilter* xff = vtkTransformFilter::New();
vtkXMLPolyDataReader* pdr = vtkXMLPolyDataReader::New();
vtkTransformFilter* xf2 = vtkTransformFilter::New();
vtkPolyDataWriter* wr2 = vtkPolyDataWriter::New();
ggr->SetGeometryType( vtkGeoGraticule::POLYLINES | vtkGeoGraticule::QUADRILATERALS );
ggr->SetLatitudeLevel( latLevel );
ggr->SetLongitudeLevel( lngLevel );
ggr->SetLongitudeBounds( -270, 90 );
ggr->SetLatitudeBounds( -90, 90 );
// gcs defaults to latlong.
pcs->SetName( pname );
pcs->SetCentralMeridian( -90. );
xfm->SetSourceProjection( gcs );
xfm->SetDestinationProjection( pcs );
xff->SetInputConnection( ggr->GetOutputPort() );
xff->SetTransform( xfm );
wri->SetInputConnection( xff->GetOutputPort() );
wri->SetFileName( fname );
wri->Write();
char* input_file = vtkTestUtilities::ExpandDataFileName(argc, argv, "/Data/political.vtp");
pdr->SetFileName(input_file);
xf2->SetTransform( xfm );
xf2->SetInputConnection( pdr->GetOutputPort() );
wr2->SetInputConnection( xf2->GetOutputPort() );
wr2->SetFileName( "political.vtk" );
wr2->Write();
ggr->Delete();
wri->Delete();
xfm->Delete();
xff->Delete();
gcs->Delete();
pcs->Delete();
pdr->Delete();
xf2->Delete();
wr2->Delete();
delete [] input_file;
return 0;
};
#include "vtkGeoProjection.h"
int TestGeoProjection( int argc, char* argv[] )
{
const char* projName = argc > 1 ? argv[1] : "rouss";
int np = vtkGeoProjection::GetNumberOfProjections();
cout << "Supported projections:\n";
for ( int i = 0; i < np; ++ i )
{
cout << "Projection: " << vtkGeoProjection::GetProjectionName( i ) << "\n";
cout << "\t" << vtkGeoProjection::GetProjectionDescription( i ) << "\n";
}
cout << "-------\n";
vtkGeoProjection* proj = vtkGeoProjection::New();
proj->SetName( projName );
cout << projName << " is " << proj->GetDescription() << "\n";
proj->Delete();
return 0;
}
......@@ -12,19 +12,37 @@
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
#include "vtkBMPReader.h"
#include "vtkCamera.h"
#include "vtkGeoAlignedImageRepresentation.h"
#include "vtkGeoAlignedImageSource.h"
#include "vtkGeoGraphRepresentation.h"
#include "vtkGeoGraphRepresentation2D.h"
#include "vtkGeoProjection.h"
#include "vtkGeoProjectionSource.h"
#include "vtkGeoRandomGraphSource.h"
#include "vtkGeoTerrainNode.h"
#include "vtkGeoTerrain2D.h"
#include "vtkGeoTransform.h"
#include "vtkGeoView.h"
#include "vtkGeoView2D.h"
#include "vtkGraphLayoutView.h"
#include "vtkJPEGReader.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSmartPointer.h"
#include "vtkTestUtilities.h"
#include "vtkTIFFReader.h"
#include "vtkViewTheme.h"
#include "vtkViewUpdater.h"
#define VTK_CREATE(type,name) \
vtkSmartPointer<type> name = vtkSmartPointer<type>::New();
......@@ -38,22 +56,136 @@ int TestGeoView(int argc, char* argv[])
win->SetSize(400,400);
char* fname = vtkTestUtilities::ExpandDataFileName(
argc, argv, "Data/NE2_ps_bath_small.jpg");
view->AddDefaultImageRepresentation(fname);
argc, argv, "Data/masonry-wide.jpg");
//char* fname = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/Clouds.tif");
VTK_CREATE(vtkJPEGReader, reader);
reader->SetFileName(fname);
reader->Update();
view->AddDefaultImageRepresentation(reader->GetOutput());
// Add image representation
char* fname2 = vtkTestUtilities::ExpandDataFileName(
argc, argv, "Data/NE2_ps_bath_small.jpg");
//char* fname2 = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/world.topo.bathy.200407.3x21600x10800.jpg");
//char* fname2 = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/world.topo.bathy.200407.3x10000x5000.jpg");
VTK_CREATE(vtkJPEGReader, reader2);
reader2->SetFileName(fname2);
reader2->Update();
vtkSmartPointer<vtkGeoAlignedImageSource> imageSource =
vtkSmartPointer<vtkGeoAlignedImageSource>::New();
imageSource->SetImage(reader2->GetOutput());
vtkSmartPointer<vtkGeoAlignedImageRepresentation> rep =
vtkSmartPointer<vtkGeoAlignedImageRepresentation>::New();
rep->SetSource(imageSource);
view->AddRepresentation(rep);
vtkSmartPointer<vtkGeoRandomGraphSource> source =
vtkSmartPointer<vtkGeoRandomGraphSource>::New();
source->SetNumberOfVertices(100);
source->StartWithTreeOn();
source->SetNumberOfEdges(0);
vtkSmartPointer<vtkGeoGraphRepresentation> graphRep =
vtkSmartPointer<vtkGeoGraphRepresentation>::New();
graphRep->SetInputConnection(source->GetOutputPort());
view->AddRepresentation(graphRep);
view->Update();
int retVal = vtkRegressionTestImage(win);
if (retVal == vtkRegressionTester::DO_INTERACTOR)
{
// If we are interactive, make some other views to link with.
// Create a 2D geo view.
int projIndex = 40;
vtkSmartPointer<vtkRenderWindow> win2D =
vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkGeoView2D> view2D =
vtkSmartPointer<vtkGeoView2D>::New();
view2D->SetupRenderWindow(win2D);
win2D->SetSize(400,400);
vtkSmartPointer<vtkGeoAlignedImageSource> imageSource2D =
vtkSmartPointer<vtkGeoAlignedImageSource>::New();
imageSource2D->SetImage(reader2->GetOutput());
vtkSmartPointer<vtkGeoAlignedImageRepresentation> rep2D =
vtkSmartPointer<vtkGeoAlignedImageRepresentation>::New();
rep2D->SetSource(imageSource2D);
view2D->AddRepresentation(rep2D);
vtkSmartPointer<vtkGeoProjectionSource> grat =
vtkSmartPointer<vtkGeoProjectionSource>::New();
grat->SetProjection(projIndex);
// Set up the viewport
vtkSmartPointer<vtkGeoTerrainNode> root = vtkSmartPointer<vtkGeoTerrainNode>::New();
grat->FetchRoot(root);
double bounds[4];
root->GetProjectionBounds(bounds);
view2D->GetRenderer()->GetActiveCamera()->SetParallelScale((bounds[3] - bounds[2]) / 2.0);
vtkSmartPointer<vtkGeoTerrain2D> surf = vtkSmartPointer<vtkGeoTerrain2D>::New();
surf->SetSource(grat);
view2D->SetSurface(surf);
vtkSmartPointer<vtkGeoGraphRepresentation2D> graphRep2D =
vtkSmartPointer<vtkGeoGraphRepresentation2D>::New();
graphRep2D->SetInputConnection(source->GetOutputPort());
vtkSmartPointer<vtkGeoProjection> projection =
vtkSmartPointer<vtkGeoProjection>::New();
projection->SetName(projection->GetProjectionName(projIndex));
vtkSmartPointer<vtkGeoTransform> transform =
vtkSmartPointer<vtkGeoTransform>::New();
transform->SetDestinationProjection(projection);
graphRep2D->SetTransform(transform);
view2D->AddRepresentation(graphRep2D);
// Set up a graph layout view
vtkSmartPointer<vtkGraphLayoutView> graphView =
vtkSmartPointer<vtkGraphLayoutView>::New();
vtkSmartPointer<vtkDataRepresentation> graphRep2 =
vtkSmartPointer<vtkDataRepresentation>::New();
graphRep2->SetInputConnection(source->GetOutputPort());
graphView->AddRepresentation(graphRep2);
vtkSmartPointer<vtkRenderWindow> graphWin =
vtkSmartPointer<vtkRenderWindow>::New();
graphWin->SetSize(400, 400);
graphView->SetupRenderWindow(graphWin);
graphRep2->SetSelectionLink(graphRep->GetSelectionLink());
graphRep2D->SetSelectionLink(graphRep->GetSelectionLink());
vtkSmartPointer<vtkViewUpdater> updater =
vtkSmartPointer<vtkViewUpdater>::New();
updater->AddView(view);
updater->AddView(view2D);
updater->AddView(graphView);
graphView->GetRenderer()->ResetCamera();
graphView->Update();
// Make all the themes the same.
vtkSmartPointer<vtkViewTheme> theme;
theme.TakeReference(vtkViewTheme::CreateMellowTheme());
theme->SetSelectedCellColor(1.0, 0.0, 1.0);
theme->SetSelectedPointColor(1.0, 0.0, 1.0);
graphView->ApplyViewTheme(theme);
view->ApplyViewTheme(theme);
graphRep->ApplyViewTheme(theme);
graphRep2D->ApplyViewTheme(theme);
// Interact with data.
win->GetInteractor()->Initialize();
win->GetInteractor()->Start();
retVal = vtkRegressionTester::PASSED;
}
delete [] fname;
delete [] fname2;
return !retVal;
}
/*=========================================================================
Program: Visualization Toolkit
Module: TestGeoView2D.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
// .SECTION Description
#include "vtkCamera.h"
#include "vtkGeoAlignedImageSource.h"
#include "vtkGeoAlignedImageRepresentation.h"
#include "vtkGeoProjectionSource.h"
#include "vtkGeoTerrain2D.h"
#include "vtkGeoTerrainNode.h"
#include "vtkGeoView2D.h"
#include "vtkJPEGReader.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSmartPointer.h"
#include "vtkStdString.h"
#include "vtkTestUtilities.h"
#include "vtkTIFFReader.h"
#include <vtksys/ios/sstream>
int TestGeoView2D(int argc, char* argv[])
{
int proj = 40;
char* fname = vtkTestUtilities::ExpandDataFileName(
argc, argv, "Data/NE2_ps_bath_small.jpg");
//char* fname = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/world.topo.bathy.200407.3x21600x10800.jpg");
//char* fname = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/world.topo.bathy.200407.3x10000x5000.jpg");
vtkStdString filename = fname;
double locationTol = 5.0;
double textureTol = 1.0;
for (int a = 1; a < argc; a++)
{
if (!strcmp(argv[a], "-p"))
{
++a;
proj = atoi(argv[a]);
continue;
}
if (!strcmp(argv[a], "-f"))
{
++a;
filename = argv[a];
continue;
}
if (!strcmp(argv[a], "-lt"))
{
++a;
locationTol = atof(argv[a]);
continue;
}
if (!strcmp(argv[a], "-tt"))
{
++a;
textureTol = atof(argv[a]);
continue;
}
if (!strcmp(argv[a], "-I"))
{
continue;
}
if (!strcmp(argv[a], "-D") ||
!strcmp(argv[a], "-T") ||
!strcmp(argv[a], "-V"))
{
++a;
continue;
}
cerr
<< "\nUsage:\n"
<< " -p proj - Set projection ID proj (default 5)\n"
<< " -f path - Set the hi-res image file path\n"
<< " -lt tol - Set geometry tolerance in pixels (default 5.0)\n"
<< " -tt tol - Set texture tolerance in pixels (default 1.0)\n";
return 0;
}
// Create the view
vtkSmartPointer<vtkRenderWindow> win = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkGeoView2D> view = vtkSmartPointer<vtkGeoView2D>::New();
view->SetupRenderWindow(win);
// Create the sources
vtkSmartPointer<vtkGeoAlignedImageSource> imageSource =
vtkSmartPointer<vtkGeoAlignedImageSource>::New();
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName(filename.c_str());
reader->Update();
imageSource->SetImage(reader->GetOutput());
vtkSmartPointer<vtkGeoAlignedImageRepresentation> rep =
vtkSmartPointer<vtkGeoAlignedImageRepresentation>::New();
rep->SetSource(imageSource);
view->AddRepresentation(rep);
// Add image representation
//char* fname2 = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/NE2_ps_bath_small.jpg");
//char* fname2 = vtkTestUtilities::ExpandDataFileName(
// argc, argv, "Data/world.topo.bathy.200407.3x21600x10800.jpg");
char* fname2 = vtkTestUtilities::ExpandDataFileName(
argc, argv, "Data/masonry-wide.jpg");
vtkSmartPointer<vtkJPEGReader> reader2 =
vtkSmartPointer<vtkJPEGReader>::New();
reader2->SetFileName(fname2);
reader2->Update();
vtkSmartPointer<vtkGeoAlignedImageSource> imageSource2 =
vtkSmartPointer<vtkGeoAlignedImageSource>::New();
imageSource2->SetImage(reader2->GetOutput());
vtkSmartPointer<vtkGeoAlignedImageRepresentation> rep2 =
vtkSmartPointer<vtkGeoAlignedImageRepresentation>::New();
rep2->SetSource(imageSource2);
view->AddRepresentation(rep2);
win->SetSize(600, 600);
vtkSmartPointer<vtkGeoProjectionSource> grat
= vtkSmartPointer<vtkGeoProjectionSource>::New();
grat->SetProjection(proj);
vtkGeoSource* gratSource = grat;
// Set up the viewport
vtkSmartPointer<vtkGeoTerrainNode> root = vtkSmartPointer<vtkGeoTerrainNode>::New();
gratSource->FetchRoot(root);
double bounds[4];
root->GetProjectionBounds(bounds);
view->GetRenderer()->GetActiveCamera()->SetParallelScale((bounds[3] - bounds[2]) / 2.0);
vtkSmartPointer<vtkGeoTerrain2D> surf = vtkSmartPointer<vtkGeoTerrain2D>::New();
surf->SetSource(gratSource);
view->SetSurface(surf);
view->Update();
int retVal = vtkRegressionTestImage(win);
if (retVal == vtkRegressionTester::DO_INTERACTOR)
{
win->GetInteractor()->Initialize();
win->GetInteractor()->Start();
}
grat->ShutDown();
imageSource->ShutDown();
delete [] fname;
delete [] fname2;
return !retVal;
}
This diff is collapsed.
......@@ -12,162 +12,74 @@
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
// .NAME vtkGeoAlignedImageRepresentation - Earth with a background image.
// .SECTION vtkGeoAlignedImageRepresentation renders the terrain with a
// background image. It interfaces with the vtkGeoTerrain
// and vtkGeoImageCache to get the data it requires to make the model.
// This representation assumes that the terrain and image caches share the
// same tree structure.
// Eventually, socket activity will indicate that new data is available.
// For now, I am supplying a non blocking method that checks for new data.
// .SECTION See Also
#ifndef __vtkGeoAlignedImageRepresentation_h
#define __vtkGeoAlignedImageRepresentation_h
// .NAME vtkGeoAlignedImageRepresentation - A multi-resolution image tree
//
// .SECTION Description
// vtkGeoAlignedImageRepresentation represents a high resolution image
// over the globle. It has an associated vtkGeoSource which is responsible
// for fetching new data. This class keeps the fetched data in a quad-tree
// structure organized by latitude and longitude.
#include "vtkDataRepresentation.h"