Monday 18 December 2023

Minor change of plans

There will be a slight change of plans in the MapGuide Open Source 4.0 release timeline.

Namely, the next release will not be the Release Candidate, but rather a 2nd beta release.

The main driver behind this decision is because of my intention to remove the recently introduced support for Mapbox Vector Tiles. While I initially had high hopes with this implementation, additional testing with data outside of the example Sheboygan dataset has revealed rendering issues I do not have the capability to address. Rather than ship a half-baked implementation that may never bake fully, I'd rather bow out while we still can, remove this immature implementation, and leave MVT tile generation to dedicated external tools.

A 2nd beta release will also mean that the other changes I want to get in will also have some time to bake before the Release Candidate stage.

I am hoping the 2nd beta release will be out late January in the new year.

Monday 4 December 2023

Announcing: mapguide-rest 1.0 RC6

6 years later, I have finally put out another release of mapguide-rest!

The reason for finally putting out a new release (besides being long overdue!), is that I needed a solid verification of the vanilla SWIG API binding work for MapGuide Open Source 4.0 and mapguide-rest was just the ideal project that touches almost every nook and cranny of the MapGuide API. So if mapguide-rest still works with the PHP binding in MapGuide Open Source 4.0, that is as good of an endorsement to the reliability and readiness of these bindings.

For this release of mapguide-rest, it is compatible with the version of PHP that comes with:

  • MapGuide Open Source 3.1.2 (PHP 5.6)
  • MapGuide Open Source 4.0 Beta 1 (PHP 8.1)
Besides being compatible with the upcoming MapGuide Open Source release (and the current stable one), this release also adds a new series of APIs to perform various geo-processing tasks. All of which are available to try out in the interactive swagger API reference.




Special thanks to Gordon Luckett and Scott Hamiester for assistance in internal testing of many internal builds of mapguide-rest that finally culminated in this long-overdue release.

Now that this is out of the way, it is back to MapGuide development proper and getting closer to the 4.0 release.

Wednesday 13 September 2023

Announcing: vscode-map-preview 0.6.0

This impromptu update fixes up Stamen tiles support to point to the new infrastructure managed by Stadia Maps.

Since we have to do this, we've taken this migration as an opportunity to add support for many more base layer types. 

The full list of base layers supported is now:

However, certain Bing and Stadia Maps layers will only be available in the base layer switcher if you provide respective API keys for these services through new configuration properties.

Don't like these base layers and want to bring your own? You can do that now too! If you have an XYZ tile set or WMTS service you want as a backdrop for your map previews, you can define such layers in your settings.json like so:

And they shall appear in the base layer switcher as layers you can switch to



This update also refactors the viewer HTML preparation by fetching the document (to be previewed) content on viewer init instead of embedding its content into the viewer HTML. This should improve responsiveness when previewing larger files, to the point that you can make out the new preview preparation message.

However, as I started to test this with bigger and bigger files, I eventually found a limit where the VSCode APIs will not cooperate with us. This limit is the point where VSCode will either not do syntax highlighting or tokenization or both and when we try to preview such a file, it will silently fail.

For this update, we will show a better error message on such files.

So for those who are hoping to use this extension to preview GeoJSON files whose size is in the range of gigabytes, sorry there's nothin I can do here 🤷‍♂️🤷‍♂️🤷‍♂️🤷‍♂️ I think at that point you are better served by using actual GIS tools/software for this purpose.

Now this this update is out the door, it's back to mapguide-rest development.

Tuesday 12 September 2023

Another temporary detour

While I was deep into reviving mapguide-rest to make sure it works with the PHP 8.1 bundled with MapGuide Open Source 4.0, I missed the memo that Stamen Maps is now under new management: Stadia Maps.

The most important aspect of this announcement was that come October 2023 (a month from now), current stamen tile URLs may stop redirecting/working and you should have migrated over to Stadia Maps by then.

Because Stamen tiles carried the same role as OpenStreetMap as a freely accessible base tiled layer for various open source projects of mine, this announcement has thrown a spanner in my works because come next month, Stamen tiles may not work and for continued support for these layers would require migration over to Stadia Maps.

So I have momentarily suspended my work on mapguide-rest to give focus to one of my other projects affected by this announcement: My VSCode map preview extension.

Because continued support for stamen map tiles requires migrating the extension over to use Stadia Maps, we might as well take this opportunity to add support in the extension for other base layers that Stadia Maps offers. And while we're at it, we might as well go all the way and add in Bing Maps, XYZ and WMTS base layers as well.

Or, just have a gander at this clip for a taste of what the next version of the VSCode map preview extension can do!


The next version of the extension will drop real soon and then it is back to mapguide-rest development.

Saturday 12 August 2023

MapGuide Maestro 6.0m12 nuget packages now available on nuget.org

nuget.org support finally provided a resolution on my account issue and I was able to regenerate my publishing keys.

As a result, the 6.0m12 release (6.0.0-pre500) nuget packages are now finally available on nuget.org

We now return to your regularly scheduled programming ...

Monday 7 August 2023

Where's the new Maestro API nuget packages?

There were a few things I left out of the previous announcement that I'll use this post to address.

Firstly, the 6.0m12 release of MapGuide Maestro formally drops all Fusion editor support for integration with Google Maps tiles and services. We no longer support Google Maps integration in Fusion and the editor in previous releases gave the false impression that this is still possible. That is no longer the case with this release.

Secondly, the more important thing (and the subject of this post) is that if you are using the Maestro API and consume this through nuget packages from nuget.org you may be wondering why there are no new versions?

The answer to that one is simply: My nuget package publishing keys have expired and something in the nuget.org website or something with my nuget.org account is preventing me from regenerating these keys or to generate a fresh set. As a result, I currently cannot upload any new nuget packages to nuget.org

But do not fret, because there is an alternative solution.

As part of the MapGuide Maestro release on GitHub, the nuget .nupkg files are also included


From here, you can set up a local directory-based nuget package source, drop the .nupkg files into it and the this version of the package is available to install in your Visual Studio solution.

If/when I get a resolution on this publishing key matter, I will upload the .nupkg files for this release and make another announcement. Until then, this local package source is a suitable workaround.

Wednesday 2 August 2023

Announcing: MapGuide Maestro 6.0m12

Next stop on the tour: A new release of MapGuide Maestro

This release includes the following notable changes.

Improved MapGuide Open Source 4.0 authoring support

This release improves the MapGuide Open Source 4.0 authoring experience with support for the new label justification setting for basic stylization labels.


This setting is part of the new v4.0.0 Layer Definition XML schema, whose .xsd file is now also included with this release (so XML validation against this schema will work)

Fusion editor enhancements for mapguide-react-layout features

This release includes several enhancements to the Fusion Flexible Layout editor to support various features that can be taken advantage of when loaded into a mapguide-react-layout viewer. These new enhancements are accessible from the layout settings panel and require the latest release of mapguide-react-layout to leverage these new features.


The Manage Custom Projections button opens up a new dialog that lets you manage and pre-register custom proj4 definitions for your application. By pre-registering these definitions in the Flexible Layout document itself, you can avoid needing to perform a epsg.io lookup for any projections found in the viewer init process that is not EPSG:4326 or EPSG:3857

The Manage Settings button opens up a different dialog that lets you managed the app settings in the Flexible Layout document. These are arbitrary key/value pairs that your mapguide-react-layout viewer will be initialized with and your viewer code can read such settings at runtime to control and drive whatever custom functionality you may have.


Other Changes

  • Improved layer editor UI responsiveness when layer points to a feature source with a really large schema
  • Increased schema walk/describe timeout to handle really large schemas
  • Fix: Connection error dialog buttons are no longer cut off
  • Fix: Transactional package drag-and-drop loading works again
  • Fix: Broken rest addin due to missing RestSharp dependency
  • Fix: Fill/line pattern dropdowns in layer editor are working again
  • Fix: MgTileSeeder will now accept bounding boxes outside the [-90, -180, 90, 180] lat/long domain by clamping any outside coordinates to be within this domain.
Now onto the next stop: Finally giving mapguide-rest some long deserved attention!

Wednesday 19 July 2023

Announcing: mapguide-react-layout 0.14.9

Our journey needed to make a temporary detour, with another release of mapguide-react-layout.

This release has the following notable changes

Legend layer and group customization support

This release provides a new viewer init option to allow layer and group elements of the Legend component to be augmented with additional HTML content. For example, we can use this to add a download link for specific layers (how to actually implement the download link is an exercise left to you the reader)



See this comment for an example of how to customize the layer and group elements.

Reduced excessive re-rendering

In the process of implementing the above feature, we discovered that some components (the Legend component in particular) did a lot of pointless re-rendering which contributes to sluggishness in viewer performance.

For this release, great efforts were made to ensure that component re-rendering is the result of legitimate changes to component state and not from pointless re-rendering from bogus shallow state "changes"

Removed IE-specific polyfills and workarounds

Internet Explorer ceased to be a supported browser by Microsoft for some time now. This release formally removes our various IE-specific workarounds and polyfills that were only there to support this ancient browser.

Other changes

  • The urlPropsIgnore setting is now considered when the viewer updates the URL state
  • The viewer bundle patches OpenLayers to log a console warning and abort rendering when attempting to render a map overlay image with a width/height/scale/dpi of 0
  • Fixed an issue where no map images are rendered if the browser zoom is below 100%

Friday 2 June 2023

Announcing: mapguide-react-layout 0.14.8

We've arrived at the next stop on the tour, a new release of mapguide-react-layout

This release has the following notable changes

Map Definition with XYZ tileset restriction lifted

MapGuide Open Source 4.0 removed the restriction that Map Definitions cannot link to a XYZ tileset definition. This release of mapguide-react-layout takes advantage of this removed restriction by now supporting loading of a Map Definition that links to a XYZ tileset.

Support for loading custom projections and app settings from an Application Definition

The beauty of the Extension element in an Application Definition document (and why its XML schema has not required a revision since its introduction) is that we can put any content in there.

With this release, we are taking advantage of this fact by supporting the ability to read custom projections and app settings from an Application Definition if the right elements are present in the root Extension element of the Application Definition.

By registering custom projections in the Application Definitions, we can register custom projections with the viewer without requiring an epsg.io lookup.

The next release of Maestro (the next stop on this tour) will have dedicated editors for specifying custom projections and app settings. So stay tuned to see how this feature can be used.

Modal dialog size/positioning now preserved

The redux state around modal dialogs has been reworked so that size/positioning is now preserved. This means that if you close a modal dialog and re-open it later on, it will retain the previous size/positioning it had previously, as demonstrated in this video.


MapGuide Base Layers now has its own opacity

Previously the opacity of MapGuide Base Layers was coupled to the opacity of the MapGuide Map. With this release, MapGuide Base Layers now has its own opacity setting.



Other Changes

  • OpenLayers updated to 6.15.1
  • Support disabling custom cursors through a new DISABLE_CURSORS app setting (1 to enable, 0 to disable)
  • Fix potential stale legend state from dispatched update action
  • Fix epsg.io lookup
  • Support Coordinate Tracker with only one projection specified
  • Un-break viewer API drawing example
  • Restore selection appending while holding down SHIFT key
  • Fix viewer state not pushing to url


Download


Wednesday 17 May 2023

Announcing: FDO Toolbox 1.5.3

Here's the first stop of the tour, a new release of FDO Toolbox.

I knew that a new release of FDO Toolbox would be coming when I was using the previous 1.5.2 release and it spectacularly failed in my dogfooding of trying to load some GDA2020 SHP files to SQL Server. The actual problem was actually pretty minor, but this inevitably started a chain of dealing with many other annoyances and reported issues, culminating in this release you see here.

Here's a summary of notable changes in this release.

The configuration support check has been fixed so that the configuration doc field is enabled based on actual provider capability check instead of the previously (dumb) approach of checking the provider name. This means the configuration document field is no longer disabled when connecting to PostgreSQL/PostGIS databases and one can finally supply a XML configuration document to apply schema overrides!


The data store editor in standalone mode now supports deleting schemas, to support the common FDO schema override use case of trimming out extraneous schemas and feature classes.



The annoyance of loading a saved bulk copy definition file and a whole bunch of connections with "Connection1/Connection2/Connection3" names being created is now fixed. We will now try to use the original name on the definition file if there is no open connection using the same name.


Also did you know that FDO Toolbox has a neat little feature to help you easily visualize geometry WKT?


You probably didn't know because this feature was hidden in the depths of the FDO Expression Editor when editing FDO expressions or filters and could not be accessed on its own.

That's why in this release, the Geometry Visualizer is now also accessible from the Tools menu.

Finally, to return back to the original issue motivating the production of this new release, the ExtendedCoordSys.txt support file for the SQL Server FDO provider has been updated to match the copy from current FDO trunk and has been updated with a CS alias mapping for GDA2020, allowing one to create spatial contexts on a SQL Server data store with this particular coordinate system (and many others!)

Now onto the next tour stop!

Download

Friday 5 May 2023

The "I haven't forgotten about you $PROJECT" tour

As I said near the end of my MGOS 4.0 Beta 1 announcement, I will be momentarily stepping away from MapGuide development/maintenance to give some of my sibling projects in the MapGuide/FDO space some long-overdue attention.

So for the next few weeks, I will be embarking on the "I haven't forgotten about you $PROJECT" tour with stopovers at the following projects:

mapguide-react-layout

Next Release: 0.14.8

Objectives: This will be the last release in the 0.14.x series and the last release to officially support Internet Explorer.

MapGuide Maestro

Next Release: 6.0m12

Primary Objective: This release will have authoring parity with MapGuide Open Source 4.0 Beta 1
Secondary Objective: Assorted fixes and minor enhancements

FDO Toolbox

Next Release: 1.5.3

Objective: Some fixes for bugs and usability problems reported since 1.5.2

mapguide-rest

Next Release: 1.0 RC6

Yes! I am finally giving this project some very-overdue attention!

Primary Objective: Make sure it is compatible with PHP 8.1 that is bundled with MapGuide Open Source 4.0 Beta 1. Also doubles as a secondary sanity test of the new vanilla SWIG-generated PHP bindings, which is my main motivator for revisiting this project.

Secondary Objective: See if we can do this will still being able to support older PHP versions bundled with older MapGuide versions. If this is not tenable, we may need to branch codebases and make separate releases. I hope that this is not the case.


When I finish this tour, then I will be returning to get MapGuide Open Source 4.0 to the final release finish line



Wednesday 5 April 2023

Announcing: MapGuide Open Source 4.0 Beta 1

Due to real life priorities and commitments, this release look longer than expected to finally come to fruition, but that's all in the past because we're finally here! The first (and probably only) beta release of MapGuide Open Source 4.0 is finally available for the following platforms:

  • Windows
  • Ubuntu Linux 22.04
  • CentOS Linux 7.0
Some notable changes / improvements over the previous Preview 4 release are detailed below.

GeoJSON output improvements

The GeoJSON output support has several improvements in this release:
  • Where possible, the GeoJSON will now always include the crs property (if the source data's coordinate system has an EPSG code representation), allowing for the GeoJSON content to self-identify its coordinate system.
  • GeoJSON from WFS GetFeature requests will now properly transform feature data if a different SRS/CRS is specified in the query parameters
  • Such requests that return GeoJSON content now properly return a application/json mime type

Additional security options for mapagent hardening

Currently, an Anonymous (guest) user or session can read any resource in a MapGuide Server's repository via the mapagent HTTP endpoint. While this capability is required for certain client applications to work properly (for example, mapguide-react-layout needs to be able to read WebLayout/ApplicationDefinition/MapDefinition resources as part of viewer initialization), it doesn't mean that *every* resource should be allowed to be read by anonymous users/sessions.

In particular, Feature Sources rarely need to be read by anonymous users/sessions and it may be considered a security risk to some that connection settings in such Feature Sources (especially ones that connect to relational databases) can be read by anonymous users/sessions, exposing names of internal db servers in the process.

The current resource permission model in MapGuide does allow for read access certain resources to be denied (in their resource headers), but this model is a sledgehammer approach. (ie. It will break rendering operations that need to query data from a feature source you just denied access to in their resource header).

We need a more fine-grained approach where we can deny direct resource API access operations to things like feature sources, but still allow resource API access operations to such resources in the context of things like map rendering.

This release introduces several new webconfig.ini properties to help reduce the attack surface of the mapagent in this regard.
  • AnonymousDenyGetResourceContent
  • AnonymousDenyGetResourceData
  • AnonymousDenyGetResourceHeader
These properties accept a comma-delimited list of resource ids or resource id prefixes and when set, if an anonymous user/session attempts a GETRESOURCECONTENT, GETRESOURCEHEADER or GETRESOURCEDATA with a resource id that matches any id or prefix specified, the mapagent will deny them access to that resource.

With this feature, you can reduce the attack surface of your mapagent by reducing anonymous resource access to only resources needed for a MapGuide client application to function.

Please note that this feature only covers the mapagent and not your custom application code.

Web Tier Component updates

This release bundles updated web tier components:
  • PHP 8.1.17
  • Apache httpd 2.4.56
  • Apache Tomcat 9.0.73

Some long-standing bugs/limitations finally fixed!

A 14-year old bug where un-formatted WebLayout XML cannot be loaded has finally been fixed.

Another 14-year old limitation where labels under basic stylization is always left-justified has been addressed with new options in the 4.0.0 Layer Definition schema allowing you to control the feature label justification.

Sorry for the long turnaround on such issues. Sadly, one person can only do so much.

What's next?

Before we begin the journey to Release Candidate (and then Final release). I will be stepping away from MapGuide development/maintenance work for a few weeks to give some of the surrounding projects like Maestro and mapguide-react-layout some long needed attention, and I expect new releases of MapGuide Maestro and mapguide-react-layout during this period as a result.

Once that is out of the way, then it is back onto the 4.0 release train, driving it to its final destination.