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:shpfilename
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
spot the pattern ?

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 filename
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
what's peoples thoughts on this?

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,
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
it's pretty slow because of the use of the all tables, I think there's
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,
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
the performance improvement and load reduction is quite dramatic, the
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

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

  1. Mapguide dynamic overlays fails
  2. A Mapguide Tiled map with all the co-ordinates correct :)
    var metersPerUnit = 111319.4908; //value returned via MG API
    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;
    turns out that's all required in order for a mapguide tiled layer to display with correct co-ordinates, aside from extents and scales

  3. A Sheboygan example of Mapguide tiled map, Untiled map and untiled map as Overlay all in one map, which makes a good starting point

  4. Fusion fix for the Mapguide error:The value cannot be less than or equal to zero.

  5. 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.... :)