Hi all,
I've also tackled the final issue of constructing the SPARQL query the does
what I want.
I use the intersectBox predicate as Marco suggested with an infinitely small
box:
PREFIX spatial: <http://jena.apache.org/spatial#> PREFIX rdfs:
<http://www.w3.org/2000/01/rdf-schema#>
SELECT ?placeName{
?place spatial:intersectBox(51.65172 -1.69531 51.65172 -1.69531) .
?place rdfs:label ?placeName
}
Which correctly finds this polygon:
airports:EGBB_Fake_In_Box rdf:type airports_sc:LargeAirport ;
wkt:asWKT "Polygon ((-2.0000 51.2000, 1.0000 51.2000, 1.0000 51.8000, -2.0000
51.8000, -2.0000 51.2000))"^^wkt:wktLiteral ;
rdfs:label "Fake in Box Airport (wktLiteral)"
.
Thanks for all your help, Marco!
Barry
-----Original Message-----
From: Nouwt, B. (Barry) [mailto:[email protected]]
Sent: dinsdag 30 mei 2017 15:12
To: [email protected]
Subject: RE: FW: Apache Jena Spatial
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/reso
u
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