[WDB-Users] WDB Namespaces (Was Re: wci.addplacepoint)
Brought to you by:
falkenroth,
michaeloa
From: Michael A. <mic...@me...> - 2012-05-18 07:55:28
|
Hi, Apologies for the late reply; public holiday yesterday. ----- Original Message ----- > following ISSUE wci.addPlacePoint quietly overwrites old place names > in https://github.com/wdb/wdb/issues/21 This issue will be/has been fixed in the version we are currently working on (station_metadata branch). There are a bunch of small issues (and a few big bugs) in how these metadata functions work. It should not affect your work here though. > I don't understand in the the function wci.addPlacePoint('prova_point', ST_GeomFromText('Point(10 10)', > 4030)); the number 4030; also I need to understand the role of namespace in the WDB structure. ST_GeomFromText('Point(10 10)', 4030) is a PostGIS function (http://postgis.refractions.net/documentation/manual-1.5/ST_GeomFromText.html). 4030 is the default SRID (which maps to a PROJ string) used in the database. The problem you have is with the namespaces, though. I started documenting this on the website (https://wdb.met.no/doku.php?id=manuals:wdb_metadata) some time ago, but the documentation is unfinished. Namespaces are the method used to maintain multiple types of metadata information in the WDB database for the same object. E.g., it allows for the accomodation of multiple station identification series, e.g., you can have one namespace identifying stations with SYNOP numbers and another namespace identifying stations with a name. At met.no, for instance, we have one namespace for WMO station numbers, and a separate series for met.no's national station number series so that both can be used to identify data providers and points. There are namespaces in the database for three things: dataproviders, places, and parameters. These namespaces are identified using numerical ids. When you run wci.begin( 'username' ), you are always automatically assigned to a default namespace for the database. To change which namespace you use, one can use wci.begin( 'username', dataproviderNS, placeNS, parameterNS ); The canonical namespace of the database is 0. The names assigned in the canonical namespace are always auto-generated. - For dataproviders: the first name assigned to that dataprovider - For places: a text description of the place geometry (*) - For parameters: a string based on the CF parameter components (*) This is the important part. When you are adding: SELECT wci.addPlacePoint('prova_point', ST_GeomFromText('Point(10 10)', 4030)); The name of the place point in the canonical '0' namespace becomes 'Point(10 10)', NOT 'prova_point'. Unless you have changed namespaces, the canonical namespace is the default namespace. You cannot change the names of things in the canonical namespace. In general, I recommend setting up your own namespaces and NOT using the canonical namespace. To see how this is done, check the metno/wdb-metadata project: https://github.com/metno/wdb-metadata Briefly described, you want to do the following steps: SELECT wci.begin( 'wdb' ); -- Define my identifying entities SELECT wci.addOrganization( 'My Organization', 'myorg', 'government organization', '2000-01-01', '2999-12-31', 'The Org description' ); SELECT wci.addPerson( 'FirstName', 'LastName', 'Mr', 'Hi Firstname,', 'ABC', NULL, 'male', NULL, NULL, '2012-01-01', '2999-12-31', NULL ); -- Define my Namespace; 1000 is the example ID. SELECT wci.addNameSpace( 1000, 'My namespace', 'My own namespace', 'production', 'met.no', 'ABC', '2000-01-01' ); -- Set my Namespace as the default for regular users SELECT wci.setDefaultNameSpace( '', 1000, 1000, 1000 ); -- Run Begin again to switch namespace SELECT wci.begin( 'wdb', 1000, 1000, 1000 ); -- Add your dataproviders SELECT wci.adddataprovider( 'prova', '#type#', 'point', '1000 years', '#description#' ); ... ... -- Add your place points SELECT wci.addPlacePoint('prova_point', ST_GeomFromText('Point(10 10)', 4030)); ... ... -- Copy canonical parameter namespace -- If you want to use CF-style parameters in natural language, simply copy the canonical namespace by uncommenting the line below -- SELECT wci.copyParameterNameSpace( 0 ); -- If you want to add additional parameters or want to use your own parameter codes, add them as follows SELECT wci.addparameter( 'my special temperature', null, null, null, null, null, null, 'K' ); ... ... >From now on, SELECT wci.begin( 'username' ); will start up with the 1000 namespace as its default. In that namespace, you will have a parameter called 'my special temperature', a dataprovider 'prova', and a place 'prova_point' Hope that was understandable? Otherwise, please do not hesitate to ask. Regards, Michael Akinde |