WEBVTT 00:00.000 --> 00:07.000 We're going to go next speaker. 00:07.000 --> 00:10.000 Okay, hello everyone. 00:10.000 --> 00:11.000 Does that work? 00:11.000 --> 00:12.000 Yeah. 00:12.000 --> 00:13.000 No? 00:13.000 --> 00:14.000 No. 00:14.000 --> 00:15.000 The light is either fine. 00:15.000 --> 00:16.000 It doesn't work. 00:16.000 --> 00:17.000 Okay. 00:17.000 --> 00:18.000 Okay. 00:18.000 --> 00:20.000 So I have to speak out. 00:20.000 --> 00:21.000 Okay. 00:21.000 --> 00:22.000 So I'm really happy to be here. 00:22.000 --> 00:24.000 It's my first time at Phos Dam. 00:24.000 --> 00:26.000 So I'm going to be nervous. 00:26.000 --> 00:28.000 That's going to be fine. 00:28.000 --> 00:32.000 I'm going to talk to you about Open Layers, which has been mentioned about it as a talk. 00:32.000 --> 00:34.000 So that's great. 00:34.000 --> 00:37.000 So a little bit of introduction about myself. 00:37.000 --> 00:39.000 My name is Olivia. 00:39.000 --> 00:42.000 I work at a company called Camster Camp. 00:42.000 --> 00:44.000 A few words about Camster Camp. 00:44.000 --> 00:46.000 So it's a service company. 00:46.000 --> 00:49.000 It does geospatial as well as other stuff. 00:49.000 --> 00:51.000 It's for structure and hosting. 00:51.000 --> 00:54.000 It's based in Switzerland, France and Germany. 00:54.000 --> 00:56.000 And we're about 200 people. 00:56.000 --> 00:59.000 It's a great company that does a lot of open source. 00:59.000 --> 01:01.000 And you know, they allow me to be here. 01:01.000 --> 01:02.000 So it's great. 01:02.000 --> 01:06.000 And I have been working on the opening of this project for three years now. 01:06.000 --> 01:09.000 I contributed to some stuff. 01:09.000 --> 01:10.000 I touched a bit of everything. 01:10.000 --> 01:12.000 But mostly the WebJair Ranger stuff. 01:12.000 --> 01:15.000 Which we're going to talk about later. 01:15.000 --> 01:21.000 And you can reach me out and get our blue sky and it's my email address. 01:21.000 --> 01:24.000 So, right. 01:24.000 --> 01:26.000 Just a quick question first. 01:26.000 --> 01:30.000 Who here has used open layers before? 01:30.000 --> 01:31.000 Okay. 01:31.000 --> 01:33.000 It's quite a lot of great. 01:33.000 --> 01:35.000 So, okay. 01:35.000 --> 01:39.000 I'm really happy that the others will be able to discover it. 01:39.000 --> 01:40.000 So, open layers. 01:40.000 --> 01:44.000 It's a JavaScript library for doing interactive maps on the web. 01:44.000 --> 01:47.000 There's other open source libraries around. 01:47.000 --> 01:50.000 It's the main open source libraries are leaflets. 01:50.000 --> 01:53.000 Map library and open layers. 01:53.000 --> 01:55.000 But the open layers have been around for a long time. 01:55.000 --> 01:58.000 The first version was out in 2006 actually I checked. 01:58.000 --> 02:02.000 It was rewritten from scratch in 2013. 02:02.000 --> 02:05.000 And it's constantly evolving and improving. 02:05.000 --> 02:07.000 And I think that's pretty important. 02:07.000 --> 02:08.000 The codebase is very healthy. 02:08.000 --> 02:10.000 It's kept up to date. 02:10.000 --> 02:12.000 It's very well tested. 02:12.000 --> 02:15.000 Also, which is important. 02:15.000 --> 02:18.000 You can use it by doing npm install oil. 02:18.000 --> 02:20.000 So, it's an npm package. 02:20.000 --> 02:23.000 I come back to that a bit later. 02:23.000 --> 02:26.000 Quick screenshot of the GitHub repository. 02:26.000 --> 02:30.000 So, the website, the code source is hosted on GitHub. 02:30.000 --> 02:32.000 Open layers. 02:32.000 --> 02:34.000 And you can see here. 02:34.000 --> 02:36.000 So, it's been done for a while. 02:36.000 --> 02:37.000 So, we have a lot of stars. 02:37.000 --> 02:39.000 It's a bit of a vanity metric. 02:39.000 --> 02:41.000 A lot of commits. 02:41.000 --> 02:44.000 The license is BSD2 clause. 02:44.000 --> 02:47.000 We have almost 90 open per request. 02:47.000 --> 02:48.000 So, this number is increasing. 02:48.000 --> 02:51.000 The last time I do talk was half of that. 02:51.000 --> 02:53.000 So, the committee is active. 02:53.000 --> 02:54.000 But there's more. 02:54.000 --> 02:56.000 I guess it's a growing interest in it. 02:56.000 --> 02:57.000 So, it's good. 02:57.000 --> 03:00.000 But it's also hard to catch up. 03:00.000 --> 03:06.000 So, open layers has the reputation to be quite big library. 03:06.000 --> 03:10.000 Probably people have called it bloated at times. 03:10.000 --> 03:14.000 The important part, the important thing to understand is that 03:14.000 --> 03:18.000 open layers every feature is split into separate modules. 03:18.000 --> 03:22.000 So, you know, there's just one package, which is, 03:22.000 --> 03:24.000 I think a package, which is well. 03:24.000 --> 03:27.000 But if you only import the features that you need, 03:27.000 --> 03:29.000 it won't have too much of a burden on your code. 03:29.000 --> 03:31.000 That's really important. 03:31.000 --> 03:34.000 I mean, there should be tree shaking happening. 03:34.000 --> 03:38.000 So, if you don't use all of it, it cannot actually be quite light. 03:38.000 --> 03:42.000 And the reason for this is that contrary to leaflet, for example, 03:42.000 --> 03:46.000 open layers does not expect you to rely too much on a plugging ecosystem. 03:46.000 --> 03:51.000 There are extensions and plugins out there, and some of them are really good. 03:51.000 --> 03:56.000 But the library is thought to have all the main features inside 03:56.000 --> 04:02.000 and maintained in the core code at the same level of quality. 04:02.000 --> 04:06.000 Let's look at some stuff that we can do with the library. 04:06.000 --> 04:12.000 I want to cover a few topics. I won't have too much time to dive too deep. 04:12.000 --> 04:16.000 So, I'll just cover a few stuff, and then you can look for yourself afterwards. 04:16.000 --> 04:19.000 Vector data, oh, that looks, that works. 04:19.000 --> 04:24.000 So, you can see here, this is an example of basic vector layer example. 04:24.000 --> 04:27.000 This is a big geogation data set of the world. 04:27.000 --> 04:31.000 And I can pan around zoom in zoom out, works great. 04:31.000 --> 04:35.000 This example, I actually used the WebGA renderer. 04:35.000 --> 04:39.000 The way we define styles in open layers. 04:39.000 --> 04:41.000 So, I want to talk about this. 04:41.000 --> 04:44.000 If you use the paneers, maybe a few years ago, 04:44.000 --> 04:49.000 you might have used the mainstream styling API, which where you instantiate, 04:49.000 --> 04:52.000 style objects, and it's very valuable, it's quite complicated. 04:52.000 --> 04:56.000 I also utilize a lot on style functions. 04:57.000 --> 05:01.000 We introduced a couple of years ago, I think, 05:01.000 --> 05:04.000 the concept of expression based styling. 05:04.000 --> 05:07.000 So, instead of defining its complex styling objects, 05:07.000 --> 05:10.000 and functions that are evaluated all the time, 05:10.000 --> 05:13.000 you can just give it a set of rules of styling rules. 05:13.000 --> 05:17.000 And I hope this is readable, maybe not that much. 05:17.000 --> 05:22.000 So, each rule has a filter and style properties. 05:23.000 --> 05:27.000 So, the filter lets you select which objects will be affected by that rule, 05:27.000 --> 05:31.000 and then the style properties will be for these objects. 05:31.000 --> 05:38.000 This is very important move, and we really recommend people to use that. 05:38.000 --> 05:43.000 And a very important part of this is that filters and style properties 05:43.000 --> 05:49.000 can be, so here it's just a color, but you can also have expressions, 05:49.000 --> 05:53.000 so expressions for filters and for style properties. 05:53.000 --> 05:57.000 And this way, you don't have to rely on style functions anymore. 05:57.000 --> 06:00.000 You can define the style using these expressions. 06:00.000 --> 06:03.000 It's a quite, it's very powerful system. 06:03.000 --> 06:06.000 It's not very easy to use at first. 06:06.000 --> 06:10.000 We actually got most of the inspiration for the map library, 06:10.000 --> 06:14.000 style specification, which also use these concept expressions. 06:15.000 --> 06:20.000 If you use this kind of styling, you will be able to have better performance. 06:20.000 --> 06:23.000 For instance, if you want to use WebJair rendering, 06:23.000 --> 06:26.000 you have to use this, you can choose style functions. 06:26.000 --> 06:29.000 This is another example of vector data using WebJair, 06:29.000 --> 06:36.000 and you can see here, we apply a filter that actually changes along the line, 06:36.000 --> 06:38.000 according to values along the line. 06:38.000 --> 06:41.000 So, we can change the filter dynamically, 06:41.000 --> 06:43.000 and then have the lines render differently. 06:43.000 --> 06:45.000 We also have colors changing along the line. 06:45.000 --> 06:50.000 I think it's a very interesting example of what we can do with this style expressions. 06:50.000 --> 06:53.000 Which we couldn't do before. 06:53.000 --> 06:56.000 Vector data, you can also render it using clusters. 06:56.000 --> 06:58.000 It's pretty standard. 06:58.000 --> 07:01.000 You have also a heat map. 07:01.000 --> 07:04.000 And then, let's move on to type data. 07:04.000 --> 07:08.000 So, opinions, loves, type data. 07:08.000 --> 07:11.000 Obviously, it's very efficient for rendering. 07:11.000 --> 07:15.000 It comes in many different types and shapes. 07:15.000 --> 07:18.000 The most simple type data is image types. 07:18.000 --> 07:21.000 So, you can see here, you have a map types, 07:21.000 --> 07:23.000 come from IGN in France. 07:23.000 --> 07:26.000 So, opinions will just load the ties at the correct zoom level 07:26.000 --> 07:30.000 and stitch them together, and that's all working well. 07:30.000 --> 07:34.000 Here, you have an example that shows vector ties. 07:34.000 --> 07:36.000 So, same principle. 07:36.000 --> 07:39.000 Here, the vector ties, instead of being images 07:39.000 --> 07:42.000 are, you know, bunches of geometry isn't them. 07:42.000 --> 07:44.000 And here, they're not tied. 07:44.000 --> 07:47.000 So, you can see kind of what's looking, 07:47.000 --> 07:49.000 how it looks inside a vector tie. 07:49.000 --> 07:53.000 But most of the time, you would want to tie them, obviously. 07:53.000 --> 07:58.000 Oppenirers has a lot of logic for loading ties. 07:58.000 --> 08:01.000 You know, the right ties are the right time. 08:01.000 --> 08:04.000 You can see here, there's an animation, and I'm moving, 08:04.000 --> 08:07.000 animating the view from Burnt Brussels. 08:07.000 --> 08:09.000 And why the view is animating, you know, 08:09.000 --> 08:12.000 the ties that are shown change along the way, 08:12.000 --> 08:16.000 and Oppenirers try to find the best tie for the best zoom level. 08:16.000 --> 08:20.000 So, that the map stays crisp and readable. 08:20.000 --> 08:22.000 There's a tie queue system. 08:22.000 --> 08:24.000 You can change the size of the tie cage. 08:24.000 --> 08:27.000 This is all very elaborate. 08:28.000 --> 08:32.000 Tie data is distributed across tigrades, 08:32.000 --> 08:34.000 and I'll just want to mention this, 08:34.000 --> 08:37.000 because oftentimes we see ties on the web-necitol 08:37.000 --> 08:39.000 tigrade, right, the world is square, 08:39.000 --> 08:41.000 and we're split it by two and two. 08:41.000 --> 08:43.000 But a tigrade can be anything. 08:43.000 --> 08:45.000 It can be in different projections. 08:45.000 --> 08:47.000 It can be just over a certain area. 08:47.000 --> 08:50.000 And Oppenirers has no assumption of a tigrade 08:50.000 --> 08:52.000 that you use. 08:52.000 --> 08:56.000 Oppenirers also will handle devices with 08:56.000 --> 08:58.000 higher pixel density. 08:58.000 --> 09:00.000 So typically mobile devices, 09:00.000 --> 09:03.000 how it can have like two, three, four, and more dpi. 09:03.000 --> 09:06.000 And then the library will try and load the right ties, 09:06.000 --> 09:08.000 you know, use the higher quality ties, 09:08.000 --> 09:10.000 it's available and it's kind of things. 09:10.000 --> 09:14.000 Again, so that it stays very crisp on your screen. 09:14.000 --> 09:18.000 Vector ties also have decluttering apply to them. 09:18.000 --> 09:22.000 So typically if you have vector ties with the labels, 09:22.000 --> 09:25.000 you might not want to show all the labels at the same time, 09:25.000 --> 09:27.000 because they will be unreadable. 09:27.000 --> 09:29.000 So decluttering happens. 09:29.000 --> 09:31.000 And this is also a very elaborate system 09:31.000 --> 09:33.000 where you can change a lot of things. 09:33.000 --> 09:35.000 Rusted data. 09:35.000 --> 09:39.000 So Rusted data typically comes from satellite imagery, 09:39.000 --> 09:43.000 also like draw on other kind of photography. 09:43.000 --> 09:45.000 And what you can do in Oppenirers, 09:45.000 --> 09:49.000 you can actually, you can give the library raw Rusted data 09:49.000 --> 09:51.000 and render it in different ways. 09:51.000 --> 09:54.000 Here we use a geotif file, 09:54.000 --> 09:57.000 and then we compute on the fly the NDVI, 09:57.000 --> 09:59.000 so the normalized difference. 09:59.000 --> 10:01.000 Vegetation index. 10:01.000 --> 10:04.000 And to do that, we use again an expression. 10:04.000 --> 10:07.000 So here you can see we're creating a tie layer, 10:07.000 --> 10:10.000 which is for image ties. 10:10.000 --> 10:14.000 And this tie, instead of being for vector data, 10:14.000 --> 10:16.000 it just has a color property, 10:16.000 --> 10:18.000 and here we give it an expression. 10:18.000 --> 10:22.000 And this expression computes NDVI and DWI 10:22.000 --> 10:24.000 and assigns it to the different channels. 10:24.000 --> 10:26.000 This is all done. 10:26.000 --> 10:28.000 This is all done on the client, right? 10:28.000 --> 10:30.000 It's on the fly. 10:30.000 --> 10:32.000 And that means that you can just decide, 10:32.000 --> 10:34.000 you know, give the raw data to Oppenirers 10:34.000 --> 10:36.000 and decide how to render it. 10:36.000 --> 10:40.000 For example, here this data comes from Sentinel2. 10:40.000 --> 10:42.000 Here we're just assigning, 10:42.000 --> 10:46.000 you know, the visible color bands to the color channels, 10:46.000 --> 10:47.000 right? 10:47.000 --> 10:49.000 Red bands goes to random, et cetera. 10:49.000 --> 10:51.000 But we can also switch the styling 10:51.000 --> 10:54.000 and have the red channel be the infrared band, 10:54.000 --> 10:56.000 and the other channels be something else. 10:56.000 --> 10:58.000 And then, you know, you can, again, 10:58.000 --> 11:00.000 on the fly, you can just change the way 11:00.000 --> 11:04.000 the data is showing on a map. 11:04.000 --> 11:09.000 Oppenirers has a support for many different kinds of protections. 11:09.000 --> 11:11.000 This is also very important in the library. 11:11.000 --> 11:14.000 When you create a map by default, 11:14.000 --> 11:16.000 it's going to be web macator, 11:16.000 --> 11:18.000 like a sensible default. 11:18.000 --> 11:20.000 But you can give it really anything 11:20.000 --> 11:22.000 that's supported by Prash4. 11:22.000 --> 11:24.000 And here, for example, this is the map of the world 11:24.000 --> 11:26.000 using mall-vader projection. 11:26.000 --> 11:28.000 You can have many other kind of projections. 11:28.000 --> 11:32.000 You can have polar projections and these kind of things. 11:32.000 --> 11:34.000 And this is very important also. 11:34.000 --> 11:36.000 I want to emphasize in Oppenirers. 11:36.000 --> 11:39.000 You have the concept of the view projection, right? 11:39.000 --> 11:43.000 You decide what, how your map will be rendered 11:43.000 --> 11:45.000 with width projection. 11:45.000 --> 11:47.000 But you also have the projection of your data. 11:47.000 --> 11:50.000 So if your data comes from a different projection, 11:50.000 --> 11:52.000 an opening is mostly, 11:52.000 --> 11:55.000 most likely be able to convert it on the fly. 11:55.000 --> 11:56.000 If it's vector data, 11:56.000 --> 11:58.000 it will transform the core vector coordinates. 11:58.000 --> 12:00.000 And if it's raster data, 12:00.000 --> 12:03.000 it will also be able to distort the images 12:03.000 --> 12:06.000 so that it matches the projection. 12:06.000 --> 12:08.000 Right. 12:08.000 --> 12:11.000 Another addition that was done previously, 12:11.000 --> 12:13.000 that's recall, it's a flow layer. 12:13.000 --> 12:15.000 So it's a web-gear rendered layer. 12:15.000 --> 12:18.000 You can give it a grid of values, 12:18.000 --> 12:20.000 typically coming from a weather data. 12:20.000 --> 12:23.000 And then the layer will interpolate between those values 12:23.000 --> 12:25.000 and then make a field out of it, 12:25.000 --> 12:28.000 and then simulate particles going over it. 12:28.000 --> 12:30.000 It's a common visualization, 12:30.000 --> 12:33.000 but no, it's built in the library. 12:35.000 --> 12:37.000 You can have many different formats, 12:37.000 --> 12:38.000 and open layers. 12:38.000 --> 12:41.000 Just a quick list. 12:42.000 --> 12:43.000 Yeah. 12:43.000 --> 12:45.000 I'm just going to not spend too much time on this. 12:45.000 --> 12:47.000 Many different sources. 12:47.000 --> 12:48.000 Operators, no support, 12:48.000 --> 12:50.000 OGC API standards, 12:50.000 --> 12:51.000 so map and vector ties, 12:51.000 --> 12:53.000 classic OGC protocols, 12:53.000 --> 12:55.000 WMS, et cetera. 12:55.000 --> 12:58.000 Sentinel hub also is a source now, 12:58.000 --> 12:59.000 PMTIs. 12:59.000 --> 13:01.000 You can use Google Maps, 13:01.000 --> 13:02.000 if you have a key, 13:02.000 --> 13:03.000 state in Maps, 13:03.000 --> 13:06.000 Cloud Optimize Geotif is also a data source. 13:06.000 --> 13:09.000 The way it works is when you create a layer, 13:09.000 --> 13:10.000 you have to assign it to source, 13:10.000 --> 13:11.000 right? 13:11.000 --> 13:12.000 You have different kind of layers, 13:12.000 --> 13:13.000 different kind of source, 13:13.000 --> 13:16.000 and you kind of make that work together. 13:16.000 --> 13:19.000 I'm not going to have different control interactions. 13:19.000 --> 13:21.000 Again, I'm not going to spend too much time on this. 13:21.000 --> 13:23.000 Classic to draw interaction, 13:23.000 --> 13:24.000 select, modify, 13:24.000 --> 13:26.000 you can rotate the view, 13:26.000 --> 13:28.000 full screen, scale bar, 13:28.000 --> 13:30.000 the vertical, 13:30.000 --> 13:32.000 and this kind of things. 13:32.000 --> 13:34.000 This is an example of a draw interaction 13:34.000 --> 13:36.000 that uses tracing, 13:36.000 --> 13:39.000 which I think it's really nice. 13:39.000 --> 13:40.000 So you see here, 13:40.000 --> 13:42.000 you're going to draw a shape, 13:42.000 --> 13:45.000 and I think that would be cool, 13:45.000 --> 13:46.000 in terms of draw. 13:46.000 --> 13:49.000 And then you will have this kind of snapping 13:49.000 --> 13:51.000 way, it will follow a shape, 13:51.000 --> 13:54.000 and that's useful if you have complex shapes. 13:54.000 --> 13:56.000 This is also something that the draw interaction 13:56.000 --> 13:58.000 can do for you. 13:58.000 --> 14:01.000 Operators has first class mobile support, 14:01.000 --> 14:04.000 so I talked about pixel density, 14:04.000 --> 14:06.000 but also like when you create a map by default, 14:06.000 --> 14:09.000 it will work on mobile, 14:09.000 --> 14:11.000 so you can interact with the fingers, 14:11.000 --> 14:12.000 you can zoom in zoom out, 14:12.000 --> 14:14.000 you can rotate them up, 14:14.000 --> 14:15.000 and stuff things. 14:15.000 --> 14:18.000 It's really first class support. 14:18.000 --> 14:21.000 How to use the library? 14:21.000 --> 14:25.000 So, this is what it looks like, 14:25.000 --> 14:27.000 create a map. 14:27.000 --> 14:31.000 It's just a pretty simple example, 14:31.000 --> 14:35.000 and actually it will be much more complex than that. 14:35.000 --> 14:38.000 It's just the general concept you have a map, 14:38.000 --> 14:41.000 which contains layers, layers of sources, 14:41.000 --> 14:43.000 and then a map has a view, 14:43.000 --> 14:45.000 the view lets you center on objects, 14:45.000 --> 14:47.000 the view are very useful functions, 14:47.000 --> 14:49.000 if you want to center on an object, 14:49.000 --> 14:50.000 if you want to animate the view, 14:50.000 --> 14:52.000 compute an extent and this kind of things, 14:52.000 --> 14:56.000 and then you set up controls and interactions. 14:57.000 --> 15:00.000 The NPM package is called OEL, 15:00.000 --> 15:02.000 which is done before. 15:02.000 --> 15:04.000 It comes with type definitions, 15:04.000 --> 15:07.000 so open-airs is written in JavaScript, 15:07.000 --> 15:09.000 but it has JSDoc annotations, 15:09.000 --> 15:11.000 so it's a type library, 15:11.000 --> 15:14.000 and you get type flip support. 15:14.000 --> 15:18.000 If you use NPM instead of where we get the latest table version, 15:18.000 --> 15:20.000 you can use OEL adev, 15:20.000 --> 15:23.000 if you want to have the latest version on main, 15:23.000 --> 15:25.000 that can be really useful 15:25.000 --> 15:28.000 if the features that have not been released yet, 15:28.000 --> 15:31.000 the main version is usually very stable, 15:31.000 --> 15:34.000 that might be a few bugs that haven't been fixed yet, 15:34.000 --> 15:38.000 or breaking changes, but most of the time you get to go. 15:38.000 --> 15:43.000 There's a very extensive example list on the website, 15:43.000 --> 15:48.000 so open-airs.org eann latest examples. 15:48.000 --> 15:52.000 I usually suggest people to start with this. 15:52.000 --> 15:56.000 It's a very, yeah, it's like 258 examples. 15:56.000 --> 15:59.000 There's an example for almost every feature, 15:59.000 --> 16:01.000 if you're not sure if the library can do something, 16:01.000 --> 16:03.000 or what it looks like when it runs, 16:03.000 --> 16:05.000 then just take a look at the example 16:05.000 --> 16:07.000 and you should have your answers. 16:07.000 --> 16:11.000 There's an API doc as well. 16:11.000 --> 16:13.000 Recently, we came up with something interesting. 16:13.000 --> 16:16.000 We created a website for doing benchmarks, 16:16.000 --> 16:19.000 and that's because in the past year, 16:19.000 --> 16:24.000 and a half, we tried improving the performance of 16:24.000 --> 16:27.000 vector data rendering as much as possible. 16:27.000 --> 16:30.000 We invested a lot of time and energy in this, 16:30.000 --> 16:33.000 and together, an idea of how good the library was getting, 16:33.000 --> 16:35.000 we came up with these benchmarks. 16:35.000 --> 16:38.000 So these benchmarks have different cases, 16:38.000 --> 16:41.000 rendering polygons, rendering lines, etc., 16:41.000 --> 16:44.000 rendering vector ties, and for each case, 16:44.000 --> 16:48.000 you have this shapes showing up, 16:48.000 --> 16:50.000 and you can change all the parameters, 16:50.000 --> 16:52.000 and increase the number of shapes, 16:52.000 --> 16:54.000 and see how far you can push the library, 16:54.000 --> 16:56.000 and basically by doing this, 16:56.000 --> 16:59.000 we try and find the soft limits of the library, 16:59.000 --> 17:01.000 and that's a very good indication 17:01.000 --> 17:06.000 of should we improve this part of the rendering further or not. 17:06.000 --> 17:08.000 You can switch from WebGL, 17:08.000 --> 17:12.000 you can switch on of WebGL rendering, 17:12.000 --> 17:15.000 and you can also, there's a performance tracker, 17:15.000 --> 17:19.000 which lets you give you an idea of what's going on at each frame, 17:19.000 --> 17:24.000 and this is very interesting for us, 17:24.000 --> 17:26.000 when you try to improve the performance, 17:26.000 --> 17:27.000 but I think it's also interesting, 17:27.000 --> 17:29.000 you can take a look at it, 17:29.000 --> 17:32.000 if you want to have an idea of how the library runs, 17:32.000 --> 17:34.000 and what performance you can expect from it. 17:34.000 --> 17:38.000 So the website is operative.org-bench, 17:38.000 --> 17:41.000 and you can also change it with different past versions, 17:41.000 --> 17:44.000 and see how it affects that's pretty cool. 17:45.000 --> 17:48.000 So we worked a lot on the performance of vector data, 17:48.000 --> 17:51.000 and that's mostly done through WebGL rendering, 17:51.000 --> 17:53.000 which I talked a little bit. 17:53.000 --> 17:56.000 Just a few words to say, 17:56.000 --> 17:59.000 why I think this project is important, 17:59.000 --> 18:02.000 and why I care about it very much. 18:02.000 --> 18:05.000 So I mentioned the other open source libraries, 18:05.000 --> 18:07.000 my library and leaflet. 18:07.000 --> 18:12.000 I think each library has their strong points and weaknesses. 18:12.000 --> 18:15.000 The thing is, it's not easy to use. 18:15.000 --> 18:17.000 It has a bit of complexity, 18:17.000 --> 18:20.000 but you can do really much anything. 18:20.000 --> 18:22.000 You can throw pretty much anything at it, 18:22.000 --> 18:24.000 and it will render it. 18:24.000 --> 18:27.000 It's completely agnostic to the source providers, 18:27.000 --> 18:30.000 data providers, the data, 18:30.000 --> 18:32.000 can be detailed data or not, 18:32.000 --> 18:34.000 many different formats and projects. 18:34.000 --> 18:37.000 The project is not owned by a company. 18:37.000 --> 18:39.000 It's a true community project, 18:40.000 --> 18:44.000 and I have to say it's a very neutral project, 18:44.000 --> 18:47.000 because there's no assumption about anything. 18:47.000 --> 18:50.000 I said Western assumptions, 18:50.000 --> 18:53.000 because you can use it in different projects, 18:53.000 --> 18:55.000 different parts of the world. 18:55.000 --> 18:57.000 We have regularly Chinese users, 18:57.000 --> 18:59.000 I think showing up at the GitHub, 18:59.000 --> 19:01.000 which makes communication hard, 19:01.000 --> 19:04.000 but I think that's a very interesting thing. 19:04.000 --> 19:08.000 Also, a good example is text rendering on the map, 19:08.000 --> 19:12.000 because we rely on the text rendering of the browser. 19:12.000 --> 19:14.000 It means that text can be anything. 19:14.000 --> 19:16.000 It doesn't have to be our alphabet. 19:16.000 --> 19:17.000 You can be right to left. 19:17.000 --> 19:18.000 You can be different characters, 19:18.000 --> 19:21.000 and these all works really well. 19:21.000 --> 19:24.000 So, yeah. 19:24.000 --> 19:27.000 Just a quick word to say that, 19:27.000 --> 19:28.000 if you want to help, 19:28.000 --> 19:30.000 you welcome to GitHub. 19:30.000 --> 19:31.000 You can try it out. 19:31.000 --> 19:33.000 If you find a bug, please report it. 19:33.000 --> 19:35.000 If you want to try your candidate, 19:35.000 --> 19:37.000 please try and open a pull request, 19:37.000 --> 19:40.000 and people will help you out, no worries. 19:40.000 --> 19:42.000 Yeah, that's it. 19:42.000 --> 19:43.000 Time for questions. 20:00.000 --> 20:01.000 Okay. 20:06.000 --> 20:10.000 So, you put requests when was it opened? 20:10.000 --> 20:12.000 Before what? 20:12.000 --> 20:14.000 Okay. 20:14.000 --> 20:15.000 Right. 20:15.000 --> 20:20.000 So, also, keep in mind that people sometimes use their own time to work on this. 20:20.000 --> 20:24.000 So, you know, basically what you try and do is say, 20:24.000 --> 20:27.000 yeah, okay. 20:27.000 --> 20:28.000 I'll have to look at it. 20:28.000 --> 20:30.000 I can say, yeah. 20:30.000 --> 20:31.000 It's very great. 20:36.000 --> 20:37.000 Yep. 20:37.000 --> 20:39.000 You're saying, like, obviously, open this, 20:39.000 --> 20:41.000 has a lot of function. 20:41.000 --> 20:46.000 Maybe, or, like, in reference to something like, 20:46.000 --> 20:47.000 if there's a lot of stuff, 20:47.000 --> 20:50.000 it should be in the same direction to open it. 20:50.000 --> 20:51.000 Right. 20:51.000 --> 20:53.000 How do you, like, the main thing is to size, 20:53.000 --> 20:57.000 like, what to, what should be included in the pull library, 20:57.000 --> 20:59.000 and what to, like, you know, 20:59.000 --> 21:04.000 potentially, 21:05.000 --> 21:07.000 how does that discussion happen? 21:07.000 --> 21:09.000 So, the question is, 21:09.000 --> 21:13.000 how do maintenance decide what gets put inside the library, 21:13.000 --> 21:17.000 or what maybe is left for other plugins to do? 21:17.000 --> 21:19.000 I think the library tries to have as many, 21:19.000 --> 21:22.000 200 as many providers and formats as possible. 21:22.000 --> 21:24.000 So, you know, if there's something coming up, 21:24.000 --> 21:26.000 and, for example, the OGCAPI standards, 21:26.000 --> 21:28.000 then, you know, they became more stable, 21:28.000 --> 21:30.000 and then there was supported in the library. 21:30.000 --> 21:32.000 When it comes to functionality, 21:32.000 --> 21:34.000 it's more like high level stuff, 21:34.000 --> 21:36.000 like interactions, or complex drawing, 21:36.000 --> 21:37.000 things, for example. 21:37.000 --> 21:38.000 Then, usually it will be like, 21:38.000 --> 21:40.000 maybe, you know, people can do that, 21:40.000 --> 21:44.000 you know, extensions, or in their application code. 21:44.000 --> 21:47.000 The interaction stuff stays quite low level, I would say. 21:52.000 --> 21:53.000 Yes? 21:53.000 --> 21:55.000 So, how is the interaction done? 21:55.000 --> 21:58.000 Is it only, like, going with the, 21:58.000 --> 22:01.000 what is the interaction done? 22:01.000 --> 22:06.000 Okay, the question is about drawing, 22:06.000 --> 22:08.000 the drawing interaction, how can you, 22:08.000 --> 22:11.000 so the default drawing interaction, 22:11.000 --> 22:13.000 again, you can click, 22:13.000 --> 22:15.000 set a vertex at every click. 22:15.000 --> 22:17.000 You also have a free-and-mode, 22:17.000 --> 22:20.000 but you can also programmatically push coordinates. 22:20.000 --> 22:22.000 And that's what we do in the tracing stuff, right? 22:22.000 --> 22:24.000 When you snap to a polygon, 22:24.000 --> 22:27.000 then we push coordinates without clicking. 22:27.000 --> 22:29.000 Yeah, but we think, if I have a format, 22:29.000 --> 22:33.000 then I just want to eat it here. 22:33.000 --> 22:37.000 If I want to trap objects on a map. 22:37.000 --> 22:38.000 Right? 22:38.000 --> 22:44.000 If you want to feel your map with data, 22:44.000 --> 22:46.000 you don't need to do, like, 22:46.000 --> 22:48.000 interaction is really when it comes to, 22:48.000 --> 22:49.000 like, the user doing something, 22:49.000 --> 22:52.000 but if you programmatically want to push objects in your map, 22:52.000 --> 22:54.000 then you don't need interactions. 22:54.000 --> 22:56.000 You basically push data on your source, 22:56.000 --> 22:59.000 at the source level, and then it shows up on the map. 22:59.000 --> 23:01.000 Yeah? 23:01.000 --> 23:02.000 Yeah? 23:02.000 --> 23:04.000 Can you share the words, 23:04.000 --> 23:07.000 how do you do performance testing on mobile devices 23:07.000 --> 23:09.000 in their, like, constraints in the CPU, 23:09.000 --> 23:12.000 or RAM, or in cases of, like, 23:12.000 --> 23:14.000 that network, or, you know, 23:14.000 --> 23:16.000 with your mobile device, or, 23:16.000 --> 23:21.000 okay, so about performance on mobile. 23:21.000 --> 23:24.000 So network, you can do a flying stuff with open layers, 23:24.000 --> 23:26.000 but it's not really handled by the library. 23:26.000 --> 23:30.000 You know, if you push the data into a source, 23:30.000 --> 23:32.000 if you're offline, or online, 23:32.000 --> 23:34.000 actually the library doesn't really care. 23:34.000 --> 23:39.000 The library tries to be as light as possible on, on battery. 23:39.000 --> 23:41.000 This benchmark website is also, 23:41.000 --> 23:44.000 it can also be used to test stuff on mobile. 23:44.000 --> 23:47.000 So, yeah, basically, yeah. 23:47.000 --> 23:49.000 But, I mean, for a long time, 23:49.000 --> 23:51.000 we just, we didn't have any proper metrics, right? 23:51.000 --> 23:53.000 We were just trying stuff, you know, 23:53.000 --> 23:55.000 like, try the examples on your mobile, 23:55.000 --> 23:58.000 or use an emulator or something. 23:58.000 --> 24:02.000 But, no, we tried to have better metrics. 24:02.000 --> 24:03.000 Yeah. 24:08.000 --> 24:10.000 Okay. 24:11.000 --> 24:12.000 Thank you. 24:12.000 --> 24:15.000 Thank you.