We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

MapServer Project Status Report - Meet The Developers!

00:00

Formal Metadata

Title
MapServer Project Status Report - Meet The Developers!
Title of Series
Number of Parts
95
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Production PlaceNottingham

Content Metadata

Subject Area
Genre
Abstract
This session starts with a status report of the MapServer project, followed by an open question/answer session to provide a opportunity for users to interact with members of the MapServer project team. We will go over the main features and enhancements introduced in MapServer 6.2 and 6.4, including the addition of the new TinyOWS and MapCache components, the current and future direction of the project, and finally discuss contribution opportunities for interested developers and users. Don’t miss this chance to meet and chat face-to-face with the members of the MapServer project team!
ExplosionSuite (music)Complex (psychology)Field (computer science)Vector spaceUniform boundedness principlePersonal digital assistantSymbol tableData typeComputer-generated imageryAngleSocial classRegulärer Ausdruck <Textverarbeitung>Point (geometry)Default (computer science)Arrow of timeChemical polarityDistanceMaxima and minimaOcean currentLevel (video gaming)Graph coloringVector spaceServer (computing)MereologyGame controllerQuery languageSymbol tableAuditory maskingFunction (mathematics)Computer fileMultiplication signSpeech synthesisLattice (order)Position operatorGravitationCollision detectionSoftware developerDatabase transactionMultiplicationCache (computing)Complex (psychology)Connectivity (graph theory)Revision controlTesselationKey (cryptography)Decision theoryDialectDegree (graph theory)MassMappingLine (geometry)QuicksortResultantMathematicsFerry CorstenMetrologiePolygon meshPresentation of a groupPoint (geometry)NumberAuthorizationSound effectComputer animation
Field (computer science)Vector spaceDirection (geometry)Vector spaceInstance (computer science)Order of magnitudeNeuroinformatikMappingoutputNatural numberElectronic visual displaySampling (statistics)Computer fileMusical ensembleRaster graphicsVector fieldLevel (video gaming)Symbol tableConsistencyField (computer science)Computer animation
Vector spaceActive contour modelPrice indexMixed realityZugriffskontrolleAddress spaceService (economics)Content (media)Token ringScale (map)GeometryLine (geometry)SmoothingSinguläres IntegralElectronic mailing listRegulärer Ausdruck <Textverarbeitung>Human migrationSymbol tableDiscrete element methodData typeDefault (computer science)Social classProcess (computing)Clique-widthShape (magazine)PreprocessorData bufferComplex (psychology)ParsingOperator (mathematics)WebsiteLevel (video gaming)CuboidTable (information)Substitute goodStatement (computer science)Computer fileLatent heatAdditionElectric currentSet (mathematics)NumberDistribution (mathematics)BuildingMultiplicationData managementComputing platformText editorCodierung <Programmierung>Digital filterTranslation (relic)Scripting languageJava appletSource codeSystem on a chipBit rateMaß <Mathematik>Interior (topology)Cone penetration testApplication service providerMoving averageType theoryCAN busScaling (geometry)MathematicsToken ringLevel (video gaming)Complete metric spaceSampling (statistics)Computer-generated imageryDistribution (mathematics)WindowSymbol tableBinary codeNumberMappingServer (computing)Raster graphicsBuildingFigurate numberObject (grammar)BitActive contour modelCodeComputer fileMusical ensembleAttribute grammarRange (statistics)Operator (mathematics)Vector spaceString (computer science)Uniform resource locatorScripting languageAverageProcess (computing)Integrated development environmentBlack boxVolumenvisualisierungRegulärer Ausdruck <Textverarbeitung>Type theoryElectric generatorParameter (computer programming)Function (mathematics)Discrete element methodStudent's t-testAlgorithmGeometryTransformation (genetics)Line (geometry)Network topologyInteractive televisionSmoothing1 (number)TesselationRight angleExpressionConnected spaceFunctional (mathematics)Overhead (computing)Electronic mailing listBuffer solutionUtility softwareMultiplication signContent (media)2 (number)Patch (Unix)InformationClique-widthFile formatMoment (mathematics)Revision controlVariable (mathematics)Logical constantLibrary (computing)Statement (computer science)Connectivity (graph theory)Game controllerComputer programmingRow (database)Coefficient of determinationCondition numberMetropolitan area networkBlogPolygon meshPoint (geometry)CountingSuite (music)View (database)Game theoryMatching (graph theory)LogicTable (information)Direction (geometry)WordWebsiteVolume (thermodynamics)HypermediaINTEGRALNoise (electronics)StapeldateiOrder (biology)Computer animation
Source codeWordFormal languageProcess (computing)Artistic renderingContext awarenessComplex (psychology)Traffic shapingMultiplicationLine (geometry)Attribute grammarFunction (mathematics)Single-precision floating-point formatCodierung <Programmierung>Level (video gaming)View (database)Insertion lossScripting languageJava appletShape (magazine)outputSocial classRegulärer Ausdruck <Textverarbeitung>String (computer science)GeometrySymbol tableVarianceLengthPlug-in (computing)Representation (politics)Digital filterCodeOracleDevice driverElectronic mailing listLogicFile formatTranslation (relic)Personal digital assistantComputer fontServer (computing)Software testingBranch (computer science)ImplementationPoint (geometry)GeometryString (computer science)AreaProduct (business)Symbol tableBitMultiplication signMusical ensembleShape (magazine)QuicksortCASE <Informatik>SpacetimeSocial classMappingRight angleComplex (psychology)Functional (mathematics)Scripting languageCodeEuler anglesPolygon meshSoftware testingLine (geometry)Axiom of choicePhysical systemMetropolitan area networkSingle-precision floating-point formatGroup actionNetwork topologyVideo gameCodeMassLatent heatFluidMechanism designCategory of beingRing (mathematics)MathematicsHeat transferLetterpress printingGame theoryComputer fileDatabase transactionWorkstation <Musikinstrument>Formal languageAddress spaceWeb pageDressing (medical)Voting7 (number)Inversion (music)Library (computing)Condition numberDivisorPortable communications deviceContext awarenessArtistic renderingMereologyHypermediaExpressionCodierung <Programmierung>Level (video gaming)Different (Kate Ryan album)Order (biology)Function (mathematics)Beta functionData miningType theory1 (number)Server (computing)Plug-in (computing)Source codeCalculationSoftware developerGoodness of fitRevision controlRaster graphicsSoftwareClique-widthImplementationArrow of timeAttribute grammarComputer clusterCombinational logicFlow separationSlide rulePublic key certificateProper mapLattice (order)Conformal mapPosition operatorTranslation (relic)Computer animation
Server (computing)Software developerSoftware testingBeta functionPersonal digital assistantSoftware bugWikiElectronic mailing listPatch (Unix)Binary fileInsertion lossProcess (computing)Multiplication signBusiness reportingPower (physics)Software testingSoftware bugOnline helpSlide ruleElectronic mailing listServer (computing)Level (video gaming)Binary codeBeta functionCASE <Informatik>Table (information)Programmer (hardware)WhiteboardRule of inferenceGroup actionWeb pageSystem callTranslation (relic)Computer animationMeeting/Interview
Transcript: English(auto-generated)
Welcome, everyone. So I'm speaking in front here, but actually, I'm talking about the great work that's been done by the whole team of map server. So I've been more active in the old days, in like 2003, when we had the first map server meeting. So that's 10 years ago that the map server developers actually met for the first time at the first map server meeting in Minneapolis.
I was more involved in coding in those days. These days, we have a whole team of people. The team has grown. I'm going to introduce them at the end. Thomas Monfau is listed as co-presenter. He's the most active, the most prolific map server developer these days. And most of what we're going to talk about is actually his creation. Do I speak a lot enough for the back?
Yes? OK. So an overview of the presentation, I'll start by talking about the main features of the latest stable releases. 6.2 was a year ago, but since many of you may not have heard of some of the features, I thought it was worth going through them quickly. Then we'll talk about 6.4, which was released a couple of days
ago, and our plans for the future for 7. So you'll see that there's lots of exciting stuff going on, even though the project is fairly mature. And then we'll end with a couple of updates on the admin side of the project. So the overview of the releases in November 2012,
we released the suite, what we call the map server suite, which had map server, the one that you've known for several years. And then we included map cache, which was the tile caching environment, and TinyOWS, the WFS, transactional WFS server. So we released all of them at the same time, because they all joined the project back in 2012.
That was map server 6.2. And a couple of days ago, we released map server 6.4 at the same time as map cache 1.2. There's no release of TinyOWS because there has not been any major development on that front. So 1.1 is still the current version of TinyOWS. The 6.2 release was really about rendering enhancements.
So we'll go over each of those relatively quickly. First of all, we added support for SVG symbols. So now you can use SVG vector symbols, which can have multiple colors in your map file definitions, which is a really great feature to have. Support for mask layers.
You can use a vector layer as a mask on top of your underlying layers. And as a result, that allows you to filter the output that's going to be produced by the software. So you can control that mask with the query. And then this way, control through the URL which part of the map is actually going to be hidden and which part is going to be visible.
More precise symbol placement. Those of you who have filed with the symbols may have realized that it used to be that the symbols were always anchored to the gravity center of the symbol. And now we've added keywords, anchor point, and polar offset keywords. I won't get into the details, but you
can find them in the docs. But they allow you to fully control the positioning of your symbols. And one of the big, big, big features was support for complex symbology, allowing us to do stuff like the meteorology symbols. Essentially, it allows you to have multiple labels and symbol components all treated
as a single entity, which is treated in the label cache and in the collision detection as a single entity. That was not possible before because the labels were treated separately. So that allows things like this, which was not really easy to do before. And another one was label leaders. So it allows you to label smaller polygons,
even though the label could not fit inside. And vector fields for the weather world. Again, that's a useful way to display natural phenomenons, like wind direction, for instance. The input is two raster bands of u and v vector values.
And maps automatically computes, samples the raster and computes on the fly the vector direction and magnitude based on the spacing that you've specified in the map file. So it allows you to have vectors that are always consistent as you zoom in and out. So that's it for 6.2. I went through it quickly because many of you
have been using that already because it was out for a year. Now, 6.4 was released a couple of days ago. This time, there's still some rendering enhancements. But we also got some new features on the processing side. So the first one is on-the-fly contour generation.
Some of you may have used in the past the good old contour program, a common line utility. So we've used that algorithm, brought it into map server. And now, you can have a layer with connection type contour. And you specify a raster, a DEM raster band. And it's going to generate the contours on the fly based on the elevation and the interval that you specify.
So that gives you something like this on the fly out of a DEM. As you can notice, the contours are a bit jaggy when they're generated by good old contour. So for that, we added line smoothing. So those contours can be smooth to look more like this, which is a little more appropriate for rendering a map.
To do that, we've added support for the geom transform at the layer level. And we've implemented one of the operators that's available in that geom transform. It's called smooth SIA. SIA stands for smoothing by iterative averaging. So it's a relatively simple algorithm,
but that kind of does the job. Except that when you do that, it's averaging. So it's kind of shrinking the contours a little bit. And contours, you want them to be as accurate as possible. So the other parameters are actually tweaks you can make on the algorithm to allow you to make your contours fit more closely to reality. Once again, I defer you to the documentation
to find out more about them. So talking of the geom transform at the layer level, so we've added the smooth SIA plus support for buffer, simplify, the usual simplify with topology preserve,
and generalize operator. So that's the ones that are available right now. Doesn't mean you're, sorry? With some of the geos. Yeah, well, these two are using geos. This one is using a simple function that was a very, very simplistic generalization method. And the buffer is using geos as well, yeah.
Another feature that's added in 6.4 is the support for list expressions. You may have seen yourself in the past having to match three values, for instance, to a given class. So you'd have to use either a regular expression like this or use a logical expression. But both had a little more overhead in writing them,
but also in the processing time. So now you can have an expression with curly brace. Curly brace. Everybody likes curly brace. And you just list the possible values. And so that's almost as optimal as using constant, string constants. Content dependent, get legend graphics.
That's something that people have talked about for a while. You know, I got a legend and all the possible layers are listed in my legend, but then there's not features for all of them in the map. So one thing that's been added is the ability to say, I want my legend to contain only features that are actually visible in this map
based both on scale and actually objects that are present there. So this is used mostly with get legend graphics in WMS. So this is like the turnkey version is available with WMS, but there's also a way through map script, I believe, to be able to, no, it's not. Through the CGI only, okay.
So the way it's triggered is, for those who know the get legend graphics with WMS, normally it's just, you specify your layer and get legend graphic and the output format. But if you add SRS with height and bounding box, then it's gonna trigger that feature automatically.
In the past, I believe we used width and height to specify the size of the actual legend sample that was gonna be generated. So the change of behavior here is that it's gonna, this is actually specifying the width and height of the map that you're referring to so that it can be used to calculate scale to figure which objects are visible or not.
So that's a little change in behavior if you've been using the width and height with get legend graphic in the past. Scale token, if you're working with maps where as you zoom in to the map, you're showing more and more features or less features depending on what type of maps you're doing.
But you may have had to have several layers with a very similar definition except the data statement was a little different based on scale visibility. So now we've added a scale token keyword where you specify your variable that you pass in the URL like person table, and then you specify for each scale range which value that variable should take. Then in your data statement, you refer to that variable.
So that variable is set based on the scale of the map that's being rendered. So it allows you to select for scales from zero to 999, or is it 999 or 1,000? Which way is the inclusive? Okay. So for scales below 1,000, then you're gonna use roads.
And anyway, you can get examples in the docs, but you get the idea, right? SVG symbology in 6.2, we said we added support for SVG symbols. Then what we were using is libsvg with libsvg kero that was a component that's kind of being abandoned.
It was limited in features, plus it is kind of being abandoned. So it's not been removed yet in 6.4. It is still there, but it's kind of limited in features. What's been added in 6.4 is another library which is called librsvg that's supported.
It has more complete support for SVG symbols except that one thing we need to be aware of, it's a GPL license. So if you compile your map server with it, everything you build with it becomes GPL. So those who are packaging black box binaries need to be aware of that. That's a feature they may want to take out of the build.
And there's a large number of dependencies, but usually they were supported by the Linux distribution. So that may be an issue only if you are actually building your own executables, not if you're using the pre-built stuff. And we migrated to CMake with map server 6.4,
which allows us, so we went away from the autoconf stuff on Windows and the Windows, handmade Windows make files on Windows. Autoconf on Linux, handmade Windows make files. So that allows us to have a unified build environment and to clean up some of the historical stuff
that was in the autoconf scripts. So the recipe for building now looks like this. So that was the main highlights of 6.4. Now there's still stuff that's already in the pipeline for 7. We're gonna call it 7 because there's some stuff that's gonna be refactored on the,
especially on the text render on the labeling side. But before I get into the features, we had two Google Summer of Code students this summer for map server. So it's a good thing. We didn't have any for a couple of years. One of them worked on UTF grid outputs. So some of you may or may not have heard about UTF grid.
Essentially, it's a way that Mapbox introduced with Tilemill, a way that you can specify, you can use, you can have more interactivity on top of tiles, of raster tiles without having to pass all the vector information. So what happens is this is an ASCII,
like an ASCII graphic of this map. And as I mouse over this map, it's gonna actually look up in a string array in JavaScript. And if it finds, like if I mouse over here, it's gonna find this. So it's gonna show Norway. So in JavaScript, in OpenLayers, I'm gonna be able to show the attributes without having to pass all the vector data,
which is much lighter than having to pass all the vector data. So this is not in 6.4. The student has completed the work. He has made it work. It requires an OpenLayers patch at the moment because it's using WMS and not, anyway,
I'm not getting into the details, but we were planning to finish, to polish the code and integrating it in seven. So in the next release. Another thing that's been worked on during Google Summer of Code is what we call Scribe UI. It's a UE for editing map files. So those who are missing map edit from the old days
will like to see that probably. Julien's talk after mine is gonna talk about that. So one of the big things in the Map Server 7 is gonna be a complete rework of the rendering, the labeling engine. That was so that we could support,
properly support Arabic languages. And so there's a, I have to remember because I wrote that slide a while ago. So if you take the unprocessed string, it's gonna look like this, and with bi-directional, which is what we used to do, it would look like this, but what you need in some languages
is to actually do some glyph shaping based on context in the string. So the correct way to represent this string is actually this. So we could get to that point, I believe, but not to this one, right? So now with 7, with Thomas's new work, we're gonna be able to do this properly. So this implied refactoring
the whole text rendering pipeline. It's using the half-bus library for the context-dependent glyph shaping. And the benefits are gonna be not only for this type of label rendering, but also will allow things like better way, better centering or spacing of characters when you have multi-line labels,
and probably better, more precise positioning around point symbols. Something else that's being added in 7 is layer-level encoding. If you deal with non-English languages or if you deal with data sources in different encodings, you may have had nightmares trying to write your expressions in your map file
because your map file has to be in one encoding, but then the data may not match the encoding, so the expressions don't match. So now in each layer, you can specify the encoding of the data source, just like you specified the projection, and then MapServer is gonna do the right thing. What happens internally is that everything is UTF-8
from now on inside MapServer, and also in all outputs that are generated. So the OGC documents that are generated are always gonna be generated in UTF-8, no matter what your data source is in. Complex symbology is something that we're working on. I mentioned it in another talk before,
but essentially it's to be able to do funky symbols like this, which are, in this case, military symbols, but it opens the door to all sorts of complex symbology. So in this case, the symbol is, what we get as a geometry for this symbol is actually one, two, three, four points, and the last one is defining the width of the arrow.
So MapServer cannot draw that currently, and the other ones are also cases that we can't draw currently. So what we are gonna need to do is have some kind of plugin system where we can actually manipulate the geometry and then pass it to MapServer so that MapServer can render it
the way the spec defines it. So, and to get to that, to be able to get to that point, something, to that point, something else we needed is to be able to, in the same specifications, one thing we had is a 16-character string defining the symbol, and we would have had to be able
to support the full spec, probably write like 200 or 300 classes, which didn't make sense, like lots of copy and paste. So what we ended up doing is implementing what we've called the style item JavaScript. So for those of you who know style item auto, it's a bit the same thing, but then you can write a JavaScript function that's gonna parse, look at the attributes of the shape for each shape,
and it's gonna return a class definition that MapServer will use to render that single shape, then it will destroy the class and pass to the next shape. So there's two things you can return, either a single style definition or a class which contains multiple styles. So that's a simple example. So in your layer,
you'll just add style item JavaScript colon slash slash in the name of your script, and in the code, you do whatever calculations you need to do, then you create a class, a style definition in this case and return it in JavaScript, and MapServer is gonna use that for the rendering. As I said, well, the next step is gonna be after that,
the rendering plugin. So using a similar mechanism, which is not defined yet, we have work to do to be able to modify the geometry. So that might likely be a new geom transform mechanism. So geom transform with a function in JavaScript that would modify the geometry and then return it to MapServer for rendering.
I'm gonna go quickly because I'm gonna run out of time. Filter translation support. So that's a way to enhance the performance of WFS. It's really under the hood. So I guess I save you the details here. And a bit of house cleaning in version seven is gonna happen. So we're gonna remove the GD dependency. It's old code that was not maintained anymore
now that we have AGG, which is much more performant and gives better, especially more performance on the quality of the rendering. Annotation layers are gonna be removed. They were deprecated before, but now they're removed. The good old bitmap fonts, tiny, small, medium, huge, are gonna go away.
We're gonna miss them. And because they were part of GD, so they're going away. And in all cases of things that are being removed, there's an automated file back. So things should continue to work, except maybe with a slightly different behavior. So now that I have maybe one or two minutes left. So those were the...
No, we'll probably do it. No, I'm almost done anyway. I just had so much to talk about. So now the quick, the admin side of the project. So what's happened in the last year, actually one thing, yeah, feature wise.
Thanks to Stefan Meisel, who's here. We are passing all WCS 2.0 test, which is currently in beta testing and maps are will be listed as one of the reference implementations. Or is it the one? Or are there two? One of? So it's pending actually releasing the test at OGC
because they're in beta right now. So map server is the reference that's been used to test the test. So that's in map server 6.4 and in 6.2.2, which has not been released, but it's the branch that if we make a version 6.2.2, that's gonna include the fixes, right? So that's one thing. So we're gonna get an official conformance certificate for that.
And WMS 1.3, Alnove Crystal has done some work to redo the test, rerun the test and submit them to OGC for WMS 1.3. And now we need to do the paperwork to get the actual piece of paper. So the PSC in 2011, when we had Tiny OWS join Olivier from Oslansia
who was the main Tiny OWS developer joined the PSC. And Michael Smith was added. He was a very active user and developer. So he was added to the PSC in 2011. This year, earlier in the year, Frank Wommerdam retired.
Thank you, Frank, for all your time. We'll miss you. You can come back at any time, Frank. And Stefan Meisel was added. Welcome, Stefan. So talking of the PSC, and I'd like to invite all the PSC members and developers to stand up. We want the group to... Oh, you are still a developer, Frank.
Is Evan in the room too? Yeah, I know he's shy, so he's not gonna stand out, but Jeff's there. So, Thomas, Thomas, I'll do a few introductions. So Thomas, Stefan, Thomas, Frank, Jeff, Mike. I'm sure I'm missing someone and I don't want you to feel upset.
I saw you know me. I've been talking for 20 minutes now. So that's the team that's making... And there's more people that you don't see here, but that's the team that makes the software work. Code sprints, we've been involved in the North American code sprint in March this year. We had about 10 maps of our developers, but that sprint also involves a good old poodle,
both GSGO moves and several other projects. And in Vienna, our next sprint is in Vienna, March 24th to 28th. And the sprint is so popular that we already have volunteers for 2015. So it's gonna be Philadelphia in 2015.
And there's talks. I don't know if it's gonna happen. There might be a combination of the QGIS and C sprint if we can have a venue big enough because QGIS is due to have their sprint around the same time in Europe. That's pictures of their sprints. So work, play, eat. And they had some great lobsters for us.
It's a bit dark, but the lobsters were awesome and there were tons of them. So we didn't starve. I guess the last slide about how to contribute. You can keep in mind that you are all power users. The users can contribute to the software. Even if you're not able to write code, if you're not a programmer, you can still contribute.
You can just test the betas when we're working on the release. Report bugs when you find them with a useful test case on GitHub. You can help with documentation, fork the documentation, add a new page, make changes, translate, and submit pull requests.
And Jeff and his team are gonna be happy to include them. And also just by helping other folks on the map server users list. If someone asks a question, you've been through that already, just help them. That's saving us time because then someone more experienced may not have to answer that question. And if you're a developer, but then bug fixes, patches, new features,
help with binary builds, all help is welcome. So that's it for my talk. Tough questions are gonna go to the...