From: nvidia <luo...@ho...> - 2009-01-27 17:49:58
|
Hi, i'm using the tutorials to help me build my gis app to essentially diplay my shapfile which is done by selecting the file name via java's file menu item. I a number of files, 1 of which is called ConstructStyle.java which implements both StyleFactory, LineSymbolizer which essentially builds my style. I have another file called ConstructMap.java which implements MapContext and creates a new ConstructStyle object known as constrStyle. The problem i'm having is in my ConstructMap.java file where i am adding my featuressource and the style object to the mapcontext object as it says: ava.lang.ClassCastException: com.mycompany.Map_AppV2.ConstructStyle cannot be cast to org.geotools.styling.Style at com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:81) at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:41) Now i was thinking of doing a bog standard try/catch block but would i need to initialise this again? to let the compiler know that i'm using the ConstructStyle class? >From what i can tell from the notes this is the only thing i need for me to be able to select my shp file and display my file. Your help would be much greatful. http://n2.nabble.com/file/n2227157/Map_AppV2.zip Map_AppV2.zip -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2227157.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Ian T. <ijt...@gm...> - 2009-01-27 20:53:00
|
On Tue, Jan 27, 2009 at 12:49 PM, nvidia <luo...@ho...> wrote: > > Hi, > > i'm using the tutorials to help me build my gis app to essentially diplay > my shapfile which is done by selecting the file name via java's file menu > item. I a number of files, 1 of which is called ConstructStyle.java which > implements both StyleFactory, LineSymbolizer which essentially builds my > style. I have another file called ConstructMap.java which implements > MapContext and creates a new ConstructStyle object known as constrStyle. > > The problem i'm having is in my ConstructMap.java file where i am adding > my featuressource and the style object to the mapcontext object as it says: > > ava.lang.ClassCastException: com.mycompany.Map_AppV2.ConstructStyle cannot > be cast to org.geotools.styling.Style > at com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:81) > at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:41) > > Now i was thinking of doing a bog standard try/catch block but would i need > to initialise this again? to let the compiler know that i'm using the > ConstructStyle class? > ConstructStyle needs to implement Style. But infact I suspect that ConstructStyle should use a StyleFactory to make a Style object which you should then pass to the mapcontext. Ian |
From: Michael B. <mic...@gm...> - 2009-01-27 23:04:11
|
> The problem i'm having is in my ConstructMap.java file where i am adding > my featuressource and the style object to the mapcontext object as it says: > > ava.lang.ClassCastException: com.mycompany.Map_AppV2.ConstructStyle cannot > be cast to org.geotools.styling.Style > at com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:81) > at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:41) > If you can post a snippet of your code it would help Michael |
From: nvidia <luo...@ho...> - 2009-01-27 23:31:53
|
Hi, i did some adjustments to my code, in particular i declared a stylefactory object within my ConstructStyle.java and in the constructor i added it by doing: this.lineStyle = styleFactory.createStyle(); to help create the style with the addition of doing declaring an instance variable of this class called private ConstructStyle constrStyle; in my ConstructMap.java and the constructor as this.constrStyle = new ConstructStyle(); but in doing so i get an exepction as follows: ava.lang.NullPointerException at com.mycompany.Map_AppV2.ConstructStyle.<init>(ConstructSyle.java:87) at com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:50) at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:42) I looked on google about this particular exception to find out what it mean and essentially it was about whether my variables were declared properly. After doing some inspection, i noticed that these two variables do have the keyword "this" so clearly i am missing something very small to do this. Here is my code snippets: ConstructStyle.java class ConstructStyle implements StyleFactory, LineSymbolizer { // Create Style using StyleFactory private Style lineStyle; private StyleFactory styleFactory; //private Graphics lineGraphics; // StyleBuilder helps build simple styles private StyleBuilder myStyleBuilder; // Describe how to represent a feature on screen private LineSymbolizer lineSymbolizer; // private FeatureTypeStyle fts; private Rule firstRule; ConstructStyle( ) { this.lineStyle = styleFactory.createStyle(); // line 87 this.myStyleBuilder = new StyleBuilder();// Create StyleBuilder object helps builds simple styles //createStyle(file,myFeatureTypeSchema); this.lineSymbolizer = myStyleBuilder.createLineSymbolizer(Color.cyan); //create color to be displayed lineStyle = myStyleBuilder.createStyle(lineSymbolizer); // use mystlyebuilder object to create a style and store this in variable } ConstructMap.java class ConstructMap implements MapContext { private String Title = "Google App"; private String[] myFeatureTypeNames = null; // Create an array of string to store the feature types private String myFeatureTypeName = null; // store type name private ConstructStyle constrStyle; ConstructMap( ) throws Exception { this.constrStyle = new ConstructStyle(); // line 50 SwingFrame swingFr = new SwingFrame(); // Declare file instance File file = new File("C:/Cavendish_map_data/map_01_data.shp"); // rest of code skipped MapApp.java public class MapApp { public static void main(String[] args) { System.out.println("Geotools version is" + " " + GeoTools.getVersion()); try { // Class which builds the map ConstructMap cMap = new ConstructMap(); ConstructStyle constrStyle = new ConstructStyle(); } catch (Exception ex) { Logger.getLogger(MapApp.class.getName()).log(Level.SEVERE, null, ex); } } } I've also uploaded my in case you would like to see. Thanks Michael Bedward wrote: > >> The problem i'm having is in my ConstructMap.java file where i am >> adding >> my featuressource and the style object to the mapcontext object as it >> says: >> >> ava.lang.ClassCastException: com.mycompany.Map_AppV2.ConstructStyle >> cannot >> be cast to org.geotools.styling.Style >> at >> com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:81) >> at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:41) >> > > If you can post a snippet of your code it would help > > Michael > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > http://n2.nabble.com/file/n2229061/Map_AppV2.zip Map_AppV2.zip -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2229061.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Michael B. <mic...@gm...> - 2009-01-28 00:59:14
|
Hi Luong, There's some confusion about what's what in your code - especially regarding interfaces. The good news is that it can all be a lot simpler :) For starters, to make a simple style for a line feature type you can just use a method like this... public Style createLineStyle(String featureTypeName, Color c) { StyleFactory sf = CommonFactoryFinder.getStyleFactory(null); StyleBuilder sb = new StyleBuilder(sf); LineSymbolizer sym = sb.createLineSymbolizer(c); return sb.createStyle(featureTypeName, sym); } Hope this helps Michael |
From: nvidia <luo...@ho...> - 2009-01-29 22:40:03
|
Hi, thanks for the reply, i added the section to my ConstructStyle.java class file, but wanted to ask because i want to display my shapefile by using java's file chooser (i.e file->open->my.shp), is there anything that i would need to also add with regards to the function createLineStyle? The reason i ask is beacuse very early on when following some of the tutorials in my ConstructMap.java i created a constrStyle object passed the following: // Pass file and feature schema referrence to myCreateStyle function constrStyle.myCreateStyle(file, myFeatureTypeSchema); I can just about see why the code is much "neater" than my version, but does that mean in terms of my constructor was the following code snippets: ConstructStyle( ) { this.lineStyle = styleFactory.createStyle(); this.myStyleBuilder = new StyleBuilder();// Create StyleBuilder object helps builds simple styles //createStyle(file,myFeatureTypeSchema); this.lineSymbolizer = myStyleBuilder.createLineSymbolizer(Color.cyan); //create color to be displayed lineStyle = myStyleBuilder.createStyle(lineSymbolizer); // use mystlyebuilder object to create a style and store this in variable } can be commented away, which i guess is yes :( (all that hardwork)? ---------------------------------------------------- I have general question here that i would like to ask, when creating styles/symbolizers for a shap file, how does one know what he or she needs to create? Because i 've looked at my shapefile and it's essentailly lines connected to each to eacher other, like a grid representing the roads that i converted from osm. Thanks again Michael Bedward wrote: > > Hi Luong, > > There's some confusion about what's what in your code - especially > regarding interfaces. The good news is that it can all be a lot > simpler :) > > For starters, to make a simple style for a line feature type you can > just use a method like this... > > public Style createLineStyle(String featureTypeName, Color c) { > StyleFactory sf = CommonFactoryFinder.getStyleFactory(null); > StyleBuilder sb = new StyleBuilder(sf); > LineSymbolizer sym = sb.createLineSymbolizer(c); > return sb.createStyle(featureTypeName, sym); > } > > Hope this helps > > Michael > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2241460.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Michael B. <mic...@gm...> - 2009-01-30 00:13:04
|
> The reason i ask is beacuse very early on when following some of the > tutorials in my ConstructMap.java i created a constrStyle object passed the > following: > > // Pass file and feature schema referrence to myCreateStyle function > constrStyle.myCreateStyle(file, myFeatureTypeSchema); There are various ways of doing it but the way I suggested is simple and should work. I like simple things :-) > can be commented away, which i guess is yes :( (all that hardwork)? My own learning is like that too. Ratio of code written / code used = very large number > I have general question here that i would like to ask, when creating > styles/symbolizers for a shap file, how does one know what he or she needs > to create? You need to know if you're drawing points, lines or polygons. If you're not sure what type of geometry a feature is you can query it, for example... Geometry geom = (Geometry) aFeature.getDefaultGeometry(); String typeName = geom.getGeometryType(); Hope this helps Michael |
From: nvidia <luo...@ho...> - 2009-01-30 00:19:38
|
I will try it i'll let u know how it goes. Thanks again. Michael Bedward wrote: > >> The reason i ask is beacuse very early on when following some of the >> tutorials in my ConstructMap.java i created a constrStyle object passed >> the >> following: >> >> // Pass file and feature schema referrence to myCreateStyle function >> constrStyle.myCreateStyle(file, myFeatureTypeSchema); > > There are various ways of doing it but the way I suggested is simple > and should work. I like simple things :-) > >> can be commented away, which i guess is yes :( (all that hardwork)? > > My own learning is like that too. Ratio of code written / code used = > very large number > >> I have general question here that i would like to ask, when creating >> styles/symbolizers for a shap file, how does one know what he or she >> needs >> to create? > > You need to know if you're drawing points, lines or polygons. If > you're not sure what type of geometry a feature is you can query it, > for example... > > Geometry geom = (Geometry) aFeature.getDefaultGeometry(); > String typeName = geom.getGeometryType(); > > Hope this helps > > Michael > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2242229.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: nvidia <luo...@ho...> - 2009-01-31 14:29:29
|
Hi, i added some slight modifications to my app, in particular to adding the createStyle func and cleaning my main file. When running the app, i keep getting the following error: Exception in thread "main" java.lang.ClassCastException: com.mycompany.Map_AppV2.ConstructStyle cannot be cast to org.geotools.styling.Style at com.mycompany.Map_AppV2.ConstructMap.<init>(ConstructMap.java:84) at com.mycompany.Map_AppV2.MapApp.main(MapApp.java:13) I looked in my ConstructMap.java file and noticed that it was pointing to this particular line of code: mapContext.addLayer(myFeatureSource,(Style) constrStyle); and i then looked at my ConstructStyle java file but in my constructor is currently empty, becuase i commented all that code out to include the construct style func. How do i tell the app that the object constrStyle in my ConstructMap.java file is an implementation of the StyleFactory? Even though i already have addes this. Because when i try to open my shapefile, it is not displayed. Cheers Michael Bedward wrote: > >> The reason i ask is beacuse very early on when following some of the >> tutorials in my ConstructMap.java i created a constrStyle object passed >> the >> following: >> >> // Pass file and feature schema referrence to myCreateStyle function >> constrStyle.myCreateStyle(file, myFeatureTypeSchema); > > There are various ways of doing it but the way I suggested is simple > and should work. I like simple things :-) > >> can be commented away, which i guess is yes :( (all that hardwork)? > > My own learning is like that too. Ratio of code written / code used = > very large number > >> I have general question here that i would like to ask, when creating >> styles/symbolizers for a shap file, how does one know what he or she >> needs >> to create? > > You need to know if you're drawing points, lines or polygons. If > you're not sure what type of geometry a feature is you can query it, > for example... > > Geometry geom = (Geometry) aFeature.getDefaultGeometry(); > String typeName = geom.getGeometryType(); > > Hope this helps > > Michael > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2250026.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Michael B. <mic...@gm...> - 2009-02-01 09:14:24
|
Hi Luong, I don't quite understand what you're trying to do, but passing an instance of your ConstructStyle class to the map context or whatever won't work because it is NOT a Style object. What you want to pass it is the return value of the createStyle method. If you want a separate style helper class you could have one with static methodsj. For example... public class ConstructStyle { public static Style constructLineStyle(String featureTypeName, Color c) { ... } // insert other style methods for polygons etc. } then in your map building code when you need a style for a feature type... Style style = ConstructStyle.constructLineStyle(myTypeName, myColour); Michael |
From: nvidia <luo...@ho...> - 2009-02-01 18:14:05
|
Hi, That was exactly what i was trying to do, attempting to pass the return value from the function createStyle method into the mapcontext. Sorry for the confusion, it makes a little more sense now. What i did in my ConstructMap.java code was created a style variable, and color c variable and set that to equal to the return value of the createStyle function i.e style = constrStyle.createStyle(myFeatureTypeName, c); mapContext.addLayer(myFeatureSource,style); i ran my app, and selected my .shp file, it never appeared, which i am assuming it has to do with the function addLayer(). So what i did was in the function, public void addLayer(FeatureSource<SimpleFeatureType, SimpleFeature> featureSource, Style style) { System.out.println("inside addlayer function"); } i created a simple statement to ouput, just to check that the flow of control does go here. Unfortunately, it does not and therefore does not show the print statment. I know that the linestyle has been created and the type names are being stored in the featureSource, but i dont know why it would not be showing?? Here is my constructmap.java code ConstructMap( ) throws Exception { this.constrStyle = new ConstructStyle(); this.c = null; SwingFrame swingFr = new SwingFrame(); // Declare file instance File file = new File("C:/Cavendish_map_data/map_01_data.shp"); // Declare ShapefileDataStore represents the file on disk // Store file location in myShapeFile DataStore myShapeFileStore = new ShapefileDataStore(file.toURI().toURL()); myFeatureTypeNames = myShapeFileStore.getTypeNames(); myFeatureTypeName = myFeatureTypeNames[0]; //Create FeatureSource object which is about the information inside the file itself(features) FeatureSource<SimpleFeatureType, SimpleFeature> myFeatureSource; myFeatureSource = myShapeFileStore.getFeatureSource(myFeatureTypeName); // Create FeatureType which will represent features as objects // use getSchema to access myFeatureSource e.g roads FeatureType myFeatureTypeSchema = myFeatureSource.getSchema(); // Create crs object to store geometry CoordinateReferenceSystem myCrs = myFeatureTypeSchema.getCoordinateReferenceSystem(); // Delcaire MapContext object to help build my map using crs MapContext mapContext = new DefaultMapContext(myCrs); // Pass file and feature schema referrence to myCreateStyle function //constrStyle.myCreateStyle(file, myFeatureTypeSchema); // Add featuresource and style to a layer style = constrStyle.createStyle(myFeatureTypeName, c ); mapContext.addLayer(myFeatureSource, style); // pass over the mapContext param to SwingFrame class to deal with showing the map swingFr.displayMap(mapContext); setTitle(Title); Again, your help would be much greatful, thanks. Michael Bedward wrote: > > Hi Luong, > > I don't quite understand what you're trying to do, but passing an > instance of your ConstructStyle class to the map context or whatever > won't work because it is NOT a Style object. What you want to pass it > is the return value of the createStyle method. > > If you want a separate style helper class you could have one with > static methodsj. For example... > > public class ConstructStyle { > > public static Style constructLineStyle(String featureTypeName, Color > c) { > ... > } > > // insert other style methods for polygons etc. > } > > then in your map building code when you need a style for a feature type... > > Style style = ConstructStyle.constructLineStyle(myTypeName, myColour); > > Michael > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > > -- View this message in context: http://n2.nabble.com/Styling-problem-tp2227157p2254660.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Michael B. <mic...@gm...> - 2009-02-02 07:40:30
|
Hi Luong, I suspect the problem is in your frame class. What sort of object are you using to display the rendered map ? E.g. a JMapPane ? If it's not too long, post the code for that class and let's see what we can see. Michael |
From: Michael B. <mic...@gm...> - 2009-02-02 07:47:58
|
PS. in case it's easier, here is a skeletal example of how you might do things... // in your main class, after code for creating map context and adding layer(s) MyFrame frame = new MyFrame("My beautiful map"); frame.setMap(mapContext); SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setVisible(true); } }); // Then a Swing frame class like this (but probably with lots more // gui bells and whistles) class MyFrame extends JFrame { private JMapPane mapPane; public MyFrame(String title) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); mapPane = new JMapPane(); add(mapPane); } public void setMap(MapContext map) throws IOException { mapPane.setRenderer(new StreamingRenderer()); mapPane.setContext(map); mapPane.setMapArea(map.getLayerBounds()); } } Michael |