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.

