Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [udig-devel] Select Feature - Problem with PickTool code example

Jesse has the right answer; I phrase the three frames of reference
differently (so if you are reading the tutorials on render you will
see this terminology).
- screen: measured in pixels
- world: measured according to the viewport model coordinate reference
system (this is what you can change when change your map crs through
the ui)
- data: measured according to the data coordinate reference system
(this is noted when the data is collected).

So in my code you will see worldToData transforms.

Cheers,
Jody

On Tue, Apr 7, 2009 at 5:27 PM, Rodolphe QUEMERAIS
<rodolphe.quemerais@xxxxxxxxx> wrote:
> Thanks a lot. This works fine !!!
>
> But I didn't use any MathTransfrom. Actually, I picked 2 points :
>           Coordinate world = getContext().pixelToWorld(e.x-1, e.y-1);
>           Coordinate world2 = getContext().pixelToWorld(e.x+1, e.y+1);
> and created to envelope :
> Envelope env = new Envelope(world, world2);
> and the selection worked fine.
>
> My second question why do we have to do any operation with Mathtransform as
> getContext().pixelToWorld(...) do the transformation.
> Dis I miss something ?
>
> Rodolphe
>
> 2009/4/7 Jody Garnett <jody.garnett@xxxxxxxxx>
>>
>> Good afternoon.
>>
>> In your code example you are making a very small envelope (ie
>> rectangle) with 0 width and 0 height. The BBOX filter defined by the
>> OGC Filter specification is not really going to find anything inside
>> this small rectangle.
>>
>> I usually try and make a rectangle the size of 2 pixels.
>>
>> Also note that source.getFeatures() returns everything; you want to
>> use source.getFeatures( filter ) to process your query.
>>
>> Jody
>>
>> On Tue, Apr 7, 2009 at 1:38 AM, Rodolphe QUEMERAIS
>> <rodolphe.quemerais@xxxxxxxxx> wrote:
>> > Hi all,
>> > I'm starting to study uDig possibilities and achieve to do manythings
>> > now
>> > (create new layer, add features to a layer,...) programatically. My next
>> > step is to edit a feature after selected it on screen but I'm unable to
>> > select one.
>> > I've tested the PickTool code from uDig examples but got no result.
>> > I've traced results with some println.. The coordinates are good, and I
>> > do
>> > have the number of features count but nothing is selected.
>> >
>> > This is the code taken from uDig examples and the println I added to see
>> > if
>> > datas are ok.
>> > Help would be welcome.
>> >
>> >   @Override
>> >         protected void onMouseReleased( MapMouseEvent e ) {
>> >             try{
>> >
>> >                 // convert the mouse click into map coordinates.  This
>> > is
>> > the
>> >                 // CRS obtained from the ViewportModel
>> >                 Coordinate world = getContext().pixelToWorld(e.x, e.y);
>> >
>> >                 // now we must transform the coordinate to the CRS of
>> > the
>> > layer
>> >                 ILayer layer = getContext().getSelectedLayer();
>> >                 MathTransform tranform = layer.mapToLayerTransform();
>> >
>> >                 double[] from=new double[]{world.x, world.y};
>> >                 double[] to = new double[2];
>> >                 tranform.transform(from, 0, to, 0, 1);
>> > //I check if coordinates are ok
>> > System.out.println(to[0]);
>> > System.out.println(to[1]);
>> >                 // Construct a envelope from the transformed coordinate
>> >                 Envelope env = new Envelope(new
>> > Coordinate(to[0],to[1]));
>> >
>> >                 // Query the feature source to get the features that
>> > intersect with that coordinate
>> >                 FeatureSource source =
>> > layer.getResource(FeatureSource.class,
>> > ProgressManager.instance().get());
>> >                 FeatureCollection featuresFiltre =
>> > source.getFeatures(layer.createBBoxFilter(env,
>> > ProgressManager.instance().get()));
>> >                 FeatureCollection features = source.getFeatures();
>> > //show the number of features on the layer and the selected features
>> > System.out.println("Selected features on Layer : "+features.size());
>> > System.out.println("Selected features : "+featuresFiltre.size());
>> >                 // do something smart, notify user probably.
>> >             } catch (Throwable t) {
>> > System.out.println("Nothing !!!");
>> >             }
>> >
>> >
>> >
>> > _______________________________________________
>> > User-friendly Desktop Internet GIS (uDig)
>> > http://udig.refractions.net
>> > http://lists.refractions.net/mailman/listinfo/udig-devel
>> >
>> >
>> _______________________________________________
>> User-friendly Desktop Internet GIS (uDig)
>> http://udig.refractions.net
>> http://lists.refractions.net/mailman/listinfo/udig-devel
>
>
> _______________________________________________
> User-friendly Desktop Internet GIS (uDig)
> http://udig.refractions.net
> http://lists.refractions.net/mailman/listinfo/udig-devel
>
>


Back to the top