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.