Here's a Mapguide Demo our teams at Ennoble Consultancy and Explore Australia put together recently for Telekom Malaysia.
It uses my Open Layers patch for serving MapGuide cache tiles directly via a webserver and a copy of a fully seeded MapGuide tile cache.
Friday, August 29, 2008
Kuala Lumpa MapGuide Demo
Thursday, August 28, 2008
Some ponderings on FDO Schema's
"Schema
In RDBMS terms, a Schema is a collection of tables, indexes,
views, etc. in a database. Feature and RDBMS schemas do not correspond 1:1.
A Feature Schema may be stored in different RDBMS schemas and an RDBMS schema
might be composed of multiple logical schemas."
http://fdo.osgeo.org/glossary.html
As a result of this loose definition we have no simple standard for schema and class naming across providers.
Here are some examples of different schema & class names currently in use in FDO
OSGEO.SHP reports Default:shpfilenamespot the pattern ?
OSGEO.Gdal reports default:default
KingOracle reports KingOra:ZAC~BUILDINGOUTLINES~SHPGEOM
OSGEO.OGR reports OGRSchema:BUILDING
MySql reports Fdoreports:aquifer_property
SDF reports what ever was set as the schema name
PostGIS has been reformed following this discussion
http://www.nabble.com/Is-there-a-Feature-class-naming-convention-to15021175s18162.html#a15021175
http://trac.osgeo.org/fdo/ticket/310
I really don't see the need to inject provider names into the mix? ever.
It's really confusing for people new to FDO, here's a few ideas to make
things simple
1. Providers which don't support multiple schemas, should report an empty schema,
all their content lives in that single schema ( ie was default).
2. Providers which have native schemas with multiple real schemas,
should represent those available schemas to GetSchemas unless over-ridden
in the connection string or by custom mappings.
3. The tables in the user schema are listed in empty schema (default) conceptually
potentially twice.
4. Class names for databases are normally tablename, unless qualified which
then has ~COLUMN_NAME appended. (Coz if the are multiple geometries, FDO requires
to know which one is the identifier)
5. Class names for file based providers is based on their file name as current
6. Drumroll, The empty schema ":watercourses" could be also just "watercourses"
so lets see that means
OSGEO.SHP reports filenamewhat's peoples thoughts on this?
OSGEO.Gdal reports filename
KingOracle reports schema:tablename or if connected as "schema" then just tablename
OSGEO.OGR reports filename
MySql reports schema:tablename or if connected as "schema" then just tablename
SDF still reports what ever you like as a schema name
Tuesday, August 26, 2008
Finally a decent browser home page!
Firefox 3 has some pretty funky features with places, it's ability to remember
what you search for, does make surfing much nicer.
I use iGoogle for a quick flick through rss feeds, but I think I have a new home page - AutoDial.
Basically it's like dashboard of all the most often / recent links you have visited.
Applying the old 80/20 rule, I reckon this means a lot less typing whilst surfing!
Great for all of those dev urls as well.
(I borrowed the picture, mine has internal urls all over it)
Monday, August 25, 2008
Handy little diagram tool - Pencil Project
Pencil is a nice and simple ( i.e. not Visio ) add-on for Firefox which allows for drawing a quick diagram or even a basic application UI's. It supports drag and drop, it's free and it only requires Firefox 3.
Once install it's available as a link off the Tools menu.
It was one of the 3 Best New Add-on's in the Extend Firefox 3 Contest
Friday, August 22, 2008
Mapguide FDO, making oracle describe schema perform
(this was posted on fdo-users)
This is the query being used at the moment for the describe schema in King Oracle,
(I did rewrite the sql a bit, I got rid of there where clause)
SELECT a.owner, a.table_name, a.column_name, a.srid, a.diminfo, b.cs_name,it's pretty slow because of the use of the all tables, I think there's
b.wktext, c.index_name, d.sdo_layer_gtype, s.sequence_name,
d.sdo_root_mbr, NULL o1, NULL o2, NULL o3, NULL o4, NULL o5, NULL o6,
NULL o7, NULL o8, NULL o9, NULL o10, NULL o111, NULL o12
FROM all_tab_columns t
INNER JOIN all_sdo_geom_metadata a
on t.owner = a.owner
AND t.table_name = a.table_name
AND t.column_name = a.column_name
LEFT JOIN MDSYS.cs_srs b
ON a.srid = b.srid
LEFT JOIN all_sdo_index_info c
ON a.owner = c.table_owner
AND a.table_name = c.table_name
LEFT JOIN all_sdo_index_metadata d
ON c.sdo_index_owner = d.sdo_index_owner
AND c.index_name = d.sdo_index_name
LEFT JOIN all_sequences s
ON s.sequence_name = CONCAT (a.table_name, '_FDOSEQ')
--and s.sequence_owner=t.owner criteria
ORDER BY a.owner, a.table_name
a bug in there as well with the sequence join, it will match on duplicate
table names in other schemas.
but the performance goes to hell if you add the s.sequence_owner=t.owner criteria back in
if we just use the user views, that problem disappears
SELECT a.table_name, a.column_name, a.srid, a.diminfo, b.cs_name,the performance improvement and load reduction is quite dramatic, the
b.wktext, c.index_name, d.sdo_layer_gtype, s.sequence_name,
d.sdo_root_mbr, NULL o1, NULL o2, NULL o3, NULL o4, NULL o5, NULL o6,
NULL o7, NULL o8, NULL o9, NULL o10, NULL o111, NULL o12
FROM user_tab_columns t
INNER JOIN user_sdo_geom_metadata a
on t.table_name = a.table_name
AND t.column_name = a.column_name
LEFT JOIN MDSYS.cs_srs b
ON a.srid = b.srid
LEFT JOIN user_sdo_index_info c
on a.table_name = c.table_name
LEFT JOIN user_sdo_index_metadata d
on c.index_name = d.sdo_index_name
LEFT JOIN user_sequences s
ON s.sequence_name = CONCAT (a.table_name, '_FDOSEQ')
ORDER BY a.table_name
difference is that user_tab_columns lists the objects owner by the users,
while the all_tab_columns lists everything that the user has access to
when using these tables, a ALTER SESSION SET CURRENT_SCHEMA='%kingoracle.oracleschema%'
would be required at the start of the session if you use a different
username than the specified oracleschema
small schema
q_user_schema (Datasource=gis, Time=16ms, Records=4) that's roughly 100 times faster
q_all_schema (Datasource=gis, Time=1750ms, Records=4)
big schema
q_user_schema (Datasource=gis, Time=234ms, Records=146) that's roughly 6.5 times faster
q_all_schema (Datasource=gis, Time=1531ms, Records=146)
not only is it faster, but it's also a lot less work for the database
Wednesday, August 20, 2008
Earthdance Melbourne 2008 will be at Docklands!
Spring is in the air again and that means Earthdance is coming up again!
Wednesday, August 13, 2008
Tiny little Openlayers & Mapguide & Fusion patch fest
I think we may of finally got most of the all the bugs out of the mapguide implementation with Openlayers.
This little screen shot, without any pink tiles, is the result of all the bits below working together..
If you doing much with Openlayers and Mapguide, I think you will find both these patches useful
- Mapguide dynamic overlays fails
- A Mapguide Tiled map with all the co-ordinates correct :)
var metersPerUnit = 111319.4908; //value returned via MG API
turns out that's all required in order for a mapguide tiled layer to display with correct co-ordinates, aside from extents and scales
var inPerUnit = OpenLayers.INCHES_PER_UNIT.m * metersPerUnit;
OpenLayers.INCHES_PER_UNIT["dd"] = inPerUnit;
OpenLayers.INCHES_PER_UNIT["degrees"] = inPerUnit;
OpenLayers.DOTS_PER_INCH = 96; - A Sheboygan example of Mapguide tiled map, Untiled map and untiled map as Overlay all in one map, which makes a good starting point
- Fusion fix for the Mapguide error:The value cannot be less than or equal to zero.
- Finally a sainty bug against mapguide, "The value cannot be less than or equal to zero." is meaningless with out context
Life should be a little bit easier for anyone using Mapguide and Openlayers now!
Monday, August 04, 2008
An anthropological introduction to YouTube
I found this super interesting video over on groklaw, 88% of YouTube is New and Original Content, Professor Says
perhaps the best video I have ever watched on YouTube
InvalidTagdata error with CF8
Just a quick heads up, the xml tag <metadata> will be replaced by <InvalidTagdata> using Coldfusion if Enable Global Script Protection is enabled under the Coldfusion Administrator...
grrr.... :)