Results 1 to 3 of 3

Thread: Neo4J: Using spatial-Index causes SpatialDatabaseException

  1. #1

    Default Neo4J: Using spatial-Index causes SpatialDatabaseException

    Hi,

    i have a NodeEntity "OsmAddress" which represents an OpenStreetMap-Address:

    Code:
    @NodeEntity
    public class OsmAddress {
      ...
      protected float lat;
      protected float lon;
      ...
      // @Indexed(indexType = IndexType.POINT, indexName = "OsmAddressLocation")
      protected String wkt;
      ...
    }
    
    > [OsmAddress [..., lat=50.930195, lon=6.941256, ..., wkt=POINT( 6,94 50,93 ), ...]]
    In the last line you can see OsmAddresses values. IMO the values are set fine. Using the commented "@Index" above "protected String wkt;" causes following exception when trying to save the entity via "neoTemplate.repositoryFor(OsmAddress.class).save( address);":
    Code:
    	org.neo4j.gis.spatial.SpatialDatabaseException: Expected number but found ','
    	at org.neo4j.gis.spatial.WKTGeometryEncoder.decodeGeometry(WKTGeometryEncoder.java:46)
    	at org.neo4j.gis.spatial.indexprovider.LayerNodeIndex.add(LayerNodeIndex.java:129)
    	at org.neo4j.gis.spatial.indexprovider.LayerNodeIndex.add(LayerNodeIndex.java:56)
    	at org.springframework.data.neo4j.fieldaccess.IndexingPropertyFieldAccessorListenerFactory$IndexingPropertyFieldAccessorListener.valueChanged(IndexingPropertyFieldAccessorListenerFactory.java:86)
    	at org.springframework.data.neo4j.fieldaccess.DefaultEntityState.notifyListeners(DefaultEntityState.java:137)
    	at org.springframework.data.neo4j.fieldaccess.DefaultEntityState.setValue(DefaultEntityState.java:114)
    	at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.setEntityStateValue(SourceStateTransmitter.java:78)
    	at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.access$100(SourceStateTransmitter.java:39)
    	at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter$3.doWithPersistentProperty(SourceStateTransmitter.java:122)
    	at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter$3.doWithPersistentProperty(SourceStateTransmitter.java:119)
    	at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:183)
    	at org.springframework.data.neo4j.support.mapping.SourceStateTransmitter.copyPropertiesTo(SourceStateTransmitter.java:119)
    	at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.write(Neo4jEntityConverterImpl.java:152)
    	at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.write(Neo4jEntityPersister.java:179)
    	at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:243)
    	at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:231)
    	at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:301)
    	at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:296)
    	at org.springframework.data.neo4j.repository.AbstractGraphRepository.save(AbstractGraphRepository.java:108)
    	at domain.services.Location.getLocation(Location.java:85)
    	at test.domain.services.LocationTest.getValidLocation(LocationTest.java:33)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:601)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
    	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    Caused by: com.vividsolutions.jts.io.ParseException: Expected number but found ','
    	at com.vividsolutions.jts.io.WKTReader.parseError(WKTReader.java:420)
    	at com.vividsolutions.jts.io.WKTReader.getNextNumber(WKTReader.java:303)
    	at com.vividsolutions.jts.io.WKTReader.getPreciseCoordinate(WKTReader.java:258)
    	at com.vividsolutions.jts.io.WKTReader.readPointText(WKTReader.java:506)
    	at com.vividsolutions.jts.io.WKTReader.readGeometryTaggedText(WKTReader.java:465)
    	at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:205)
    	at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:174)
    	at org.neo4j.gis.spatial.WKTGeometryEncoder.decodeGeometry(WKTGeometryEncoder.java:44)
    	... 45 more
    Any suggestions?

    I am using Spring Data Neo4J RC2 in standalone mode, neo4j 1.8.M07 and neo4j-spatial 0.9-SNAPSHOT.

    Greetz,
    Markus

  2. #2
    Join Date
    May 2012
    Posts
    107

    Default

    Markus,

    I think WKT expects "foreign" punctuation, i.e. wkt=POINT( 6.94 50.93 ) instead of wkt=POINT( 6,94 50,93 ) - worth a quick try?

    Regards,

    Lasse

  3. #3

    Default

    Code:
    Locale enLocale = new Locale("en", "EN");
    OsmAddress address = new OsmAddress();
    address.setWkt(String.format(enLocale, "POINT( %.2f %.2f )", lon, lat));
    ...
    neoTemplate.save(address);
    Your suggestion is the solution, thank you!

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •