WEBVTT

00:00.000 --> 00:17.800
I'm going to talk about a stack for OpenStreetNightPurposeHealth, so the top of the stack is user

00:17.800 --> 00:28.800
application for all the major platforms iOS, Android, Windows, Linux, so if you know organic

00:28.800 --> 00:34.040
maps are also an end, it's like that.

00:34.040 --> 00:39.440
Unlike those that you all have to support offline maps, there is an online tile server,

00:39.440 --> 00:47.640
so you can do many more in the world and meet and we see that without having to download

00:47.640 --> 00:51.760
the tile file for that area.

00:51.760 --> 00:57.920
So right now that just runs on a $10 month DPS, so there's no SLA.

00:57.920 --> 01:05.600
There's a number of map styles by a Kike transit, some technical points, it's a small

01:05.600 --> 01:12.240
app, it's GPL, uses a best cross-bath on build system, plain GNU-MAKE.

01:12.240 --> 01:21.720
So this is an example of what it looks like, 3D terrain, you can record tracks, like you

01:21.720 --> 01:28.040
would install or something.

01:28.040 --> 01:34.480
One of the key features is very customizable, so there's no URLs hard code anywhere in the

01:34.480 --> 01:41.040
application code, it's all in JavaScript plugins or YAML configuration files.

01:41.040 --> 01:47.560
So there's plugins for use and different services, so for example Wikipedia search to

01:47.560 --> 01:54.360
find interesting places nearby, for different routing services, for providing specialized

01:54.360 --> 02:06.600
maps sources that may have non-trivial URLs, so for example Sentinel2 satellite imagery.

02:06.600 --> 02:15.700
You can do custom shaders for different maps styling and you can customize the stack of layers

02:15.700 --> 02:23.980
anywhere you want, and it has kind of basic features that you'd find in any maps

02:23.980 --> 02:33.660
apps, so recording and editing tracks, saving routes, but as I said, you can download any

02:33.900 --> 02:46.620
rectangle, basically, for off-line use, then so this is all built on 10G, which is a fork

02:46.620 --> 02:53.620
of the 10GMS library from MapsN, which is a similar to MapOx, but that didn't make it

02:53.700 --> 03:04.980
when I was a business in 2018, and the library was basically no, not maintained, so no

03:04.980 --> 03:09.220
significant activity, and so I kind of just started building on that and added features like

03:09.220 --> 03:17.860
to be terrain, directly embedding SVG, resources in the, in the scene style files, support for

03:17.940 --> 03:26.020
different raster formats, and this is MIT license, so not KPL, so as the original Tangram

03:26.020 --> 03:36.100
the SVG, MIT, so that's usable in a broader range of applications. So this is another example

03:36.100 --> 03:45.700
of what you can do with it, again, this is 3D terrain, with all kinds of different styles

03:45.780 --> 04:02.020
of trails and roads and labels, and then so to talk about the tile server, so a lot of

04:02.340 --> 04:19.460
tiles servers have you, a lot of tiles servers have you, have you built generate tiles for

04:19.460 --> 04:28.500
the whole world before you use it, do this tiles, let's you build tiles on demand, and in order

04:28.500 --> 04:36.100
to do that, it uses this geodesk library, no affiliation, but it's a really nice format for open

04:36.100 --> 04:44.180
street Mac, or any geographic geodata, it's roughly the files roughly the same sizes, open street

04:44.180 --> 04:52.980
map pvf files, but are fully indexed, so you can quickly look up geodesk, how it's quickly

04:52.980 --> 04:59.940
looks up everything in a rectangle, the build a tile, and can build a tile in a few milliseconds,

05:01.620 --> 05:08.660
and this runs on again a cheap VPS, as long as you have enough storage for the whole world

05:09.540 --> 05:21.620
would be like 100 gigabytes, or you can use extracts, so right now, if you're familiar with tile

05:21.620 --> 05:28.100
maker, which is one of the kind of two main existing open source applications for building

05:28.100 --> 05:34.980
vector tiles, it's basically based on that, but instead of using the script to define the

05:34.980 --> 05:43.540
tile appearance, it uses C++, but it don't let that scare you, it looks quite similar to Lua,

05:43.620 --> 05:52.740
so if you can do the right to Lua, code to generate the tile, you can write the C++, and so that

05:52.740 --> 06:03.460
makes it of course a little faster, with the upcoming geodesk V2, which supports pulling updates,

06:03.460 --> 06:09.940
or accepting updates from open street map, updating these tiles in a new real time or in a

06:09.940 --> 06:14.420
minute basis to be possible, and that's something that we'll be added once that's available on

06:14.420 --> 06:23.620
geodesk. Also mentioned briefly the tile schema, so open map tiles, of course, is probably

06:23.620 --> 06:32.420
the most widely known opens street map tile schema. I decided to kind of use something different

06:32.420 --> 06:40.340
because that there's some things like missing, like, includes the OSMID, and some additional

06:40.340 --> 06:49.060
data for helping determine the importance of different PLIs, and so I mainly just use the unmodified

06:49.060 --> 06:54.660
open street map tags, and then really just the decision is how to break these in the layers,

06:54.980 --> 07:05.700
and I find that works pretty well. So if you want to build a tile server to serve

07:07.300 --> 07:12.820
vector tiles for the whole world, this is five lines basically, you download the

07:13.140 --> 07:22.420
geodesk file, and another one just to see which tiles are ocean and which are land,

07:23.220 --> 07:30.420
for tiles that don't have any coastlines, build this, get this library, build it, and that's it.

07:34.420 --> 07:40.900
So something I've got just recently is basic geocoding, so this would be another part of the

07:40.900 --> 07:48.660
kind of the open source map stack. So there's about 40 million places and points of interest.

07:50.100 --> 07:55.780
If you exclude like street names and addresses, and so I'm just using simple

07:56.820 --> 08:01.140
SUI full-text search over those with just this custom simple ranking function,

08:01.140 --> 08:16.980
and to determine like the geographic boundary, which administrative areas are places in,

08:18.180 --> 08:25.460
it's point and polygon testing over the over street map and then polygon's,

08:25.620 --> 08:33.220
and using tiling to break those up and then clip the polygons to this tiles, and so that actually

08:33.220 --> 08:39.060
all works pretty fast, so you can do the point and polygon testing for all the, for all the

08:39.060 --> 08:43.860
polygons for all these places, and do everything about five minutes, and that's faster than

08:43.860 --> 08:49.140
the SQLite full-text search indexing times, so I've bothered to optimize that anymore.

08:49.860 --> 08:59.380
And so that'll be the next, there's a false search index version of the user application,

09:00.980 --> 09:08.260
some future directions, and then just some, some examples of what you can do with the app,

09:08.260 --> 09:15.620
so Wikipedia search, this is place information for most street map, all done by plugin,

09:15.860 --> 09:27.860
offline search, this is in the example of sent-on-2 data, this is all done by plugin to

09:27.860 --> 09:39.620
set the date and and thought cover that you pass to the sent-on-2 server, so I think that's

09:39.620 --> 09:47.220
basically time, so thank you, thank you very much.

