Fusion with OpenLayers 3

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

Fusion with OpenLayers 3

GordonL
Hi all
I think fusion needs an overhaul pretty desperately.
First move to the new OpenLayers 3 API
(I'D be partial to Leaflet but it doesn't support MapGuide natively)

Second, the jxLib is really dead.
Perhaps GeoExt or jQuery should replace it?

With the move to OpenLayers 3 a lot of the mobile/tablet issues with fusion will be solved.

Is any of this on the timeline?

Thanks

Gordon

 
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

Jackie Ng
I definitely agree that Fusion is in a drastic need of an overhaul.

But this would be a massive undertaking of developer effort, and needs lots of discussions around:
 
 - What libraries/frameworks beyond the obvious OpenLayers to base the new Fusion on? I could lose 6 months easy in analysis paralysis weighing the pros and cons of jQuery/Ext/Dojo/Kendo/Bootstrap/Angular/React/Backbone/Ember/etc. My brain bleeds thinking about this anytime I think about starting a greenfield web frontend project.
 - How much of current Fusion (widgets/apis) do we want to preserve?
 - What bits of Fusion (widgets/api) can we afford to leave behind?
 - Do we keep the ApplicationDefinition spec for driving the Fusion viewer?
 - Many more questions!

We haven't seriously had any of these discussions.

- Jackie
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

swimming123
In reply to this post by GordonL
Thanks Gorden to spend  several days with us. We are going to re-develop Web Map using only MapGuide server with Sencha, ol3. For serious app development and performance reasons, I won't choose jQuery; Kendo UI need to pay. Sencha, GeoExt3 will be our choice.
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

GordonL
In reply to this post by Jackie Ng
Yes,
Apart from OpenLayers 3 - which is huge re-write, what about leveraging GeoEXT 3?  

I know its a wrapper for GeoServer, but it really has a lot of connections to OpenLayers 3 that be be used.

From a fusion perspective, the applicationdefinition is pretty good, so why not keep that, but drop JxLib and use GeoEXT (https://geoext.github.io/geoext3/)?

I like that the Legend.js example in the mapguide-rest examples is much faster than the legend in Fusion so that might be something to consider.

I would like to see a more open API to the Fusion idea, where we don't have to rebuild the FusionSF etc for widgets, but just add them as a separate but integrated JS library.

That way as each version rolls along.
There should no be a huge migration effort to all the customized layouts and widgets (I happen to know one municipality that was so entrenched in a customized Fusion implementation that couldn't upgrade MapGuide and they gave up and went with E$RI).

This site does not use Fusion or Ajax with MapGuide but has a complete re-write with extjs-4.1.1
http://cmnmaps.ca/sk/ (Thanks GeoMap guys!)

I really like this implementation too.




Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

Jackie Ng
The FusionSF model is a must. One minified JS and one minified CSS file on production is web app deployment 101. You are *never* meant to develop widgets against FusionSF.

As slick as the UI is, I would not adopt GeoExt or Sencha simply due to its license (GPL)

"Not licensed under GPL" is a non-negotiable requirement of any *library or framework* I would put into consideration.

- Jackie
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

GordonL
Ah the Not Licensed Under GPL is an issue.

What do you think of jQuery's GNU Expat license?
http://directory.fsf.org/wiki/License:Expat


I do like the Fusion interface, we just need to move to a more dynamic library other that jxLib.

I know what you mean about the Fusion.js and ANT - compression is always required.

I would love to see the ApplicationDefinitions evolve into something truly (madly,deeply)  modern.

Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

Jackie Ng
I almost forgot that I had explored the idea of a new Fusion a few years ago

https://github.com/jumpinjackie/fusion-next/tree/archive

The foundation was Dojo Toolkit and OpenLayers 2, which provided a proverbial kitchen sink of UI components that can easily replace whatever was in JxLib. The backend was the current Fusion PHP scripts copied over. It has ApplicationDefinition compatibility with support for a limited set of widgets.

The project was conceptually sound, but I stopped work on this project because mapguide-rest took over as my main development focal point.

Dojo was good enough for ESRI (it's "trusted by" them on their home page), it's probably good enough for us too.

- Jackie
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

swimming123
This post was updated on .
In reply to this post by GordonL
Pretty good start to use ol3, GeoExt3(Sencha6.0) and MapGuide server engine to create a map with 244 layers in 10TM. 
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

GordonL
In reply to this post by Jackie Ng
Wow, the fusion next is a great start moving away from JxLib and using Dojo is neat too.

Nice job with the OL3 too Swimming...
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

GordonL
In reply to this post by Jackie Ng
Jackie, is there a way to try out the fusion-next project?  

A path to pass to the fusion-next page?

i.e. http://localhost/mapguide/fusion-next/templates/mapguide/claro/?mapName=Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

swimming123
This post was updated on .
In reply to this post by GordonL
Good things to use GeoExt3(Sencha) so far as I know: JS MVC and SPA(single page application) structure, so it's good for mobile, also one step away to convert as native App; Second, if you view source from Sencha project, it's very clean(see below is my above map); All js is similar like built and compiled; Last thing I believe Sencha is a much bigger community than dojo(AMD), I like lots of stuff about Sencha for example one class one file, class name convention.

About one month ago, we also created one map with ArcGIS Server10.3(we only have develop license), created several functions such as cluster, dynamic legend exactly same with ArcMap Desktop, display corrdinate values in 10TM, UTM11,10,12,14 at same time,  zoom to location by dominion land system etc, we all follow AMD(load library, create customized function). But comparatively I do like Sencha very much.

Here is my above GeoExt3 simple Map web page view source result:

<!DOCTYPE HTML>
<html manifest="">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

    <title>MyGeoExtApp</title>
        <link rel="stylesheet" type="text/css" href="http://openlayers.org/en/master/css/ol.css">
    <script src="http://openlayers.org/en/master/build/ol.js"></script>
   
    <script type="text/javascript"> var Ext = Ext || {}; // Ext namespace won't be defined yet... // This function is called by the Microloader after it has performed basic // device detection. The results are provided in the "tags" object. You can // use these tags here or even add custom tags. These can be used by platform // filters in your manifest or by platformConfig expressions in your app. // Ext.beforeLoad = function (tags) { var s = location.search, // the query string (ex "?foo=1&bar") profile; // For testing look for "?classic" or "?modern" in the URL to override // device detection default. // if (s.match(/\bclassic\b/)) { profile = 'classic'; } else if (s.match(/\bmodern\b/)) { profile = 'modern'; } else { profile = tags.desktop ? 'classic' : 'modern'; //profile = tags.phone ? 'modern' : 'classic'; } Ext.manifest = profile; // this name must match a build profile name // This function is called once the manifest is available but before // any data is pulled from it. // //return function (manifest) { // peek at / modify the manifest object //}; }; </script>   
   
   
    <script id="microloader" data-app="65add8b2-3b1b-4257-8021-9c206d81e664" type="text/javascript" src="bootstrap.js"></script>
</head>
<body></body>
</html>
Reply | Threaded
Open this post in threaded view
|

Re: Fusion with OpenLayers 3

Jackie Ng
In reply to this post by GordonL