My vtk-8 C++ app reads GMT grid files that contain latitude/longitude (degrees) and elevation (meters) into a VtkPointArray. I would like to display the data in various map projections, including Universal Transverse Mercator (UTM). The vtkGeoTransform and VtkGeoProjection classes looks like they will do what I need, but I haven’t found any concrete examples that use them. Given my dataset where x and y are longitude-latitude, how exactly do I transform the x-y values to UTM easting and northing?
Some code details below - thanks for your help!
Here is code from my GmtGridReader class:
// Load points read from grid file
std::cerr << "GmtGridReader::RequestData() - load points" << std::endl;
for (unsigned row = 0; row < gmtGrid_->header->n_rows; row++) {
for (unsigned col = 0; col < gmtGrid_->header->n_columns; col++) {
// print debug info
// fprintf(stderr, "1) x[%d]: %.8f\n", col, gmtGrid_->x[col]);
unsigned dataIndex = GMT_Get_Index(gmtApi, gmtGrid_->header, row, col);
vtkIdType id = gridPoints_->InsertNextPoint(gmtGrid_->x[col],
gmtGrid_->y[row],
gmtGrid_->data[dataIndex]);
}
}
Here is code that builds the pipeline:
// The GmtGridReader outputs data as longitude/latitude/elevation
vtkSmartPointer<mb_system::GmtGridReader> reader =
vtkSmartPointer<mb_system::GmtGridReader>::New();
// Read the grid file.
reader->SetFileName ( filePath.c_str() );
reader->Update();
// Get elevation range for elevation colorizer...
float zMin, zMax;
reader->zBounds(&zMin, &zMax);
// Color data points based on z-value
vtkSmartPointer<vtkElevationFilter> elevationFilter =
vtkSmartPointer<vtkElevationFilter>::New();
elevationFilter->SetInputConnection(reader->GetOutputPort());
elevationFilter->SetLowPoint(0, 0, zMin);
elevationFilter->SetHighPoint(0, 0, zMax);
// Create renderer
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
// Create gridMapper
vtkSmartPointer<vtkPolyDataMapper> gridMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
gridMapper->SetInputConnection(elevationFilter->GetOutputPort());
So where and how exactly do I transform the longitude/latitude values to UTM (easting and northing) values?
Thanks!
Tom