aaron-613 / pubsub-geo-filtering

Library to perform 1D & 2D geo[graphic|metric] filtering of pub/sub messages

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pubsub-geo-filtering

Finally getting my geo-filtering code posted up to GitHub. Will document more later.

To build and run simple subscription replier. Note: this uses Solace MicroGateway, your REST Mode must be in gateway for your Message VPN.

./gradlew assemble
cd geo-submgr/build/distributions
unzip geo-submgr.zip
cd geo-submgr
bin/SubsReplier localhost default default

Then, for example: a 100 mile zone around Atlanta airport with 90% accuracy:

curl "http://192.168.42.35:9000/geo/subs/circle?lat=33.749&lon=-84.388&radiusMetres=160934&accuracy=90"

{"subs":
  ["032.8*/-082.98*","032.8*/-082.99*","032.9*/-082.9*","032.38*/-083.7*","032.39*/-083.7*","032.3*/-083.8*","032.3*/-083.9*","032.4*/-083.5*","032.4*/-083.6*","032.4*/-083.7*","032.4*/-083.8*","032.4*/-083.9*","032.5*/-083*","032.6*/-083*","032.7*/-083*","032.8*/-083*","032.9*/-083*","032.29*/-084.3*","032.29*/-084.4*","032.3*/-084*","032.4*/-084*","032.5*/-084*","032.6*/-084*","032.7*/-084*","032.8*/-084*","032.9*/-084*","032.39*/-085.0*","032.4*/-085.0*","032.4*/-085.1*","032.4*/-085.2*","032.5*/-085.0*","032.5*/-085.1*","032.5*/-085.2*","032.5*/-085.3*","032.5*/-085.4*","032.6*/-085.0*","032.6*/-085.1*","032.6*/-085.2*","032.6*/-085.3*","032.6*/-085.4*","032.6*/-085.5*","032.7*/-085*","032.8*/-085*","032.9*/-085*","033.6*/-082.65*","033.7*/-082.65*","033.8*/-082.65*","033.5*/-082.66*","033.6*/-082.66*","033.7*/-082.66*","033.8*/-082.66*","033.9*/-082.66*","033.4*/-082.67*","033.5*/-082.67*","033.6*/-082.67*","033.7*/-082.67*","033.8*/-082.67*","033.9*/-082.67*","033.4*/-082.68*","033.5*/-082.68*","033.6*/-082.68*","033.7*/-082.68*","033.8*/-082.68*","033.9*/-082.68*","033*/-082.69*","033*/-082.7*","033*/-082.8*","033*/-082.9*","033*/-083*","033*/-084*","033*/-085*","033*/-086.0*","033.5*/-086.10*","033.6*/-086.10*","033.7*/-086.10*","033.8*/-086.10*","033.9*/-086.10*","033.5*/-086.11*","033.6*/-086.11*","033.7*/-086.11*","033.8*/-086.11*","033.9*/-086.11*","033.6*/-086.12*","033.7*/-086.12*","033.8*/-086.12*","034.0*/-082.6*","034.0*/-082.7*","034.1*/-082.7*","034.2*/-082.7*","034.3*/-082.78*","034.3*/-082.79*","034.0*/-082.8*","034.1*/-082.8*","034.2*/-082.8*","034.3*/-082.8*","034.4*/-082.8*","034*/-082.9*","034*/-083*","034*/-084*","034*/-085*","034.0*/-086.0*","034.1*/-086.0*","034.2*/-086.0*","035.0*/-083.5*","035.0*/-083.6*","035.0*/-083.7*","035.0*/-083.8*","035.0*/-083.9*","035.0*/-084*","035.0*/-085.0*","035.0*/-085.1*","035.0*/-085.2*","035.10*/-083.7*","035.11*/-083.7*","035.1*/-083.8*","035.1*/-083.9*","035.1*/-084*","035.10*/-085.0*"],
"perimiter":
  "POLYGON ((-82.98 32.9, -82.98 32.8, -82.99 32.8, -83 32.8, -83 32.7, -83 32.6, -83 32.5, -83.5 32.5, -83.5 32.4, -83.6 32.4, -83.7 32.4, -83.7 32.39, -83.7 32.38, -83.8 32.38, -83.8 32.3, -83.9 32.3, -84 32.3, -84.3 32.3, -84.3 32.29, -84.4 32.29, -84.5 32.29, -84.5 32.3, -85 32.3, -85 32.39, -85.1 32.39, -85.1 32.4, -85.2 32.4, -85.3 32.4, -85.3 32.5, -85.4 32.5, -85.5 32.5, -85.5 32.6, -85.6 32.6, -85.6 32.7, -86 32.7, -86 32.8, -86 32.9, -86 33, -86.1 33, -86.1 33.5, -86.11 33.5, -86.12 33.5, -86.12 33.6, -86.13 33.6, -86.13 33.7, -86.13 33.8, -86.13 33.9, -86.12 33.9, -86.12 34, -86.11 34, -86.1 34, -86.1 34.1, -86.1 34.2, -86.1 34.3, -86 34.3, -86 35, -85.3 35, -85.3 35.1, -85.2 35.1, -85.1 35.1, -85.1 35.11, -85 35.11, -85 35.2, -84 35.2, -83.9 35.2, -83.8 35.2, -83.8 35.12, -83.7 35.12, -83.7 35.11, -83.7 35.1, -83.6 35.1, -83.5 35.1, -83.5 35, -83 35, -82.9 35, -82.9 34.5, -82.8 34.5, -82.8 34.4, -82.79 34.4, -82.78 34.4, -82.78 34.3, -82.7 34.3, -82.7 34.2, -82.7 34.1, -82.6 34.1, -82.6 34, -82.66 34, -82.66 33.9, -82.65 33.9, -82.65 33.8, -82.65 33.7, -82.65 33.6, -82.66 33.6, -82.66 33.5, -82.67 33.5, -82.67 33.4, -82.68 33.4, -82.69 33.4, -82.69 33, -82.7 33, -82.8 33, -82.9 33, -82.9 32.9, -82.98 32.9))"
}

This includes an array of subscriptions (in lat/lon format), and also a WKT string defining the perimeter of the shape, useful for visualization. E.g. https://arthur-e.github.io/Wicket/sandbox-gmaps3.html Atlanta

Using the geo-api

Circular search area

Basics

  • includes both 2D and 1D versions
    • 2D can be used for lat/lon coordinates, or any planar geometric coordinates (e.g. [x,y], UTM, MGRS)
    • 1D can be used for any scalar (e.g. altitude, heading, speed)
  • Have updated code to support multiple radixes/bases, from binary base 2 to base 36

Live Demo

https://sg.solace.com/bus

Papers

https://worldcomp-proceedings.com/proc/p2016/ICM3967.pdf

The Algorithm

blah

Significant changes to the algorithm have been made to greatly simplify it and improve its usability.

Improvments made during the process

  1. Moved from Decimal base 10 to any radix, base n, where n=[2,36].
    1. Issue: floating point representation in base n with a radix point is weird. E.g. 123.456 =
  2. Something else

About

Library to perform 1D & 2D geo[graphic|metric] filtering of pub/sub messages

License:Other


Languages

Language:HTML 58.1%Language:JavaScript 27.8%Language:Java 13.2%Language:CSS 0.9%