Welcome Ying! Those look like a useful set of functions, can't wait to take them for a test drive.
On Tue, May 28, 2013 at 11:46 AM, Stephen Allen <sal...@apache.org> wrote: > Welcome! I look forward to issuing my first geospatial query! > > -Stephen > > On Tue, May 28, 2013 at 9:14 AM, Andy Seaborne <a...@apache.org> wrote: > > I'm pleased to announce that Ying Jiang has had the jena-spatial project > [2] > > accepted into the the Google Summer of Code. > > > > Please welcome Ying Jiang [1]. > > > > Andy > > > > > > [1] Intro. http://s.apache.org/cgS > > > > [2] Submitted project description: > > > > Background > > > > GeoSPARQL [1] is a complete approach to spatial query but it is > complicated > > and directed more towards the specialist, not the average linked data > > developer with SPARQL knowledge. In fact, not all spatial queries are > > complicated. The sweet spot is something simpler (and less capable) than > > GeoSPARQL, because the average web developer, even if writing SPARQL, > isn't > > looking for a complete solution to all geospatial use cases. They are > > looking for something easier (= smaller). Many use cases are covered by > > provision of a single facility like get all objects within a given > radius or > > within a given bounding box. For example, this query makes a spatial > query > > for the places within 10 kilometers of Bristol UK (which as > > latitude/longitude of 51.46, 2.6). > > > > SELECT ?placeName > > > > { > > ?place spatial:query (51.46 2.6 10) . > > ?place rdfs:label ?placeName > > } > > > > My mentor has developed an initial and experimental implementation of > GeoARQ > > [3] as proof of the idea, which uses Lucene spatial capabilities to > provide > > a spatial property function for ARQ. However, GeoARQ is not specifically > > related to the formal Jena project, whose internal design is quite old > and > > does not play so well with RDF datasets and update, as well as adding > > assembler capabilities to integrate with Fuseki. To resolve these > problems, > > I will develop an extension to Jena ARQ, called jena-spatial, which is > > exploiting the spatial capabilities of Lucene to create a fully > integrated > > capability that we can add to the main download when it's stable. Jena > > provides a similar property function architecture in jena-text [2], so > this > > project is to take that concept and apply it to geospatial information. > > > > > > > > Project Scopes and Approaches > > > > I have already got engaged with the Jena community through email in the > past > > weeks. I’m sure that I understand the needs of the project and the > > commitments to make to my mentor. Here’re the project scopes and their > > approaches summarized from the discussions with my mentor. > > > > > > > > 1. Spatial Data Indexer > > > > Firstly, I’ll design and develop a module for spatial information > Indexing. > > The indexer can read the spatial data from Jena Model and Statement, and > > transform them into Lucene Document. The indexing process can be > controlled > > by startIndexing(), finishIndexing(), abortIndexing() and close(). A > command > > line tool (by extending CmdARQ [4]) should be provided for reading > spatial > > datasets and indexing them for assembling, with the arguments like > “[--desc > > | --dataset] assemblerPath”. > > > > > > > > 2. Spatial Property Functions > > > > What kinds of spatial property functions should be developed in this > > project? GeoSPARQL seems to be a complete solution. But it’s not > necessary > > to get into full GeoSPARQL which is too complicated for non-specialists. > > Geospatial stretched to much more complicated relationships but a lot of > > useful things can be done with less than the full geospatial model which > is > > too complicated for the average web developer to take on board with their > > limited time. For example, there is a simple vocabulary for expressing > WGS80 > > information ; there is also the point information in WKT ; there’s > spatial > > relations ontology for reference. > > > > On the other hand, I've studied Lucene sptatial to figure out what > spatial > > relations are possible to be implemented. For the current release of > Lucene > > 4.2.1, it provides a high level abstraction for spatial query usage. > > > > - SpatialOperation : compares a stored geometry to a supplied geometry. > such > > as "IsWithin" and "Intersects". Actually, all of them are not supported. > > > > - SpatialStrategy : encapsulates an approach to indexing and searching > based > > on shapes. Different implementations will support different features. > > There're 3 implementations now: PointVectorStrategy, > > RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy. For example, > > PointVectorStrategy supports only "IsWithin" for Rectangle or Circle, > while > > RecursivePrefixTreeStrategy can caculate "Intersects" of any kinds of > > Shapes. I'd like to make full use of Lucene to make jena-text support as > > many spatial relationships as possible. On the other hand, I can also > make > > new SpatialOperations like "Northing/Westing" mentioned in that are not > > available in Lucene. > > > > To wrap things up, here're the jena-spatial property functions that I > can do > > this summer: > > > > > > > > 2.1 ?A -> within -> B > > > > A: Point Var > > > > B: Rectangle or Circle > > > > Approach: PointVectorStrategy directly supports this > > > > Note: a circle can be specified in the query as (point, radius). We can > > treat Rectangle and Circle differently in this way: > > > > ?point :withinCircle ( x,y,r ) . > > > > ?point :withinBox ( x1,y1,x2,y2) . > > > > > > > > 2.2 A -> nearby ->?B, C > > > > A: Point > > > > B: Point Var > > > > C: radius > > > > Approach: RecursivePrefixTreeStrategy makes > > > > SpatialOperation.Intersects for the Circle with the center of A and the > > radius of C > > > > > > > > 2.3 A -> intersects -> ?B > > > > A: any Shape > > > > B: non-Point Shape Var > > > > Approach: RecursivePrefixTreeStrategy directly supports this (note: not > > tested) > > > > > > > > 2.4 A -> intersects -> ?B > > > > A: any Shape > > > > B: Point Var > > > > Approach: TermQueryPrefixTreeStrategy directly supports this > > > > > > > > 2.5 A -> northing/southing/easting/westing -> B > > > > A: Point > > > > B: Point > > > > Approach: use rangeQuery, or RecursivePrefixTreeStrategy makes > > SpatialOperation.Intersects of north/south/east/west Rectangle > > > > > > > > 2.6 A -> disjoints ->B > > > > A: Rectangle > > > > B: Rectangle > > > > Approach: PointVectorStrategy directly supports this (note: it doesn't > > handle dateline cross). > > > > From the users’ views, the most common use case is to query all places > with > > a box or circle centered on a given point. Therefore, I’d like to > emphasize > > on 2.1 and 2.2, with the others marked as the optional ones to be > > implemented if time permits. > > > > > > > > 3. Jena Assembler Configuration with Fuseki Integration > > > > I’ll provide a way to describe the Lucene spatial index with a Jena > > assembler description in configuration. For example, the user can have > one > > field, mapping a property to a spatial index field. The Fuseki > configuration > > simply points to the spatial dataset as the fuseki:dataset of the > service. > > It should be possible to have a Fuseki server with spatial support by > simply > > adding it to the build/classpath. > -- Regards, * * *Stephen Owens* CTO, ThoughtWire t 647.351.9473 ext.104 I m 416.697.3466