Re: orthophoto over dem

Hi Bill,

....

> > In the code below I read the image and gain a flatField, which is
> > already read in the wrong position (the imageposition 0-2000,0-2000).
> > I do a resampling which obviously does not what I need, but I assume it
> > is there that something should happen.
> >
> >        Set domainSet2 = new Linear2DSet(domain, 1632840.5, 1634840.5,
> >                 (int) (1634840.5 - 1632840.5), 5097079.5, 5099079.5,
> >                 (int) (5099079.5 - 5097079.5));
> >         imageField.resample(domainSet2);
> 
> This should be:
> 
>         imageField = imageField.resample(domainSet2);
> 
> Because the domain RealTupleType for imageField comes
> from DefaultFamily.open(), it will be easier to
> resample demField to domainSet2 than to resample
> imageField to the domain Set of demField. To do this,
> construct domainTuple (for demField) using:
> 
>   RealTupleType domainTuple
>     new RealTupleType(easting, northing, coord_sys, null);
> 
> where coord_sys is an instance of your new CoordinateSystem
> extension class that defines the mappings of
> (easting, northing) to and from the reference (x, y)
> (the coordinates of imageField).

I still miss something.
The dem is in the right coordinate system, whereas the image is not
referenced in the geographic space. So I would expect to do the inverse
of what you are telling me, since I want to map the image into the dem
space and not the dem space into the image that is placed in the origin 
of its system.

I try explain better throught some code how I tried to follow you
suggestions:

I first read the dem data and create the types for it:

        /*
         * get the elevation map
         */
        easting = RealType.getRealType("easting", SI.meter, null);
        northing = RealType.getRealType("northing", SI.meter, null);
        
The image is in 1 meter resolution. The GeoToImageCoordinateSystem
contains simply the ubtraction or addition of the west and south to put the 
image
in the right portion of world (and back).        

        GeoToImageCoordinateSystem iCord = new GeoToImageCoordinateSystem(
        RealTupleType.SpatialCartesian2DTuple);
        RealTupleType domainTuple = new RealTupleType(easting, northing, iCord, 
null);
        elevation = RealType.getRealType("elevation", SI.meter, null);
        FunctionType funcDomainElevation = new FunctionType(domainTuple,
                elevation);
        Set demDomainSet = new Linear2DSet(domainTuple, dataWindow.getWest(),
                dataWindow.getEast(), NCOLS, dataWindow.getSouth(), dataWindow
                        .getNorth(), NROWS);
        .
        .
        get the samples from a matrix or wherever
        .
        .
                        
        FlatField demField = new FlatField(funcDomainElevation, demDomainSet);
        demField.setSamples(flatSamples);
        
        eastingMap = new ScalarMap(easting, Display.XAxis);
        northingMap = new ScalarMap(northing, Display.YAxis);
        elevationMap = new ScalarMap(elevation, Display.ZAxis);

Passing that flatfield to the display at this point, makes it show up properly.
Now I step over to the image:

        /*
         * get the jpg foto file
         */
        FlatField imageField = null;
        try {
            imageField = (FlatField) new DefaultFamily("dflt").open(new URL(
                    "file:/home/moovida/microsuap/059130_2_1.jpg"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // compute ScalarMaps from type components
        FunctionType functionType = (FunctionType) imageField.getType();
        RealTupleType domain = functionType.getDomain();
        RealTupleType range = (RealTupleType) functionType.getRange();
  
here I get the set to which the dem filed should be resampled:

        Set imageDomainSet = imageField.getDomainSet();

        x = (RealType) domain.getComponent(0);
        y = (RealType) domain.getComponent(1);

        redType = (RealType) range.getComponent(0);
        greenType = (RealType) range.getComponent(1);
        blueType = (RealType) range.getComponent(2);

        rowMap = new ScalarMap(x, Display.XAxis);
        colMap = new ScalarMap(y, Display.YAxis);
        redMap = new ScalarMap(redType, Display.Red);
        greenMap = new ScalarMap(greenType, Display.Green);
        blueMap = new ScalarMap(blueType, Display.Blue);

        display = new DisplayImplJ3D("display");

        // The display
        display.addMap(rowMap);
        display.addMap(colMap);
        display.addMap(elevationMap);
        display.addMap(redMap);
        display.addMap(greenMap);
        display.addMap(blueMap);


now create the merged flatfield

        Field newDemfield = demField.resample(imageDomainSet);

        Field endField = FieldImpl.combine(new Field[] { imageField,
                newDemField });

        DataReferenceImpl dataReference = new DataReferenceImpl("dataref");
        dataReference.setData(demField);
        display.addReference(dataReference);


This doesn't show up anything. I thought the resample would have used
the adapted CoordinateSystem for resampling, but it never passes through
the toReference and fromReference methods of the
GeoToImageCoordinateSystem.

I'm clueless...
Andrea


==============================================================================
To unsubscribe visad, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
==============================================================================


  • 2006 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: