crosses (Stream Processor)
Determines if the specified object or location crosses a geographic location specified by geo.json.geometry.fence
.
Syntax
<BOOL> geo:crosses(<STRING> id, <DOUBLE> longitude, <DOUBLE> latitude, <STRING> geo.json.geometry.fence)
<BOOL> geo:crosses(<STRING> id, <STRING> geo.json.geometry, <STRING> geo.json.geometry.fence)
Query Parameters
Name | Description | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|
id | Location ID. | STRING | No | No |
longitude | Longitude of the geo location. | DOUBLE | Yes | No |
latitude | Latitude of the geo location. | DOUBLE | Yes | No |
geo.json.geometry | String that contains geometry type and coordinates for a GeoJSON geometry. | STRING | Yes | No |
geo.json.geometry.fence | String that contains geometry type and coordinates for a GeoJSON geometry fence. | STRING | No | No |
Example 1
FROM InputStream#geo:crosses('km-4354', -0.5, 0.5, '{"type":"Polygon","coordinates":[[[0, 0],[2, 0],[2, 1],[0, 1],[0, 0]]]}') AS crosses;
This query uses the geo:crosses()
function to determine if a line, defined by the coordinates (-0.5, 0.5)
and (km-4354)
, crosses the specified polygon. The polygon is represented as a GeoJSON string with coordinates [[0, 0], [2, 0], [2, 1], [0, 1], [0, 0]]
.
Example 2
CREATE STREAM dataInForGeoCrossesStream (id string, longitude double, latitude double, timestamp long);
CREATE SINK STREAM dataOutForGeoCrossesStream (id string, crosses bool);
CREATE TRIGGER GeoCrossesTrigger WITH(interval = 5 sec);
@info(name = 'generateGeoCrossesData')
INSERT INTO dataInForGeoCrossesStream
SELECT "12" AS id, 6.876657 AS longitude, 79.897648 AS latitude, eventTimestamp() AS timestamp
FROM GeoCrossesTrigger;
@info(name = 'geoCrossesQuery')
INSERT INTO dataOutForGeoCrossesStream
SELECT "id" AS id, crosses AS crosses
FROM dataInForGeoCrossesStream#geo:crosses("12", 0.5, 0.5,"{'type':'Polygon','coordinates':[[[0,0],[0,2],[1,2],[1,0],[0,0]]]}");
In this example, a stream dataInForGeoCrossesStream
is created with the following attributes: id, longitude, latitude, and timestamp. A sink stream, dataOutForGeoCrossesStream
, is created to store the output data, which includes id and a boolean value crosses
to indicate whether the given point crosses the defined polygon.
A trigger named GeoCrossesTrigger
is created with a 5-second interval to periodically generate events.
The generateGeoCrossesData
query generates a new event every 5 seconds with predefined id, longitude, and latitude values, as well as a timestamp based on the current time.
The geoCrossesQuery
processes events from dataInForGeoCrossesStream
and uses the geo:crosses
function to check if the given point (longitude, latitude) crosses the specified polygon. The result is a boolean value indicating whether the point crosses the polygon. The query then inserts the id and crosses
result into the dataOutForGeoCrossesStream
sink stream.
Note that the given polygon coordinates in the example form a simple polygon with four vertices, and the point (0.5, 0.5) lies within this polygon.