From: Nick C. <nic...@gm...> - 2010-04-26 12:48:12
|
I need to see your ContextCreator code to say anything useful. Nick On Apr 25, 2010, at 4:57 AM, kakald wrote: > > Hi Nick, > I have had the same problem. I have 2 contexts : PeopleContext and > HouseContext. I create a "ContextCreator extends ContextBuilder" > like in > demo repastcity which is to get 2 contexts and geographys above. But > the > progam inform that "java.lang.NullPointerException > at eva.ContextCreator.getPersonContext(ContextCreator.java:34)" > > Can you help me? > Thanks. > > Kakald. > > > Christophe Chevallier wrote: >> >> Hello, >> >> and thank you Nick for your help. >> >> Actually I have had the same problem as Steve : creating the java >> ContextCreator class allowed me to >> get through the error at the init() stage, but I got the next >> Exception at >> the >> DisplayGIS.resetHomeView() stage. I have tried to apply your new >> suggestions, but I can't make it. >> When I proceed with a manual java ContextCreator and >> ShapefileLoader as >> you described, my >> ShapefileLoader does indeed load an agent for each point defined in >> my >> shape file (the bugsites.shp >> that is available in the /repast.simphony.gis/sampleData folder). I >> verified this by using the >> geography.getAllObjects() command you mentioned. >> >> I can avoid the error if I manually add a layer using the add-gis- >> display >> wizard in the RepastS >> runtime, refering to another shape file in the RepastS runtime, >> such as >> roads.shp. Doing so, the GIS >> display comes up at initialization stage, with the roads.shp loaded. >> However, although my >> ContextCreator is written to add agents to the gis projection, the >> agents >> I add don't appear. >> >> I will send you my files in a private mail, to see if you can make >> them >> work? >> >> Christophe. >> >> Nick Collier a écrit : >>> Steve, >>> >>> This error occurs when we try to get to the layer bounds (as an >>> envelope) from the mapContext. I've noticed that this will return >>> null if the mapContext contains no layers which in turn will occur >>> if >>> the geography has nothing in it. >>> >>> Can you you check if the geography contains agents -- >>> Geography.getAllObjects after you do the shapefile loading should >>> return an iterable over the agents in the geography. If there are >>> agents, then can you send me your scenario and code and I'll try to >>> run it here. >>> >>> Here's what I do in my ContextCreator and it works: >>> >>> GeographyParameters geoParams = new GeographyParameters(); >>> Geography geography = >>> GeographyFactoryFinder.createGeographyFactory(null) >>> .createGeography("Geography", context, geoParams); >>> >>> File file = new File("/Users/nick/tmp/another.shp"); >>> ShapefileLoader loader = null; >>> try { >>> loader = new ShapefileLoader(GisAgent.class, file.toURL(), >>> geography, context); >>> while (loader.hasNext()) loader.next(); >>> } catch (MalformedURLException e) { >>> e.printStackTrace(); >>> } >>> >>> >>> Note that once you create the loader, you have to call loader.next() >>> in the while loop to actually create the agents. This a bit a >>> cumbersome when you don't actually need a reference to the created >>> objects to perform any additional operations. I'll add convenience >>> method that just creates them all. >>> >>> Btw, I've fixed the DisplayGIS so it won't abort with the NPE if the >>> geography is empty. That should be part of the next update. >>> >>> Nick >>> >>> On Dec 12, 2007, at 11:40 PM, Stephen Wendel wrote: >>> >>>> Hi Nick, >>>> >>>> Following to your directions, I've gotten past the error mentioned >>>> previously. But, I've reached a snag a little further down the >>>> line >>>> with Geography objects, and wonder if you could help? Namely, I >>>> have >>>> created my own ContextBuilder (similar to your example below), >>>> created >>>> the Geography, and loaded a shapefile full of features via >>>> ShapeFileLoader (as shown in the JUnit test case). Once the GIS >>>> display is about to be shown, I get an error: >>>> >>>> java.lang.NullPointerException >>>> at >>>> repast.simphony.visualization.gis.DisplayGIS.resetHomeView >>>> (DisplayGIS.java:330) >>>> >>>> >>>> From the source, it looks like the Envelope is not set properly -- >>>> but >>>> I haven't found where it was supposed to be set. I've included >>>> the >>>> full error below. I'm using a Dell Vostro 1500, Running Windows XP >>>> (SP2), with the SourceForge Windows Installer of Simphony 1 >>>> (downloaded >>>> Dec 5 2007). >>>> >>>> thanks for any and all help, >>>> -Steve >>>> >>>> Full Error: >>>> >>>> INFO [main] 23:12:36,031 saf.core.runtime.Boot - logging system >>>> initialized >>>> INFO [AWT-EventQueue-0] 23:15:20,015 >>>> repast.simphony.gis.display.PGISCanvas - Prop Change start >>>> INFO [AWT-EventQueue-0] 23:15:20,015 >>>> repast.simphony.gis.display.PGISCanvas - Prop chang end >>>> INFO [AWT-EventQueue-0] 23:15:20,046 >>>> repast.simphony.gis.display.PGISCanvas - >>>> repast.simphony.gis.tools.ScaleDenominatorChanged@4301c9 >>>> ERROR [AWT-EventQueue-0] 23:15:21,234 >>>> repast >>>> .simphony.visualization.engine.DisplayComponentControllerAction >>>> - >>>> Error while creating displays >>>> java.lang.NullPointerException >>>> at >>>> repast.simphony.visualization.gis.DisplayGIS.resetHomeView >>>> (DisplayGIS.java:330) >>>> >>>> at >>>> repast.simphony.visualization.gis.DisplayGIS.getPanel >>>> (DisplayGIS.java:249) >>>> at >>>> repast.simphony.engine.environment.DefaultGUIRegistry.addDisplay >>>> (DefaultGUIRegistry.java:124) >>>> >>>> at >>>> repast >>>> .simphony.visualization.engine.DisplayComponentControllerAction. >>>> runInitialize(DisplayComponentControllerAction.java:82) >>>> >>>> at >>>> repast.simphony.engine.controller.DefaultController$2.visit >>>> (DefaultController.java:171) >>>> >>>> at >>>> repast.simphony.engine.controller.DefaultController$2.visit >>>> (DefaultController.java:1) >>>> >>>> at >>>> repast.simphony.util.collections.NaryTree.preOrderTraverals >>>> (NaryTree.java:287) >>>> >>>> at >>>> repast.simphony.util.collections.NaryTree.preOrderTraverals >>>> (NaryTree.java:290) >>>> >>>> at >>>> repast.simphony.util.collections.NaryTree.preOrderTraverals >>>> (NaryTree.java:290) >>>> >>>> at >>>> repast.simphony.util.collections.NaryTree.preOrderTraversal >>>> (NaryTree.java:283) >>>> >>>> at >>>> repast.simphony.engine.controller.DefaultController.runInitialize >>>> (DefaultController.java:169) >>>> >>>> at >>>> repast.simphony.engine.controller.DefaultController.runInitialize >>>> (DefaultController.java:317) >>>> >>>> at repast.simphony.ui.RSApplication.initSim(RSApplication.java: >>>> 121) >>>> at repast.simphony.ui.action.InitRun.actionPerformed >>>> (InitRun.java:17) >>>> at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) >>>> at javax.swing.AbstractButton$Handler.actionPerformed(Unknown >>>> Source) >>>> at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown >>>> Source) >>>> at javax.swing.DefaultButtonModel.setPressed(Unknown Source) >>>> at >>>> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown >>>> Source) >>>> at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) >>>> at java.awt.Component.processMouseEvent(Unknown Source) >>>> at javax.swing.JComponent.processMouseEvent(Unknown Source) >>>> at java.awt.Component.processEvent(Unknown Source) >>>> at java.awt.Container.processEvent(Unknown Source) >>>> at java.awt.Component.dispatchEventImpl(Unknown Source) >>>> at java.awt.Container.dispatchEventImpl(Unknown Source) >>>> at java.awt.Component.dispatchEvent(Unknown Source) >>>> at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown >>>> Source) >>>> at java.awt.LightweightDispatcher.processMouseEvent(Unknown >>>> Source) >>>> at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) >>>> at java.awt.Container.dispatchEventImpl(Unknown Source) >>>> at java.awt.Window.dispatchEventImpl(Unknown Source) >>>> at java.awt.Component.dispatchEvent(Unknown Source) >>>> at java.awt.EventQueue.dispatchEvent(Unknown Source) >>>> at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown >>>> Source) >>>> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown >>>> Source) >>>> at java.awt.EventDispatchThread.pumpEvents(Unknown Source) >>>> at java.awt.EventDispatchThread.pumpEvents(Unknown Source) >>>> at java.awt.EventDispatchThread.run(Unknown Source) >>>> >>>>> ------------------------------ >>>>> >>>>> Message: 2 >>>>> Date: Wed, 12 Dec 2007 10:29:59 -0500 >>>>> From: Nick Collier <nic...@ve...> >>>>> Subject: Re: [Repast-interest] GIS in Simphony >>>>> To: "Sco...@cs...> <Sco...@cs..." >>>>> <Sco...@cs...>, Christophe Chevallier >>>>> <Chr...@en...> >>>>> Cc: repast-interest <rep...@li...> >>>>> Message-ID: <DB7...@ve...> >>>>> Content-Type: text/plain; charset="windows-1252" >>>>> >>>>> Scott & Christophe, >>>>> >>>>> What you've done so far is missing one step, I think. You'll >>>>> need to >>>>> get your agents moved into the geography. The details on that >>>>> can be >>>>> found here: >>>>> >>>>> http://repast.sourceforge.net/docs/reference/SIM/GIS% >>>>> 20Projections.html >>>>> >>>>> Alternatively, you can specify a shapefile as an agent attribute >>>>> in >>>>> your model.score: >>>>> >>>>> <agents label="MyAgent" ID="myAgent"> >>>>> <implementation className="MyAgent" mode="LOAD"/> >>>>> <attributes label="Shapefile Source" sType="STRING" >>>>> ID="shpFile" >>>>> defaultValue="/Users/nick/tmp/another.shp" /> >>>>> </agents> >>>>> >>>>> >>>>> If a shapefile is specified, simphony will create as many agents >>>>> as >>>>> there are features in the shapefile and assign each features >>>>> geometry >>>>> to an agent. Where possible attribute values in the shape file >>>>> will >>>>> be set on the agent. For example, if the agent has get/setWealth >>>>> methods and the feature has a wealth attribute then each agent's >>>>> wealth will be set to the wealth value of the corresponding >>>>> feature. >>>>> >>>>> Note that if you use the shapefile method, you don't need to use >>>>> the >>>>> composer in the runtime to click and add agents and you can >>>>> leave the >>>>> DataLoader as a ScoreContextBuilder. >>>>> >>>>> >>>>> Lastly, you can write your own ContextBuilder that will do all the >>>>> agent creation and projection adding by hand. For example, >>>>> >>>>> public class GISExampleCreator implements >>>>> ContextBuilder<GisAgent> { >>>>> >>>>> >>>>> public Context build(Context<GisAgent> context) { >>>>> >>>>> GeographyParameters geoParams = new GeographyParameters(); >>>>> Geography geography = >>>>> GeographyFactoryFinder >>>>> .createGeographyFactory(null) .createGeography >>>>> ("Geography", context, geoParams); >>>>> >>>>> GridFactoryFinder.createGridFactory(null).createGrid("Grid", >>>>> context, >>>>> GridBuilderParameters.multiOccupancy2D(new >>>>> RandomGridAdder(), new StickyBorders(), >>>>> 30, 30)); >>>>> >>>>> GeometryFactory fac = new GeometryFactory(); >>>>> >>>>> for (int i = 0; i < 10; i++) { >>>>> GisAgent agent = new GisAgent(); >>>>> context.add(agent); >>>>> agent.setWealth(i); >>>>> Coordinate coord = new Coordinate(-103.823 + i / 100.0, >>>>> 44.373); >>>>> Point geom = fac.createPoint(coord); >>>>> geography.move(agent, geom); >>>>> } >>>>> >>>>> >>>>> return context; >>>>> } >>>>> } >>>>> >>>>> This creates a Geography using the GeographyFactory (see the docs >>>>> referenced above for more info) and then the loop creates 10 >>>>> agents >>>>> and associates each one with a point geometry by moving each each >>>>> into the geography with a specified Point geometry. Note that my >>>>> agent just happens to be a called GISAgent here. There's nothing >>>>> gis >>>>> specific to it other than its being used in GIS example. Any agent >>>>> should work. >>>>> >>>>> To use a hand-made ContextBuilder, right click on Data Loaders, >>>>> choose set DataLoader and then "A Specific Java Class". The name >>>>> of >>>>> your ContextBuilder should appear in the comboBox. >>>>> >>>>> Nick >>>>> >>>>> >>>>> On Dec 11, 2007, at 6:38 PM, <Sco...@cs...> >>>>> <Sco...@cs...> wrote: >>>>> >>>> >>>> ---------------------------------------------------------------------- >>>> --- >>>> SF.Net email is sponsored by: >>>> Check out the new SourceForge.net Marketplace. >>>> It's the best place to buy or sell services >>>> for just about anything Open Source. >>>> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/ >>>> marketplace >>>> _______________________________________________ >>>> Repast-interest mailing list >>>> Rep...@li... >>>> https://lists.sourceforge.net/lists/listinfo/repast-interest >>> >>> >>> ------------------------------------------------------------------------- >>> SF.Net email is sponsored by: >>> Check out the new SourceForge.net Marketplace. >>> It's the best place to buy or sell services >>> for just about anything Open Source. >>> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace >>> _______________________________________________ >>> Repast-interest mailing list >>> Rep...@li... >>> https://lists.sourceforge.net/lists/listinfo/repast-interest >> >> ------------------------------------------------------------------------- >> SF.Net email is sponsored by: >> Check out the new SourceForge.net Marketplace. >> It's the best place to buy or sell services >> for just about anything Open Source. >> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace >> _______________________________________________ >> Repast-interest mailing list >> Rep...@li... >> https://lists.sourceforge.net/lists/listinfo/repast-interest >> >> > > -- > View this message in context: http://old.nabble.com/GIS-in-Simphony-tp14286078p28354946.html > Sent from the repast-interest mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > _______________________________________________ > Repast-interest mailing list > Rep...@li... > https://lists.sourceforge.net/lists/listinfo/repast-interest |