Re: [OpenMap Users] Problem reading Shape file from a JAR

From: Don Dietrick <dietrick_at_bbn.com>
Date: Thu, 20 Aug 2009 14:12:06 -0400

Yes, you're right. The layer code used to create an ssx if it didn't
exist, now if it doesn't find one it creates one in memory and doesn't
bother writing it out to the file system. The only way to create the
ssx is to use the SpatialIndex class as an application.

- Don

On Aug 19, 2009, at 10:11 PM, Fabrice Bouye wrote:

>> If you run the layer against a file with an absolute path, it will
>> create an ssx file.
>
> No, see below:
>
>>> If I initiate a ShapeLayer using file on the disk,
>>> [...]
>>> The shape is loaded and displayed properly but I get this output
>>> on the console:
>>>
>>> Creating spatial index file: C:/Fabriceb/Devel/GIS/shape/
>>> World_EEZ_v3_20090430/World_Maritime_Boundaries_v3_20090430.ssx
>>>
>>> Even if no file is created in that directory whatsoever.
>
>> You can also run the SpatialIndex class as an
>> application on a shape file to create a ssx file (SpatialIndex will
>> print a usage statement).
>
> Thanks, I will try that.
>
> ----
> Fabrice Bouyé (http://fabricebouye.cv.fm/)
> Fisheries IT Specialist
> Tel: +687 26 20 00 (Ext 411)
> Oceanic Fisheries, Pacific Community
> http://www.spc.int/
>
>
>> -----Original Message-----
>> From: Don Dietrick [mailto:dfdietrick_at_gmail.com]
>> Sent: Thursday, August 20, 2009 11:33 AM
>> To: Fabrice Bouye
>> Subject: Re: [OpenMap Users] Problem reading Shape file from a JAR
>>
>> If you run the layer against a file with an absolute path, it will
>> create an ssx file. You can also run the SpatialIndex class as an
>> application on a shape file to create a ssx file (SpatialIndex will
>> print a usage statement).
>>
>> -- Don
>>
>> On Aug 19, 2009, at 5:11 PM, "Fabrice Bouye" <FabriceB_at_spc.int>
>> wrote:
>>
>>> Thanks for the quick reply.
>>> How may I do that (since it does not create it himself despite the
>>> message on the output)?
>>>
>>> ----
>>> Fabrice Bouyé (http://fabricebouye.cv.fm/)
>>> Fisheries IT Specialist
>>> Tel: +687 26 20 00 (Ext 411)
>>> Oceanic Fisheries, Pacific Community
>>> http://www.spc.int/
>>>
>>>> -----Original Message-----
>>>> From: Don Dietrick [mailto:dietrick_at_bbn.com]
>>>> Sent: Thursday, August 20, 2009 12:42 AM
>>>> To: Fabrice Bouye
>>>> Cc: OpenMap Users
>>>> Subject: Re: [OpenMap Users] Problem reading Shape file from a JAR
>>>>
>>>> Hi Fabrice,
>>>>
>>>> I think this is a bug in the SpatialIndex.MemoryIndex code. The
>>>> ShapeLayer was updated so it that if a .ssx file isn't found, it'll
>>>> create one and hold it in memory. It won't try to write it out to
>>>> the
>>>> file system. In order to create the MemoryIndex object, it's
>> trying
>>>> to instantiate a FileInputStream from the shape file name String,
>> and
>>>> I don't think that will work with a relative path. I'll fix it for
>>>> the next version, but I think the only other workaround is to
>> create
>>>> an .ssx file and stick it in the jar.
>>>>
>>>> - Don
>>>>
>>>> On Aug 18, 2009, at 9:58 PM, Fabrice Bouye wrote:
>>>>
>>>>> Hi,
>>>>> I am having trouble reading some shape files out of a JAR.
>>>>>
>>>>> I've got some shape files from
>> http://www.vliz.be/vmdcdata/marbound/
>>>>> which contain Worldwide EEZ definitions. Each "shape file" is spit
>>>>> into 7 files (.dbf, .prj, .sbn, .sbx, .shp.xml, .shp and .shx) and
>>>>> it's missing the .ssx file that comes with shape files provided
>> with
>>>>> OpenMap.
>>>>>
>>>>> If I initiate a ShapeLayer using file on the disk, somewhat
>> similar
>>>>> to (1st code is JavaFX, 2nd code is Java ; error happens similar
>> on
>>>>> both) :
>>>>>
>>>>> def shapeFile:String = "C:/Fabriceb/Devel/GIS/shape/
>>>>> World_EEZ_v3_20090430/World_Maritime_Boundaries_v3_20090430.shp";
>>>>> def properties:Properties = new Properties();
>>>>> properties.setProperty("prettyName", "EEZ"); //NOI18N
>>>>> properties.setProperty("shapeFile", shapeFile); //NOI18N
>>>>> properties.setProperty("lineColor", "000000"); //NOI18N
>>>>> def result:ShapeLayer = new ShapeLayer();
>>>>> result.setProperties(properties);
>>>>>
>>>>> String shapeFile = "C:/Fabriceb/Devel/GIS/shape/
>>>>> World_EEZ_v3_20090430/World_Maritime_Boundaries_v3_20090430.shp";
>>>>> Properties properties = new Properties();
>>>>> properties.setProperty("prettyName", "EEZ"); //NOI18N
>>>>> properties.setProperty("shapeFile", shapeFile); //NOI18N
>>>>> properties.setProperty("lineColor", "000000"); //NOI18N
>>>>> ShapeLayer result = new ShapeLayer();
>>>>> result.setProperties(properties);
>>>>>
>>>>> The shape is loaded and displayed properly but I get this output
>> on
>>>>> the console:
>>>>>
>>>>> Creating spatial index file: C:/Fabriceb/Devel/GIS/shape/
>>>>> World_EEZ_v3_20090430/World_Maritime_Boundaries_v3_20090430.ssx
>>>>> Even if no file is created in that directory whatsoever.
>>>>>
>>>>> If I use a path that points to a file in the JAR such as :
>>>>>
>>>>> def shapeFile:String = "org/spc/ofp/seapodym/view/ui/map/
>>>>> resources/eez/World_Maritime_Boundaries_v3_20090430.shp";
>>>>> def properties:Properties = new Properties();
>>>>> properties.setProperty("prettyName", "EEZ");
>>>>> properties.setProperty("shapeFile", shapeFile); //NOI18N
>>>>> properties.setProperty("lineColor", "000000"); //NOI18N
>>>>> def result:ShapeLayer = new ShapeLayer();
>>>>> result.setProperties(properties);
>>>>>
>>>>> String shapeFile = " org/spc/ofp/seapodym/view/ui/map/resources/
>>>>> eez/World_Maritime_Boundaries_v3_20090430.shp ";
>>>>> Properties properties = new Properties();
>>>>> properties.setProperty("prettyName", "EEZ"); //NOI18N
>>>>> properties.setProperty("shapeFile", shapeFile); //NOI18N
>>>>> properties.setProperty("lineColor", "000000"); //NOI18N
>>>>> ShapeLayer result = new ShapeLayer();
>>>>> result.setProperties(properties);
>>>>>
>>>>> I got that trace :
>>>>>
>>>>> java.io.FileNotFoundException: org\spc\ofp\seapodym\view\ui\map
>>>>> \resources\eez\World_Maritime_Boundaries_v3_20090430.shp (The
>> system
>>>>> cannot find the path specified)
>>>>> at java.io.FileInputStream.open(Native Method)
>>>>> at java.io.FileInputStream.<init>(FileInputStream.java:106)
>>>>> at java.io.FileInputStream.<init>(FileInputStream.java:66)
>>>>> at com.bbn.openmap.layer.shape.SpatialIndex
>>>>> $MemoryIndex.createIndex(SpatialIndex.java:1675)
>>>>> at com.bbn.openmap.layer.shape.SpatialIndex
>>>>> $MemoryIndex.create(SpatialIndex.java:1449)
>>>>> at
>>>>> com
>>>>> .bbn
>>>>>
>>>> .openmap.layer.shape.SpatialIndex.readIndexFile(SpatialIndex.java:
>>>> 769)
>>>>> at
>>>>> com
>>>>> .bbn
>>>>>
>>>> .openmap.layer.shape.SpatialIndex.entryIterator(SpatialIndex.java:
>>>> 727)
>>>>> at
>>>>> com
>>>>> .bbn
>>>>>
>>>> .openmap.layer.shape.SpatialIndex.getOMGraphics(SpatialIndex.java:
>>>> 526)
>>>>> at
>>>>>
>> com.bbn.openmap.layer.shape.ShapeLayer.prepare(ShapeLayer.java:509)
>>>>> at
>>>>> com
>>>>> .bbn
>>>>> .openmap
>>>>>
>>>>
>> .layer.policy.StandardRenderPolicy.prepare(StandardRenderPolicy.java:
>>>>> 99)
>>>>> at com.bbn.openmap.layer.OMGraphicHandlerLayer
>>>>> $LayerWorker.construct(OMGraphicHandlerLayer.java:695)
>>>>> at com.bbn.openmap.util.SwingWorker$2.run(SwingWorker.java:
>>>>> 127)
>>>>> at java.lang.Thread.run(Thread.java:619)
>>>>> and that output:
>>>>> EEZ|LayerWorker.construct(): null
>>>>>
>>>>> The trace is misleading as the path is good and further test using
>>>>> the Shapfiles provided with OpenMap indicates this error happens
>>>>> only because the .ssx file is missing and (probably) because
>> OpenMap
>>>>> cannot write into the directory within JAR to create it.
>>>>> For example, if I recopy dcwpo-browse.ssx to the proper location
>> and
>>>>> rename it World_Maritime_Boundaries_v3_20090430.ssx, there is no
>>>>> error anymore (but nothing is displayed of course).
>>>>> On the other hand if I use dcwpo-browse.shp and dcwpo-browse.ssx,
>> it
>>>>> works good from a JAR but if I remove dcwpo-browse.ssx then I get
>> a
>>>>> similar java.io.FileNotFoundException on dcwpo-browse.shp (notice
>>>>> the FileNotFoundException indicates that the .shp file is missing
>>>>> instead of the .ssx).
>>>>>
>>>>> Is there any way to circumvent this issue? Would it be possible,
>>>>> when using JAR and that the ssx is missing, to specify that the
>> ssx
>>>>> is to be created in as a TMP file or in the TMP folder instead?
>>>>>
>>>>> ----
>>>>> Fabrice Bouyé (http://fabricebouye.cv.fm/)
>>>>> Fisheries IT Specialist
>>>>> Tel: +687 26 20 00 (Ext 411)
>>>>> Oceanic Fisheries, Pacific Community
>>>>> http://www.spc.int/
>>>>>
>>>>
>>>
>>> --
>>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>>> with the following text in the BODY of the message "unsubscribe
>>> openmap-users"]
>
> --
> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
> with the following text in the BODY of the message "unsubscribe
> openmap-users"]

--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Thu Aug 20 2009 - 14:14:09 EDT

This archive was generated by hypermail 2.3.0 : Tue Mar 28 2017 - 23:25:09 EDT