Esri / Esri/geometry-api-java

OperatorImportFromESRIShape causes java.lang.OutOfMemoryError

Open
#146 3 comments 0 reactions 0 assignees View on GitHub
question
Dominant language
Java
Stars
710
Forks
269
Avg merge
7d 23h
Merged PRs (30d)
1

Description

Hi together,

currently I play arround with your geometry-api-java (version 1.2.1 from maven) to read an entire shape file and stumbled over the following issue:

```
java.lang.OutOfMemoryError: Java heap space
at com.esri.core.geometry.AttributeStreamOfInt32.(AttributeStreamOfInt32.java:61)
at com.esri.core.geometry.AttributeStreamBase.createIndexStream(AttributeStreamBase.java:465)
at com.esri.core.geometry.OperatorImportFromESRIShapeCursor.importFromESRIShapeMultiPath(OperatorImportFromESRIShapeCursor.java:268)
at com.esri.core.geometry.OperatorImportFromESRIShapeCursor.importFromESRIShape(OperatorImportFromESRIShapeCursor.java:190)
at com.esri.core.geometry.OperatorImportFromESRIShapeCursor.next(OperatorImportFromESRIShapeCursor.java:55)
at com.esri.core.geometry.ShapeUtilTest1.readShape(ShapeUtilTest1.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
```

The below snippet shows how I try to read the shape file.

```java
public List readShape(InputStream shape) throws IOException
{
List geometries = new ArrayList<>();

ByteBuffer bb = ByteBuffer.wrap(IOUtils.toByteArray(shape));

GeometryCursor cursor = OperatorImportFromESRIShape.local().execute(0,
Geometry.Type.Unknown, new SimpleByteBufferCursor(bb));

Geometry geometry;
while ((geometry = cursor.next()) != null)
{
geometries.add(geometry);
}

return geometries;
}
```

I Hope you can help me out with my problem. I also attached the shape file.

[data.zip](https://github.com/Esri/geometry-api-java/files/1280702/data.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.