Have you ever needed a way of aggregating map data, or points on a mat using latitude and longitude? This mechanism solves the problem of having to define a grid matrix database and still lets you aggregate it up.
This is a mechanism to store Locations in a calculable textual format , that does not need a pre-defined grid table reference.
Traditionally one would create a grid and number them so everyone knows what the address is. This is a different way, but oh so useful, as these are “aggregable” IDs. What that means is, the ID length itself, works much like a number’s decimal place and something you can “group by”.
The key concept to this unique method, is that you are not storing a location number (i.e. not an looked up address), but the path to a location at different levels.
Let me use an analogy, back in the day, before mobiles, if a visitor from another city is coming to your house and you are giving directions to your house. You would not give your post code or address but you would direct them from a commonly known identifiable point of location. You would first go through your references of what you thought would be commonly known objects, or landmarks within the city. “Do you know the church on the corner with the big clock”, or “where the statue is with the two giraffes”, or obviously the train station they may be arriving in. From that known point you begin to describe the direction they must take.
This approach is similar, lets say we use a quadrant (2×2) box, this is the quickest and gives reasonable granularity, if you needed a shorter address you can use a 6×6 grid, and number them a-z0-9 giving you 36 blocks.
2x2LID In this example I will use the (2×2) quadrant approach, and will label them a,b,c,d from left to right, top to bottom.
Lets Say, my GPS tells me I am where the red dot is which is 55.01 latitude and -3.02 longitude, I will divide the world into quadrants, using +90 to -90 Latitude and -180 to + 180 Longitude, with a cross section at 0,0. This is always the known starting point.
Calulating the 2x2LID
Then from there we decide, which quadrant my location is in, but my point’s latitude is greater or equal to 0, and my point’s longitude is less than and equal to 0. if so I am “a”, else check “b”, “c” and or “d” using a similar “if” statement methods.
This will give us the first letter… in this case letter a.
Next we go to the next level, and redraw a new imaginary cross section, halving the quadrant each time, now within the quadrant of a, we move the cross section from 0,0 to up and left (half the width) which is (45 lat, -90 lng)
We do this, for as many times as you want… but now dividing the width by 2 each time and decide in which direction do move. In this example I see I am top, right, so the next letter is b. I then divide the width, and point the pointer. check, divide, move; check, divide, move.
Repeating this I get the next letter d, as the point is in the lower right quadrant, and again lower right, so d again.
So the resulting word, at length 4, is abdd.
Why is this powerful?
- This is easily calculated
- No reference to customized proprietary database
- This is aggregable, so you just need to choose your word length in the database to get a grouped number of points.
- This is done by 1 measure, that can be easily index and thus super fast.
- The length of the word is up to you, and thus it can be to the 50th letter (or more) , which would be a quadrant width of roughly 35.5342422154 nano meter, at the equator. On a 2×2 grid, 30 letters is more than enough, on a 6×6 grid, 6 letters is about right. However you can decide how big your quadrants will be.
Guessing relative points in a neighboring cell, in another quadrant(i.e. outside your path) is not possible at all times:
The dividing mechanism (which allows for grouping), for example near the 0,0 markers, allows neighboring markers to have completely different words,
Solution 1: of course you can calculate easily what the neighbor cells are at the level you want, quickly and easily. Which means you still don’t have to go back to a paid database or service.
Starting with the first letter a or b, creates a significantly different word. it could mean that cells, at equator, or Greenwich meridian line could be relatively close or meters apart but have completely different words. i.e. two points such as (0.1 lat ,0.1 lng ) and (0.1 lat, -0.1 lng) could be adddd… and bcccc,… so although they are physically close to each other, the could be “worlds” apart in word terms.
Please go to GitHub, to find out more about what more you can do with LIDS and help us make an open source mechanism to calculate every address anywhere.
This could be to use a 6×6 for the first 4 characters and 4 x 4 for the next 4 and 2×2 for the last 4. Although this would create a massive amount of complexity in calculating your word… so not great, but would allow shorter words to get to relevant size grids.
The use of a 6×6 grid, create a great address people could use and remember, but does not serve well for creating a number of levels for aggregating data in. this is also much more complex to code. If it were me, through I would definitely use this as an address tool if you needed to code for areas of unaddressed data.