Ahh, thanks Missed that one.
Michelle -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jesse Eichar Sent: 20 March 2006 19:57 To: User-friendly Desktop Internet GIS Subject: Re: [udig-devel] Shapefiles layer.getResource( FeatureStore.class, monitor); will get you a feature store. layer.getSchema() will get you the FeatureType Jesse On 20-Mar-06, at 11:53 AM, M.S.Bachler wrote: > Hi! > > Sorry about the last email - interface spazout. > >> 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. > > OK, I give up. > How do I get the datastore and hence the Feature Type back out of an > existing Layer. I have been searching arounf the API of Layer and > IGeoResource etc. I just can't figure it out. > I am probably missing the obvious. > > Michelle. > > -----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 _______________________________________________ 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