-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Jesse
Eichar
Sent: 20 March 2006 17:47
To: User-friendly Desktop Internet GIS
Subject: Re: [udig-devel] Shapefiles
On 20-Mar-06, at 6:08 AM, M.S.Bachler wrote:
> Hi!
>
> I feel I have finally made a break through in understanding some of
> the
> uDig code I have been writing.
> This is what I think each bit of my code for creating a new
> shapefile is
> effectively doing, when equated to databases terminology:
>
> // LIKE: CREATING A NEW DATABASE IndexedShapefileDataStoreFactory fac
> = new IndexedShapefileDataStoreFactory();
> String sShapeFile = file2.getAbsolutePath();
> ShapefileDataStore ds = (ShapefileDataStore) fac.createDataStore(new
> URL("file://"+sShapeFile));
>
> // LIKE: CREATING A DATABASE TABLE SCHEMA
> // FIELD NAME = "the_icon"
> // DATAYPE FOR FIELD = Point.class
> AttributeType geomAttr =
> AttributeTypeFactory.newAttributeType("the_icon", Point.class);
> AttributeType linkAttr =
> AttributeTypeFactory.newAttributeType("the_link", String.class);
>
>
> // LIKE: CREATING THE NEW TABLE
> // TABLE SCHEMA, TABLE NAME
> FeatureType featureType = FeatureTypeBuilder.newFeatureType(new
> AttributeType[] {geomAttr, linkAttr}, sBaseLayerName+"-"+sFileName);
>
>
> // LIKE: CREATING THE DATA FOR A NEW RECORD IN THE TABLE
>
> GeometryFactory geomFactory = new GeometryFactory(); Coordinate coord
> = new Coordinate(event.x, event.y); Point point =
> geomFactory.createPoint(coord);
>
> String sLink = "comp_test";
>
> // LIKE: ADDING THE A RECORD TO THE TABLE
> Feature newRecord = featureType.create(new Object[] {point, sLink},
> "the_recordID");
>
> // LIKE: ADDING THE TABLE TO THE DATABASE
> ds.createSchema( featureType);
>
>
> Question 1: Can anyone confirm that I have understood this right
> process?
Sounds like you are on the right track
>
> Question 2: I have declared my feature type schema to have a second
> attribute to hold a string. But at the time I create the Feature, I
> don't know the value of this field yet.
> I assume I can programmatically add this data later? (From Vitali's
> email I was a little concerned).
You can change/update the attributes any time. You just can't change
the FeatureType definition like you can a table in a database.
>
> Question 3: Is adding a new point to an existing layer (of the type
> described above), just involve create a new record in the table? In
> other words doing this line again with an existing FeatureType for the
> Layer:
>
> "Feature newRecord = featureType.create(new Object[] {point, sLink},
> "the_recordID");"
>
Yup
> Thanks
>
> Michelle
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse
> Eichar
> Sent: 16 March 2006 18:10
> To: User-friendly Desktop Internet GIS
> Subject: Re: [udig-devel] Shapefiles
>
>
>
> On 16-Mar-06, at 4:59 AM, M.S.Bachler wrote:
>
>> Hi!
>>
>> I know can get the x,y which is great. Thanks.
>>
>> I have had a first attempt at creating a shapefile and adding a new
>> layer connecting to the shape file, for the first time you drop a
>> specific icon on a map (subsequent times you add it to an existing
>> layer
>> - which is the next step).
>>
>> I have pieced together code from various emails but still think I
>> have
>
>> not really got a complete picture of what I am doing. The code I
>> have,
>
>> creates a shape file (I can see the files are there), it also adds a
>> layer to the map (I can see the layer in the list), but it has an
>> error
>> - 'Connection to Resource Failed'.
>> I am also not sure if the Point code is right?
>>
>> Here is my code: Any thoughts anyone about what I am doing wrong? (or
>> how I could simplify it?)
>>
>> try {
>> IndexedShapefileDataStoreFactory fac = new
>> IndexedShapefileDataStoreFactory();
>> File file2 = new
>> File("Ecosensus"+EcosensusPlugin.sFS
>> +"Shapefiles"+EcosensusPlugin.sFS+sF
>> ileName+".shp");
>> String sShapeFile = file2.getAbsolutePath();
>> ShapefileDataStore ds = (ShapefileDataStore)
> fac.createDataStore(new
>> URL("file://"+sShapeFile));
>
>> try {
>> AttributeType geomAttr =
>> AttributeTypeFactory.newAttributeType("the_geom", Point.class);
>> FeatureType featureType =
> FeatureTypeBuilder.newFeatureType(new
>> AttributeType[] {geomAttr}, "icon");
>>
>> GeometryFactory geomFactory = new GeometryFactory();
>> Coordinate coord = new Coordinate(event.x, event.y);
>> Point point = geomFactory.createPoint(coord);
>> Feature theIcon = featureType.create(new Object[]
>> {point}, "myicon");
>>
>> ds.createSchema( featureType );
>>
>> List<IService> services =
>> CatalogPlugin.getDefault().getServiceFactory().acquire(new
>> URL("file://"+sShapeFile));
>> IService service = services.get(0);
>>
>> List resources = service.members(monitor);
>> IGeoResource resource = (IGeoResource)resources.get(0);
>>
> I think the problem is here. the acquire method is tricky. It
> creates a service and georesource but does not necessarily add it to
> the catalog. Once you have the service make sure you add it to the
> catalog:
>
> CatalogPlugin.getDefault().getLocalCatalog().add(service);
>
>> System.out.println("resource type =
>> "+resource.getClass().getName());
>>
>>
>> Layer newLayer = factory.createLayer(resource);
>> newLayer.setName(sFileName);
>> map.sendCommandASync( (new AddLayerCommand(newLayer)) );
>>
>> DrawCommandFactory factory2 =
> DrawCommandFactory.getInstance();
>> DrawFeatureCommand cmd =
factory2.createDrawFeatureCommand(theIcon,
>> crs);
>> map.sendCommandASync(cmd);
>>
>>
>> } catch (IllegalAttributeException e) {
>> System.out.println("IllegalAttributeException");
>> e.printStackTrace();
>> } catch(SchemaException se) {
>> System.out.println("SchemaException");
>> se.printStackTrace();
>> }
>>
>> } catch (IOException e) {
>> e.printStackTrace();
>> }
>>
>> Michelle
>>
>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse
>> Eichar
>> Sent: 14 March 2006 20:30
>> To: User-friendly Desktop Internet GIS
>> Subject: Re: [udig-devel] Shapefiles
>>
>>
>> Here's the interface (I added some comments today as well :P):
>>
>> /**
>> *
>> * Defines the behaviour when a drag and drop event occurs. The
>> extension declaration combined with the accepts method
>> * determines whether the Action will be ran for a given drag/drop
>> event.
>> *
>> * @author jdeolive
>> * @since 1.0.0
>> */
>> public abstract class IDropAction {
>>
>> public static final String XPID =
>> "net.refractions.udig.ui.dropAction"; //$NON-NLS-1$
>>
>> /** the extension info **/
>> IConfigurationElement element;
>>
>> private Object destination;
>>
>> private Object data;
>>
>> private DropTargetEvent event;
>>
>> private int location;
>>
>> /**
>> * Returns the Configuration element that definates the
>> action in
>
>> the extension declaration.
>> *
>> * @return the Configuration element that definates the
>> action in
>
>> the extension declaration.
>> */
>> public IConfigurationElement getElement() {
>> return element;
>> }
>>
>> /**
>> * Returns the name of the action.
>> *
>> * @return Returns the name of the action.
>> */
>> public String getName() {
>> if (element == null)
>> return ""; //$NON-NLS-1$
>> return element.getAttribute("name"); //$NON-NLS-1$
>> }
>>
>> /**
>> * Called if the action seems to be a good candidate for
>> handling
>
>> the drop event.
>> *
>> * @return true if the action this it should handle the drop
>> event.
>> */
>> public abstract boolean accept();
>>
>> /**
>> * Performs the drop action.
>> *
>> * @param monitor a progress monitor for showing the progress of
>> the current event.
>> */
>> public abstract void perform(IProgressMonitor monitor);
>>
>> /**
>> * Returns the dropped data.
>> *
>> * @return the dropped data.
>> */
>> public Object getData() {
>> return data;
>> }
>>
>> /**
>> * Returns the object that the data was dropped on.
>> *
>> * @return the object that the data was dropped on.
>> */
>> public Object getDestination() {
>> return destination;
>> }
>>
>> /**
>> * Called by framework to initialize the action.
>> *
>> * @param element2 the extension configuration element
>> * @param event2 the drop event.
>> * @param destination2 the object that the data was dropped on.
>> * @param data2 the data that was dropped.
>> */
>> public void init( IConfigurationElement element2,
>> DropTargetEvent
>
>> event2, int location2,
>> Object destination2, Object data2 ) {
>> this.element=element2;
>> this.event=event2;
>> this.location=location2;
>> this.destination=destination2;
>> this.data=data2;
>> }
>>
>> /**
>> * The drop event.
>> * @return Returns the drop event.
>> */
>> public DropTargetEvent getEvent() {
>> return event;
>> }
>>
>> /**
>> * This does not always make sense for the drop event. But in
>> the case that the component is a jface viewer then this method will
>> indicate the
>> * location where the drop is taking place (before, on or after
>> the destination object).
>> *
>> * @see ViewerDropAdapter#getCurrentLocation()
>> *
>> * @return If the component is not a viewer this will always
>> return [EMAIL PROTECTED] ViewerDropAdapter#LOCATION_ON} otherwise it will be
>> one
>> of the LOCATION_*
>> * values.
>> */
>> public int getViewerLocation() {
>> return location;
>> }
>>
>> }
>>
>> Jesse
>>
>>
>> On 14-Mar-06, at 12:22 PM, M.S.Bachler wrote:
>>
>>> Hi!
>>>
>>> That's great.
>>> (I thought it was just me being really thick, and not spotting
>>> how to
>
>>> get the x,y).
>>>
>>> Thanks for adding these changes.
>>>
>>> I still can't download the source code at the moment - we do use a
>>> proxy and I have a feeling it must be blocking some of the command
>>> Subversion needs - I will see IT tomorrow about it.
>>>
>>> As I can't get to the source code - are there any javadocs on these
>>> changes so I know what methods/variables are now available.
>>>
>>> Thanks
>>>
>>>
>>> Michelle
>>>
>>> -----Original Message-----
>>> From: [EMAIL PROTECTED]
>>> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse
>>> Eichar
>>> Sent: 14 March 2006 19:08
>>> To: User-friendly Desktop Internet GIS
>>> Subject: Re: [udig-devel] Shapefiles
>>>
>>>
>>> Ok so a change of plans.
>>>
>>> I've changed the API slightly. Shouldn't bother you too much, all
>>> the
>>
>>> information is still there in the IDropAction class, now I've added
>>> the getEvent() method to the IDropAction class. It has the x,y
>>> location of the event.
>>>
>>> I think I've cleaned things up a little so you shouldn't have to
>>> worry
>>
>>> about any other classes besides the IDropAction (before the
>>> UDIGDropHandler was accessible from the IDropAction) I've changed
>>> that but made sure that all the information is still available in
>>> the
>
>>> IDropAction.
>>>
>>>
>>> Jesse
>>>
>>> On 14-Mar-06, at 9:33 AM, Jesse Eichar wrote:
>>>
>>>> Truthfully this is a good question. I think you've identified
>>>> another short coming of this API. I am going to make 3 changes to
>>>> UDIGDropHandler.
>>>>
>>>> 1. I'm going to change getLocation to return a Point which will be
>>>> the x,y coordinates of the drop event relative to the component
>>>> that
>
>>>> the component is dropped on. 2. I'm going to add the method
>>>> getViewerLocation() that will return ON, BEFORE and AFTER
>>>> locations.
>>
>>>> (That is what getLocation() currently does)
>>>> 3. I'm going to add a method isViewer() so you can determine if
>>>> the
>
>>>> control is a viewer and if you should use getViewerLocation() or
>>>> getLocation().
>>>>
>>>> You'll have to download tonights nightly build.
>>>>
>>>> (Sorry for the hard time you are having but DND has been a real
>>>> headache for me to figure out, never mind do right)
>>>>
>>>> Jesse
>>>>
>>>> On 14-Mar-06, at 2:19 AM, M.S.Bachler wrote:
>>>>
>>>>> Hi
>>>>>
>>>>> Sorry about yesterdays rant.
>>>>>
>>>>> If you have not lost all patients with me, I would really
>>>>> appreciate
>>
>>>>> it if anyone could tell me how I get the x, y coordinates of the
>>>>> drop from my IDropAction class.
>>>>>
>>>>> Thanks
>>>>>
>>>>> Michelle
>>>>>
>>>>> -----Original Message-----
>>>>> From: [EMAIL PROTECTED]
>>>>> [mailto:[EMAIL PROTECTED] On Behalf Of
>>>>> M.S.Bachler
>>>>> Sent: 13 March 2006 11:04
>>>>> To: User-friendly Desktop Internet GIS
>>>>> Subject: RE: [udig-devel] Shapefiles
>>>>>
>>>>>
>>>>> Hi!
>>>>>
>>>>> Thanks everyone for your various inputs.
>>>>> I am still not sure what I am doing (I have decided I am just
>>>>> thick!).
>>>>>
>>>>> I can't see how the DataUtility way or creating a FeatureType
>>>>> passes
>>
>>>>> in the x,y of the point. Then again, I can't even figure out how I
>>>>> get the x, y coordinates of the drop from my IDropAction class in
>>>>> order to create the coords for my Point class in the first
>>>>> place? I
>
>>>>> have run around the API, but can't figure it out.
>>>>>
>>>>> Is there really no example code out there that I can study to help
>>>>> me
>>>
>>>>> understand things better. I am unable to download the source code
>>>>> with Subversion (I did write to the list about this but no one
>>>>> replied). I need the equivalent of "uDig for Dummies" book.
>>>>>
>>>>> Being a Java developer for many years I thought this project would
>>>>> be
>>>
>>>>> relatively easy. But I think having no familiarity with Eclipse or
>>>>> GIS at all, has really not helped me. While Eclipse is becoming
>>>>> more familiar, 'GIS speak' is still a mistery. I think what seems
>>>>> obvious to
>>>>> many of you when talking about the code, just escapes me.
>>>>>
>>>>> I know people are reluctant to spoon feed me the code I need. I
>>>>> know
>>
>>>>> I need to go through the pain barrier and try and understand it
>>>>> all
>
>>>>> myself. But it really hurts, and for various reasons the timescale
>>>>> of my project has been shrunk, and I am in danger (for the first
>>>>> time in my lief!), of not completing something, and having to say
>>>>> I can't do it.
>>>>>
>>>>> I think I have just not reached that eureka moment, when
>>>>> everything
>
>>>>> suddenly clicks into place. I hope it happens soon! I still have a
>>>>> head full of floating jigsaw pieces.
>>>>>
>>>>> Meanwhile, if someone could help me with how I get the x,y of the
>>>>> drop, that would be great.
>>>>>
>>>>> Michelle - ( with a heavy cold - feeling rather sorry for
>>>>> myself :-
>
>>>>> ( - going to get a cup of tea )
>>>>>
>>>>> -----Original Message-----
>>>>> From: [EMAIL PROTECTED]
>>>>> [mailto:[EMAIL PROTECTED] On Behalf Of
>>>>> Jody
>
>>>>> Garnett
>>>>> Sent: 11 March 2006 08:58
>>>>> To: User-friendly Desktop Internet GIS
>>>>> Subject: Re: [udig-devel] Shapefiles
>>>>>
>>>>>
>>>>> You guys are working to hard, I wrote a parser method I never
>>>>> wanted
>>
>>>>> to do this stuff twice.
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/data/
>>>>> DataUtil
>>>>> ities.html
>>>>>
>>>>> The format is silly, but it is in the javadocs:
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/data/
>>>>> DataUtil
>>>>> ities.html#createType(java.lang.String,%20java.lang.String)
>>>>>
>>>>> basically:
>>>>> "name:String,age:Number,position:Point,*destination:Point"
>>>>> Where the * indicates the default geometry ..
>>>>>
>>>>> Other useful stuff:
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/
>>>>> feature/
>>>>> Featu
>>>>> reTypes.html
>>>>>
>>>>> Jody
>>>>>>
>>>>>>
>>>>>> M.S.Bachler wrote:
>>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> Silly question.
>>>>>>>
>>>>>>> Earlier you helpfully gave me a code snippet to create a new
>>>>>>> shapefile.
>>>>>>>
>>>>>>> IndexedShapefileDatastoreFactory fac=new
>>>>>>> IndexedShapefileDataStoreFactory();
>>>>>>>
>>>>>>> ShapefileDataStore ds=fac.createDatastore(url);
>>>>>>>
>>>>>>> // I assume this is the URL of the new shapefile I want it to
>>>>>>> create?
>>>>>>>
>>>>>>> GeometryFactory gf = new GeometryFactory();
>>>>>>>
>>>>>>> ds.createSchema( featureType );
>>>>>>>
>>>>>>> // Here I got lost. Started to investigate FeatureType and felt
>>>>>>> like I was walking through tar.
>>>>>>>
>>>>>> I did some stuff with FeatureType the other day... trying to
>>>>>> create
>>
>>>>>> a new Feature from scratch. Here is the code I found to create a
>>>>>> new
>>>>>> FeatureType:
>>>>>> AttributeType geomAttr =
>>>>> AttributeTypeFactory.newAttributeType("the_geom",
>>>>> LineString.class);
>>>>>> FeatureType ftRoad =
>>>>> FeatureTypeBuilder.newFeatureType(new AttributeType[] {geomAttr},
>>>>> "road");
>>>>>>
>>>>>> // WKTReader wktReader = new WKTReader();
>>>>>> // Point geometry = (Point) wktReader.read
>>>>>> ("POINT
>>>>> (" + lat + " " + lon + ")");
>>>>>> GeometryFactory geomFactory = new
>>>>> GeometryFactory();
>>>>>> LineString geometry =
>>>>> geomFactory.createLineString(coords);
>>>>>> Feature theRoad = ftRoad.create(new Object[]
>>>>>> {geometry}, "myRoad");
>>>>>>
>>>>>>
>>>>>> This example Feature only has one attribute which is the
>>>>>> geometry,
>
>>>>>> the_geom. You can create and add other attributes in the
>>>>>> AttributType[] and Object[] if needed.
>>>>>>
>>>>>> These classes are from the org.geotools.feature package.
>>>>>>
>>>>>> Hopefully you may find this useful. I'm not sure if this is the
>>>>>> most
>>>
>>>>>> up-to-date way of doing it, but it worked for me.
>>>>>>
>>>>>> Mark
>>>>>>
>>>>>> --
>>>>>> This message has been scanned for viruses and dangerous
>>>>>> content by
>>>>>> *MailScanner* <http://www.mailscanner.info/>, and is believed
>>>>>> to be
>>
>>>>>> clean. _______________________________________________
>>>>>> 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
>>>>> _______________________________________________
>>>>> 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
>>> _______________________________________________
>>> 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
>
> _______________________________________________
> 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
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel