Ok, I've already solved this WKT Polygon issue. Although I added Jts to the
classpath, I did not activate it in the configuration. I use an Assembler
definition to create the dataset in Apache Jena Fuseki and had to change my
dataset Assembler config from:
:definition a spatial:EntityDefinition ;
...
spatial:spatialContextFactory
"org.locationtech.spatial4j.context.SpatialContextFactory"
to (notice *Jts*):
:definition a spatial:EntityDefinition ;
...
spatial:spatialContextFactory
"org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory"
Although this is explained quite well in the documentation, I did not realize I
had to change this in the Assembler file.
Next up: use SPARQL to find all spatial Polygon objects in the RDF dataset in
which a user-defined GPS coordinate lies. Unfortunately, I cannot just use the
*nearby* predicate with a (very small) radius.
Regards, Barry
-----Original Message-----
From: Nouwt, B. (Barry) [mailto:[email protected]]
Sent: dinsdag 30 mei 2017 14:24
To: [email protected]
Subject: RE: FW: Apache Jena Spatial
Marco, thanks for your explanation.
I'm currently testing whether I can actually use the WKT format to describe
spatial objects, but it fails (lat/long values work fine). I've traced the
error back to this locationtech spatial4j call in this SpatialIndexContext
class:
Shape shape = SpatialQuery.ctx.readShape(o.getLiteralLexicalForm());
On github:
https://github.com/apache/jena/blob/master/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java#L99
It returns a 'null' Shape value on this correct WKT polygon: Polygon ((-2.0000
51.2000, 1.0000 51.2000, 1.0000 51.8000, -2.0000 51.8000, -2.0000 51.2000))
From the code it seems the spatial4j tries to parse this WKT string on multiple
shape format readers, but cannot find one that returns an actual Shape from it,
so it returns null. This breaks the code when it tries to add the NULL shape to
the Lucene index later.
Do I need to configure the spatial4j shapereaders somewhere?
I'm adding spatial4j-0.6.jar and jts-core-1.14.jar dependency to the Fuseki's
classpath.
Kind regards, Barry
-----Original Message-----
From: Marco Neumann [mailto:[email protected]]
Sent: dinsdag 30 mei 2017 9:29
To: [email protected]
Subject: Re: FW: Apache Jena Spatial
no problem Barry, some of the above could work for you. think about the spatial
interaction as a relationship between the spatial search object and the
respective spatial data object. e.g. take interesectBox in the test case it
builds a spatial search object box and returns among other a match with a
wktLiteral (Polygon). the interesectBox can be as small or as big as you wish
it to be. behind the scenes it will filter by MBR before it evaluates candidate
geometries for exact polygon to box/point interactions.
Marco
On Tue, May 30, 2017 at 3:10 AM, Nouwt, B. (Barry) <[email protected]> wrote:
> Hi Marco, sorry for my persistence, but it is still unclear to me how the
> latest apache jena spatial package (3.3.0) can be applied to my use case.
>
> You mention "looking at your requirements it I'd say you will be just fine
> with the current version of jena-spatial.", but I only see the following
> spatial predicates:
>
> EastPF.java
> IntersectsBoxPF.java
> IsNearByPF.java
> IsWithinBoxPF.java
> IsWithinCirclePF.java
> NorthPF.java
> SouthPF.java
> WestPF.java
>
> If I understand correctly, I need the 'Contains' predicate that finds all
> spatial objects that contain the given GPS coordinate. Can I somehow build
> the 'contains' from the predicates above? Maybe a combination of North,
> South, West and East?
>
> In other words, which of the above list of available spatial predicates would
> you say I need to use?
>
> Thanks and regards,
>
> Barry
>
> -----Original Message-----
> From: Marco Neumann [mailto:[email protected]]
> Sent: maandag 29 mei 2017 23:38
> To: [email protected]
> Subject: Re: FW: Apache Jena Spatial
>
> here is the data
>
> https://github.com/apache/jena/blob/master/jena-spatial/src/test/resou
> rces/geoarq-data-1.ttl
>
> and here are the tests
>
> https://github.com/apache/jena/blob/master/jena-spatial/src/main/java/
> examples/JenaSpatialExample1.java
>
>
>
>
> On Mon, May 29, 2017 at 5:34 PM, Nouwt, B. (Barry) <[email protected]> wrote:
>> Hi Marco,
>>
>>
>>
>> Ok, so, I will not need to implement any spatial predicates myself?
>> Which existing spatial predicate should I use in my SPARQL query for my
>> ‘contains’
>> requirement?
>>
>>
>>
>> Could you maybe send me your quick test? That would probably be helpful.
>>
>>
>>
>> Thanks again!
>>
>> Barry
>>
>>
>>
>> Verzonden vanaf mijn Windows 10-telefoon
>>
>>
>>
>> Van: Marco Neumann
>> Verzonden: maandag 29 mei 2017 23:12
>>
>>
>> Aan: [email protected]
>> Onderwerp: Re: FW: Apache Jena Spatial
>>
>>
>>
>> looking at your requirements it I'd say you will be just fine with
>> the current version of jena-spatial. I was thinking more in terms of
>> number of spatial objects to be indexed as a possible issue.
>>
>> I just did a quick test with the latest release 3.3.0 and and it
>> seems to work for your needs. ignore the spatial documentation for
>> now and work with code directly. the linked documentation seems to be
>> out of sync with the current implementation of jena-spatial.
>>
>> Marco
>>
>>
>> On Mon, May 29, 2017 at 1:24 PM, Nouwt, B. (Barry)
>> <[email protected]>
>> wrote:
>>> Hi Marco, thanks for your reply!
>>>
>>>
>>>
>>> I’ve indeed included the JTS library, but haven’t tested the more
>>> advanced
>>> (WKT) features yet…
>>>
>>>
>>>
>>> My (current) requirements are:
>>>
>>> Describe spatial objects in RDF using WKT polygons.
>>> Fire a spatial SPARQL query with a given GPS coordinate (I.e. single
>>> point)
>>> Retrieve all spatial RDF objects that contain this given GPS coordinate.
>>>
>>>
>>>
>>> Do I understand you correctly that the current spatial
>>> implementation does not support my requirements? So, there is no
>>> predefined (combination of) predicate like nearby that I can use?
>>>
>>>
>>>
>>> So, then I need to put more effort in it myself. I’ve seen the ‘simple’
>>> implementations of the nearby (etc) predicate in jena-spatial… would
>>> implementing the contains be similar? I am an experienced Java
>>> developer, but never did spatial calculations before.
>>>
>>>
>>>
>>> Regards, Barry
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Verzonden vanaf mijn Windows 10-telefoon
>>>
>>>
>>>
>>> Van: Marco Neumann
>>> Verzonden: maandag 29 mei 2017 18:39
>>> Aan: [email protected]
>>> Onderwerp: Re: FW: Apache Jena Spatial
>>>
>>>
>>>
>>> Barry,
>>>
>>> the jena-spatial implementation has seen a couple of versions and
>>> iterations of versions over last couple of years.
>>>
>>> To perform and test for detailed spatial object interactions on
>>> polygons the current apache lucene spatial implementation
>>> (Lucene6.4.1) requires the JTS library.
>>>
>>> and of course you can always implement your own or you can just
>>> build your own spatial filter in sparql to detect polygon / point
>>> intersections. it requires a bit more effort to detect polygon /
>>> polygon interactions though.
>>> it depends on your requirements.
>>>
>>> Marco
>>>
>>>
>>>
>>> On Mon, May 29, 2017 at 11:28 AM, Nouwt, B. (Barry)
>>> <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>> In one of our projects we would like to use SPARQL to do spatial
>>>> searches to find all spatial objects (described by a polygon) that
>>>> contain a particular given GPS coordinate. I can successfully
>>>> execute the following Apache Jena Spatial query on the test data:
>>>>
>>>>
>>>>
>>>> PREFIX spatial: <http://jena.apache.org/spatial#
>>>> <http://jena.apache.org/spatial>>
>>>>
>>>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#
>>>> <http://www.w3.org/2000/01/rdf-schema>>
>>>>
>>>>
>>>>
>>>> SELECT ?placeName
>>>>
>>>> {
>>>>
>>>> ?place spatial:nearby (51.46 2.6 *1000* 'km') .
>>>>
>>>> ?place rdfs:label ?placeName
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> However, the *‘nearby’* predicate does not fit my usecase and I
>>>> cannot find one that does in this list:
>>>>
>>>>
>>>>
>>>> https://jena.apache.org/documentation/query/spatial-
>>>> query.html#property-function-library
>>>>
>>>>
>>>>
>>>> I think I need the ‘Contains’ predicate as described here:
>>>>
>>>>
>>>>
>>>> http://edndoc.esri.com/arcsde/9.1/general_topics/understand_
>>>> spatial_relations.htm#Contains
>>>>
>>>>
>>>>
>>>> but I it seems like it is not supported. Can anyone confirm that?
>>>>
>>>>
>>>>
>>>> What other options do I have to get the usecase described above working?
>>>> Can I implement the ‘Contains’ behavior myself (although I have no
>>>> geo/spatial experience) and contribute it to the Apache Jena
>>>> Spatial? Can I somehow mimic the contains behavior with regular
>>>> SPARQL?
>>>>
>>>>
>>>>
>>>> Thanks in advance!
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> B. (Barry) Nouwt
>>>> Medior Innovator Semantische Technologie Connected Business
>>>>
>>>> T +31 (0)88 866 56 91
>>>> M +31 (0)64 977 53 56
>>>> E [email protected]
>>>>
>>>> Location <http://www.tno.nl/locaties/SB>
>>>>
>>>>
>>>>
>>>> <http://www.tno.nl/>
>>>>
>>>> This message may contain information that is not intended for you.
>>>> If you are not the addressee or if this message was sent to you by
>>>> mistake, you are requested to inform the sender and delete the
>>>> message. TNO accepts no liability for the content of this e-mail,
>>>> for the manner in which you use it and for damage of any kind
>>>> resulting from the risks inherent to the electronic transmission of
>>>> messages.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>>
>>>
>>> ---
>>> Marco Neumann
>>> KONA
>>>
>>>
>>>
>>> This message may contain information that is not intended for you.
>>> If you are not the addressee or if this message was sent to you by
>>> mistake, you are requested to inform the sender and delete the
>>> message. TNO accepts no liability for the content of this e-mail,
>>> for the manner in which you use it and for damage of any kind
>>> resulting from the risks inherent to the electronic transmission of
>>> messages.
>>>
>>
>>
>>
>> --
>>
>>
>> ---
>> Marco Neumann
>> KONA
>>
>>
>>
>> This message may contain information that is not intended for you. If
>> you are not the addressee or if this message was sent to you by
>> mistake, you are requested to inform the sender and delete the
>> message. TNO accepts no liability for the content of this e-mail, for
>> the manner in which you use it and for damage of any kind resulting
>> from the risks inherent to the electronic transmission of messages.
>>
>
>
>
> --
>
>
> ---
> Marco Neumann
> KONA
--
---
Marco Neumann
KONA