Narzędzia użytkownika

Narzędzia witryny


pl:ztb:przyklad_uzycia_map_dynamicznych

Przykłady Użycia RDNR

Rozmieszczenie instancji parametrów monitorwania przedstawia poniższy rysunek.

skrzyzowanie_agh.jpg

Umieszczanie informacji na mapie statycznej

Baza danych: osmosis_db, baza zostanie dostarczona później.

Aby stworzyć opis powyższego przykładu w bazie danych, należy:

  • określić elementy way, na których będą definiowane pasy,
  • określić współrzędne początków i końców pasów,
  • stworzyć elementy smnode dla tych współrzędnych,
  • stworzyć elementy way w oparciu o utworzone elementy smnode.

Określenie elementów way

Określenia należy dokonać na podstawie danych znajdujących się w bazie, zaimportowanych z OSM. Dla powyższego przykładu:

  • droga od północy (ul. Piastowska) ma id 24193276
  • droga od południa (ul. Piastowska) ma id 24193282
  • droga od zachodu (ul. Armii Krajowej) ma id 114324804
  • droga od wschodu (ul. Nawojki) ma id 21929772

Określenie współrzędnych początków i końców pasów

Współrzędne można określić na podstawie pomiaru w terenie, lub np. w oparciu o zdjęcie lotnicze w Google Maps.

Zastosowano następujące określenia pasów:

  • F - jazda na wprost
  • L - skręt w lewo
  • R - skręt w prawo

oraz kombinacje powyższych.

Dla powyższego przykładu mamy następujące współrzędne początków i końców pasów (oraz ew. punktów pośrednich):

  • dla drogi od północy (ul. Piastowska):
    • pas FL: 50.070792, 19.904298 [18], 50.070293, 19.904045 [19]
    • pas FR: 50.070800, 19.904257 [20] – 50.070636, 19.904154 [21] – 50.070299, 19.904000 [22]
  • dla drogi od południa (ul. Piastowska):
    • pas FL: 50.069064, 19.903589 [8] – 50.069815, 19.903919 [9]
    • pas FR: 50.069037, 19.903628 [10] – 50.069800, 19.903966 [11]
  • dla drogi od zachodu (ul. Armii Krajowej):
    • pas FR: 50.070180, 19.902561 [12] – 50.070031, 19.903616 [13]
    • pas F: 50.070212, 19.902566 [14] – 50.070064, 19.903624 [15]
    • pas L: 50.070193, 19.902915 [16] – 50.070089, 19.903642 [17]
  • dla drogi od wschodu (ul. Nawojki):
    • pas FR: 50.069906, 19.905308 [6] – 50.070070, 19.904351 [7]
    • pas F: 50.069875, 19.905290 [4] – 50.070038, 19.904341 [5]
    • pas L: 50.069937, 19.904814 [2] – 50.070009, 19.904334 [3]

Dodanie elementów smnode

Aby dodać węzły smnode dla pasów należy użyć następującego kodu SQL:

INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904814 50.069937)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904334 50.070009)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.905290 50.069875)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904341 50.070038)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.905308 50.069906)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904351 50.070070)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903589 50.069064)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903919 50.069815)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903628 50.069037)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903966 50.069800)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.902561 50.070180)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903616 50.070031)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.902566 50.070212)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903624 50.070064)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.902915 50.070193)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.903642 50.070089)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904298 50.070792)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904045 50.070293)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904257 50.070800)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904154 50.070636)', 4326));
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.904000 50.070299)', 4326));

W wyniku powyższych zapytań na istniejącej bazie danych uzyskano następujące id elementów smnode:

  • dla drogi od północy (ul. Piastowska), id 24193276:
    • pas FL: [18] - [19]
    • pas FR: [20] - [21] - [22]
  • dla drogi od południa (ul. Piastowska), id 24193282:
    • pas FL: [8] - [9]
    • pas FR: [10] - [11]
  • dla drogi od zachodu (ul. Armii Krajowej), id 114324804:
    • pas FR: [12] - [13]
    • pas F: [14] - [15]
    • pas L: [16] - [17]
  • dla drogi od wschodu (ul. Nawojki), id 21929772:
    • pas FR: [6] - [7]
    • pas F: [4] - [5]
    • pas L: [2] - [3]

Dodanie elementów lane

W oparciu o utworzone elementy smnode możemy utworzyć elementy lane. Zakładamy, że numer pasa 1 oznacza pas skrajnie prawy, kolejne pasy (idąc w lewo) mają numery 2, 3, itd.

dla drogi od północy (ul. Piastowska), id 24193276

  • pas FL: [18] - [19]
INSERT INTO lanes (NUMBER, way_id) VALUES (2, 24193276);    -- id: 1
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (1, 18, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (1, 19, 2);
  • pas FR: [20] - [21] - [22]
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 24193276);    -- id: 2
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (2, 20, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (2, 21, 2);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (2, 22, 3);

dla drogi od południa (ul. Piastowska), id 24193282

  • pas FL: [8] - [9]
INSERT INTO lanes (NUMBER, way_id) VALUES (2, 24193282);    -- id: 3
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (3, 8, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (3, 9, 2);
  • pas FR: [10] - [11]
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 24193282);    -- id: 4
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (4, 10, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (4, 11, 2);

dla drogi od zachodu (ul. Armii Krajowej), id 114324804

  • pas FR: [12] - [13]
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 114324804);    -- id: 5
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (5, 12, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (5, 13, 2);
  • pas F: [14] - [15]
INSERT INTO lanes (NUMBER, way_id) VALUES (2, 114324804);    -- id: 6
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (6, 14, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (6, 15, 2);
  • pas L: [16] - [17]
INSERT INTO lanes (NUMBER, way_id) VALUES (3, 114324804);    -- id: 7
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (7, 16, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (7, 17, 2);

dla drogi od wschodu (ul. Nawojki), id 21929772

  • pas FR: [6] - [7]
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 21929772);    -- id: 8
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (8, 6, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (8, 7, 2);
  • pas F: [4] - [5]
INSERT INTO lanes (NUMBER, way_id) VALUES (2, 21929772);    -- id: 9
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (9, 4, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (9, 5, 2);
  • pas L: [2] - [3]
INSERT INTO lanes (NUMBER, way_id) VALUES (3, 21929772);    -- id: 10
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (10, 2, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (10, 3, 2);

Punkty pomiarowe

Poniżej podano koordynaty punktów pomiarowych: ZV-S, ZV-N, ZV-W, ZV-E.

ZV-W:
50.070183, 19.903592

ZV-S:
50.069798, 19.903781

ZV-E:
50.069902, 19.904454

ZV-N:
50.070301, 19.904186

Umieszczanie informacji o parametrach monitorowania

Baza danych: rdnr, baza zostanie dostarczona później.

Dodanie informacji o parametrach monitorowania

Typy parametrów monitorowania

Skrypt: sample_data_piastowska.sql

  • Długość kolejki z wideodetektora i metadane
    INSERT INTO param_monitoringparametertype (
           id,
           label,
           applies_to_lane,
           applies_to_area,
           applies_to_crossroads,
           applies_to_location,
           applies_to_turn,
           datatype,
           is_deprecated,
           min_value,
           is_directly_measured,
           max_value,
           unit
           ) VALUES (
           1,
           'Długość kolejek pojazdow, nadjezdzajacych z zadanych kierunkow.',
           TRUE,
           FALSE,
           FALSE,
           FALSE,
           TRUE,
           'xsd:integer',
           FALSE,
           '0',
           TRUE,
           '1000',
           'http://mapserv.kt.agh.edu.pl/ontologies/units.owl#Unit.m'
           );
     
    -- metadata
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           1,
           'param_monitoringparametertype',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LengthQueueVehiclesMonitoringaParameterType'
    );
  • Prędkość z wideodetektora i metadane
    INSERT INTO param_monitoringparametertype (
           id,
           label,
           applies_to_lane,
           applies_to_area,
           applies_to_crossroads,
           applies_to_location,
           applies_to_turn,
           datatype,
           is_deprecated,
           min_value,
           is_directly_measured,
           max_value,
           unit
           ) VALUES (
           2,
           'Prędkość pojazdow poruszajacych się w zadanych kierunkach',
           TRUE,
           FALSE,
           FALSE,
           FALSE,
           FALSE,
           'xsd:integer',
           FALSE,
           '0',
           TRUE,
           '200',
           'http://mapserv.kt.agh.edu.pl/ontologies/units.owl#Unit.km_h'
           );
     
    -- metadata
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           2,
           'param_monitoringparametertype',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.VelocityVehiclesMonitoringaParameterType'
    );
  • Ilość pojazdów z wideodetektora i metadane
    INSERT INTO param_monitoringparametertype (
           id,
           label,
           applies_to_lane,
           applies_to_area,
           applies_to_crossroads,
           applies_to_location,
           applies_to_turn,
           datatype,
           is_deprecated,
           min_value,
           is_directly_measured,
           max_value,
           unit
           ) VALUES (
           3,
           'Liczba pojazdow poruszającch się w zadanym kierunku.',
           TRUE,
           FALSE,
           FALSE,
           FALSE,
           FALSE,
           'xsd:integer',
           FALSE,
           '0',
           TRUE,
           '200',
           'http://mapserv.kt.agh.edu.pl/ontologies/units.owl#Unit.km_h'
    );
     
    -- metadata
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           3,
           'param_monitoringparametertype',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.CountVehiclesMonitoringaParameterType'
    );

Uwaga: informacje o sensorach zostały w niniejszym przykładzie pominięte. W środowisku produkcyjnym powinny być umieszczone w odpowiednich tabelach.

Instancje parametrów monitorowania

  • dla drogi od Północy, ul. Piastowska, pas FR, skrypt: sample_data_piastowska_K1-N.sql, kolejka pomiarowa K1-N
    -- Umożliwienie przyporządkowanie instancji do lokalizacji (turn, area, lane, crossroads, albo lokalizacji geograficznej)
     
    INSERT INTO param_instanceassignment (
           id
           ) VALUES (
           1
    );
     
    -- metadata 
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           1,
           'param_instanceassignment',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LaneInstanceAss
    ignment'
    );
     
     
    -- Instancja parametru monitorowania
     
    INSERT INTO param_monitoringparameterinstance (
           id,
           time_interval,
           TYPE,
           label,
           assignment,
           min_frequency,
           max_frequency,
           lifetime,
           time_created
           ) VALUES (
           1,
           90,
           1, -- http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LengthQueu
    eVehiclesMonitoringaParameterType
           'K1-N',
           2,
           0.0166, -- co 60 s
           0.0083, -- co 120 s
           360,
           '2012-04-18 13:13:04'
    );
     
    -- metadata 
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           1,
           'param_monitoringparameterinstance',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.FixedMonitoring
    ParameterInstance'
    );
     
     
    -- Powiązanie instancji z lokalizacją
     
    INSERT INTO param_instanceassignment_sm_lane (
           param_instanceassignment,
           sm_lane
           ) VALUES (
           1,
           2 -- lane id: 2, ul. Piastowska, pas FR
    );
     
    -- Stan parametru monitorowania
     
    INSERT INTO param_monitoringparameterstate (
           id,
           parameter_instance,
           time_entered,
           TYPE
           ) VALUES (
           1,
           1,
           '2012-04-18 13:13:04',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#MonitoringParameterSt
    ateType.Active'
    );
     
    -- metadata
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           1,
           'param_monitoringparameterstate',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaPara
    meterState'
    );
     
    -- Powiązanie stanu z instancją
     
    UPDATE param_monitoringparameterinstance 
    SET current_state=1
    WHERE id=1;
  • dla drogi od Południa, ul. Piastowska, skrypt: sample_data_piastowska_K1-N.sql, punkt pomiarowy V-S.
    Uwaga: punkt reprezentowany w RDNR bez powiązania z Mapą Statyczną tzw. instancja niepowiązana.
    -- Instance: V-S
     
    BEGIN;
     
    -- InstanceAssignment
     
    -- point, geo location
    INSERT INTO imp_location (
           id,
           latitude,
           longitude
           ) VALUES (
           1,
           50.069798,
           19.903781
    );
     
    INSERT INTO param_instanceassignment (
           id,
           location
           ) VALUES (
           2,
           1
    );
     
    -- metadata 
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           2,
           'param_instanceassignment',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LocationInstanceAssignment'
    );
     
     
    -- MonitoringParameterInstance
     
    INSERT INTO param_monitoringparameterinstance (
           id,
           time_interval,
           TYPE,
           label,
           assignment,
           min_frequency,
           max_frequency,
           lifetime,
           time_created
           ) VALUES (
           2,
           90,
           2, -- http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.VelocityVehiclesMonitoringaParameterType
           'V-S',
           1,
           0.0166, -- co 60 s
           0.0083, -- co 120 s
           360,
           '2012-04-18 13:13:04'
    );
     
    -- metadata 
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           2,
           'param_monitoringparameterinstance',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.FixedMonitoringParameterInstance'
    );
     
     
    -- MonitoringParameterState
     
    INSERT INTO param_monitoringparameterstate (
           id,
           parameter_instance,
           time_entered,
           TYPE
           ) VALUES (
           2,
           2,
           '2012-04-18 13:13:04',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#MonitoringParameterStateType.Active'
    );
     
    -- metadata
     
    INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
           2,
           'param_monitoringparameterstate',
           'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterState'
    );
     
    -- MonitoringParameterInstance id:2, update: current_state=2
     
    UPDATE param_monitoringparameterinstance 
    SET current_state=2
    WHERE id=2;

Pozostałe instancje

Analogicznie należy dodać pozostałe instancje dotyczące instancji reprezentujących pomiary: K1-W, K2-W, K3-W, K1-E, K2-E, K3-E, K2-N, V-S, V-W, V-E, V-N, Z-S, Z-N, Z-W, Z-E.

Instancje niezwiązane

Należy zwrócić uwagę, że zogdnie z Ontologią, instancja parametru monitorowania nie musi być związana z obiektem mapy statycznej (turn, area, lane, crossroad). W tym przypadku do lokalizacji instancji wykorzystywane są koordynaty geograficzne umieszczane w tabeli imp_location. Ponieważ porządane jest wyszukiwanie z uwzględnieniem koordynatów geograficznych rdnr musi zostac wzbogacone o rozszerzenie PostGIS:

DBNAME=rdnr
POSTGIS_DIR=/usr/share/postgresql/8.4/contrib/postgis-1.5
createlang -d $DBNAME plpgsql
psql -d $DBNAME -f $POSTGIS_DIR/postgis.sql
psql -d $DBNAME -f $POSTGIS_DIR/spatial_ref_sys.sql

Ponadto do tabeli imp_location należy dodać kolumne przestrzenną geom:

SELECT AddGeometryColumn('imp_location', 'geom', 4326, 'GEOMETRY', 2);

Oraz zapewnić synchronizację wartości latitude i longitude z kolumną przestrzenną :

UPDATE imp_location SET geom=GeomFromText('POINT('||longitude||' '||latitude||')', 4326)

Powyższe wymagania zostały spełnione: zainstalowano rozszerzenie PostGIS dla rdnr oraz zaprogramowano odpowiedni wyzwalacz na tabeli imp_location automatycznie uaktualniający wartości kolumny geom na podstawie latitude i longitude:

-- Adding geom column to imp_location
 
SELECT AddGeometryColumn('imp_location', 'geom', 4326, 'GEOMETRY', 2);
 
-- A trigger for generating appropriate values in imp_location.geom, complying with PostGIS.
 
CREATE OR REPLACE FUNCTION imp_location_geom_update_trg() RETURNS TRIGGER AS $$ 
BEGIN 
  NEW.geom=GeomFromText('POINT(' ||NEW.longitude||' '||NEW.latitude||')', 4326); 
  RETURN NEW; 
END; 
$$ LANGUAGE 'plpgsql';
 
CREATE TRIGGER imp_location_geom BEFORE INSERT OR UPDATE ON imp_location FOR each ROW EXECUTE PROCEDURE imp_location_geom_update_trg();

Dodanie wartości parametrów monitorowania

dla drogi od północy (ul. Piastowska)

W poniższym przykładzie dodano 3 wartości parametrów monitorowania do instancji związanej z pasem FR na północnym odcinku ul. Piastowskiej (oznaczenie K1-N na rysunku skrzyżowania). Są to pierwsze trzy rekordy z przykładowych danych pochodzących z wideodetektora (kolumna K1-N, zamieszczone na początku dokumentu).

-- Wartości parametrów monitorowania.
 
INSERT INTO param_monitoringparametervalue (
       id,
       confidence,
       PRECISION,
       valid_until,
       time_measured,
       VALUE,
       instance
       ) VALUES 
       ( -- K1-N
        1,
        1,
        '1',
        '2012-04-30 14:15:55',
        '2012-04-18 14:15:55',
        '18',
        1
       ),
       ( -- K1-N
        2,
        1,
        '1',
        '2012-04-30 14:17:25',
        '2012-04-18 14:17:25',
        '18',
        1
       ),
       ( -- K1-N
        3,
        1,
        '1',
        '2012-04-30 14:18:55',
        '2012-04-18 14:18:55',
        '19',
        1
       )
;
 
-- metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES 
       (
        1,
        'param_monitoringparametervalue',
        'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
        ),
       (
        2,
        'param_monitoringparametervalue',
        'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
        ),
       (
        3,
        'param_monitoringparametervalue',
        'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
        )
;

dla drogi od południa (ul. Piastowska)

W poniższym przykładzie dodano 3 wartości parametrów monitorowania do instancji związanej z punktem V-S na południowym odcinku ul. Piastowskiej (oznaczenie V-S na rysunku skrzyżowania). Są to pierwsze trzy rekordy z przykładowych danych pochodzących z wideodetektora (kolumna V-S, zamieszczone na początku dokumentu).

INSERT INTO param_monitoringparametervalue (
       id,
       confidence,
       PRECISION,
       valid_until,
       time_measured,
       VALUE,
       instance
       ) VALUES 
       ( -- V-S
	4,
       	1,
       	'1',
	'2012-04-30 14:15:55',
	'2012-04-18 14:15:55',
	'31',
	2
       ),
       ( -- V-S
	5,
       	1,
       	'1',
	'2012-04-30 14:17:25',
	'2012-04-18 14:17:25',
	'34',
	2
       ),
       ( -- V-S
	6,
       	1,
       	'1',
	'2012-04-30 14:18:55',
	'2012-04-18 14:18:55',
	'33',
	2
       )
;
 
-- metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES 
       (
	4,
       	'param_monitoringparametervalue',
       	'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
	),
       (
	5,
       	'param_monitoringparametervalue',
       	'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
	),
       (
	6,
       	'param_monitoringparametervalue',
       	'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
	)
;

Odczyt parametrów monitorowania z danego obszaru

Instancje parametrów monitorowania mogą być przyporządkowane do obiektów Mapy Statycznej: Area, Crossroads, Lane, Turn, albo do lokalizacji geograficznej określonej przez długość, szerokość, wysokość oraz promień (na podstawie Ontologii parametrów monitorowania: http://mapserv.kt.agh.edu.pl/ontologies/param.owl )

Zatem procedura odczytu parametrów monitorowania dla zdefiniowanego obszaru powinna przebiegać następująco:

  1. Określenie obszaru będącego krzywą zamkniętą: A.
  2. Odnalezienie odpowiednio identyfikatorów obiektów Area, Crossroads, Lana lub Turn na mapie statycznej (baza osmosis_db): zbiór identyfikatorów Id
  3. Identyfikacja tabel w RDNR (baza rdnr) przechowujących dane o instancjach i przyporządkowaniu instancji, na podstawie tabeli metadanych oraz ontologii
  4. Identyfikacja instancji skojarzonych z Id: zbiór identyfikatorów instajcji IdI
  5. Poszerzenie zbioru IdI o instancje o zdefiniowanej lokalizacji (niepowiązane) przecinającej się z A
  6. Odczyt wartości parametrów monitorowania dla instancji IdI.

Identyfikaotry Lane, Crossroad, Turn, Area

W niniejszej sekscji opisano znajdywanie identyfikatorów obiektów, do których mogą być przyporządkowane instancje parametrów monitorowania (baza osmosis_db) tj. Lane, Crossroad, Turn, Area.

Proces poszukiwania należy rozpocząć od zdefiniowania obszaru za pomocą współrzędnych geograficznych, przykładowo:

POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))

Wykorzystując funkcje PostGIS można odnaleźć identyfikatory obiektów:

-- dla Crossroad
SELECT id FROM crossroads 
WHERE ST_Intersects(boundary, ST_GeomFromText('POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))', 4326));
 
-- dla Area
SELECT ways.id FROM ways, way_tags, way_geometry 
WHERE way_tags.k='area' AND way_tags.v='yes' AND way_tags.way_id=ways.id AND 
      ST_Intersects(way_geometry.geom, ST_GeomFromText('POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))', 4326)) AND 
      way_geometry.way_id=ways.id;
 
-- dla Lane
SELECT id FROM lanes 
WHERE ST_Intersects(geom, ST_GeomFromText('POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))', 4326));
 
-- dla Turn
SELECT id FROM turns 
WHERE ST_Intersects(geom, ST_GeomFromText('POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))', 4326));

Za pomocą w/w otrzymuje się zbiór Id.

Identyfikacja table RDNR na podstawie Ontologii

Należy wybrać klasę oraz własność klasy, dla której chcemy odnaleźć wartości w rdnr. Przykładowo, wartości parametrów monitorowania definiowane są przez własność http://mapserv.kt.agh.edu.pl/ontologies/param.owl#value klasy http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringParameterValue . Zapytanie:

SELECT tbl, att FROM 
meta_param 
WHERE 
cls='http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringParameterValue' 
AND prop='http://mapserv.kt.agh.edu.pl/ontologies/param.owl#value';
 
              tbl               |  att  
--------------------------------+-------
 param_MonitoringParameterValue | VALUE
(1 ROW)

Identyfikuje lokalizację danych w tabeli param_MonitoringParameterValue, kolumna: value.

Podobnie należy odnaleźć informacje na temat powiązania wartości z instancjami oraz instanacji z obiektami z Mapy Statycznej.

Odczyt wartości parametrów monitorowania dla instancji powiązanych z obiektami Mapy Statycznej

Mając zidentyfikowane tabele można wykonać zapytanie pobierające odpowiednie wartości parametrów monitorowania powiązane z obiektami Mapy Statycznej.

Przykładowo dla obiektów Lane o identyfikatorach: 1,2,3,4,5,6,7,8,9,10 (identyfikatory zwrócone jako rezultat zapytania identyfikującego obiekty Lane w podanym obszarze, w poprzedniej sekcji) zapytanie zwracające wszystkie wartości parametrów monitorowania ma postać:

SELECT label, time_measured,VALUE 
FROM param_monitoringparametervalue v 
JOIN param_monitoringparameterinstance i ON (v.instance=i.id) 
JOIN param_instanceassignment a ON (i.assignment=a.id) 
JOIN param_instanceassignment_sm_lane l ON (l.param_instanceassignment=a.id) 
WHERE sm_lane IN (1,2,3,4,5,6,7,8,9,10);
 
 label |    time_measured    | VALUE 
-------+---------------------+-------
 K1-N  | 2012-04-18 14:15:55 | 18
 K1-N  | 2012-04-18 14:17:25 | 18
 K1-N  | 2012-04-18 14:18:55 | 19
(3 ROWS)

Odczyt wartości parametrów monitorowania dla instancji niepowiązanych

Dla wartości parametrów monitorowania instancji niepowiązanych z Mapą Statyczną, należy posłużyć się bezpośrednio koordynatami wybranego obszaru. Poniższe przykładowe zapytanie zwraca informacje o wartościach parametrów monitorowania dla instancji niepowiązanych, których punktowe współrzędne geograficzne znajdują się w zdefinuowanym obszarze.

SELECT label, time_measured,VALUE 
FROM param_monitoringparametervalue v 
JOIN param_monitoringparameterinstance i ON (v.instance=i.id) 
JOIN param_instanceassignment a ON (i.assignment=a.id) 
JOIN imp_location l ON (l.id=a.location) 
WHERE ST_Intersects(geom, ST_GeomFromText('POLYGON((19.9 50.1, 19.9 49.98, 20 49.98, 20 50.1, 19.9 50.1))', 4326));
 
 label |    time_measured    | VALUE 
-------+---------------------+-------
 V-S   | 2012-04-18 14:15:55 | 31
 V-S   | 2012-04-18 14:17:25 | 34
 V-S   | 2012-04-18 14:18:55 | 33
(3 ROWS)

W przypadku zdefiniowania lokalizacji instancji za pomocą współrzędnych geograficznych i promienia (param_instanceassignment.radius) można posłużyć się poniższymi funkcjami PostGIS:

Odległość punktu od obszaru:

SELECT ST_Distance(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'), ST_GeomFromText('POINT(12 5)'));
 
Wersja z podzapytaniem i rzutowaniem:
SELECT ST_Distance(ST_GeomFromText((SELECT 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))')::text), ST_GeomFromText('POINT(13 12)'));

Parking D-6

Mapa statyczna

INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9145686 50.0665605)', 4326)); -- 23
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9146225 50.0666678)', 4326)); -- 24
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9146608 50.0666889)', 4326)); -- 25
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9147913 50.0666598)', 4326)); -- 26
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9148792 50.0666689)', 4326)); -- 27
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9152793 50.0665842)', 4326)); -- 28
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9148409 50.0666334)', 4326)); -- 29
INSERT INTO smnodes (geom) VALUES (ST_GeomFromText('POINT(19.9147203 50.0664021)', 4326)); -- 30
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 286755420);    -- 11
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (11, 29, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (11, 30, 2);
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 323800732);    -- 12
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (12, 26, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (12, 25, 2);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (12, 24, 3);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (12, 23, 4);
INSERT INTO lanes (NUMBER, way_id) VALUES (1, 323800732);    -- 13
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (13, 27, 1);
INSERT INTO lane_smnodes (lane_id, smnode_id, sequence_id) VALUES (13, 28, 2);

Mapa dynamiczna

Parametr monitorowania: obecność pojazdu.

BEGIN;
 
-- MonitoringParameterType
 
-- video_presence
-- http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.PresenceVehiclesMonitoringaParameterType -- FIXME might be not present in the ontology, unable to verify the ontology is offline
 
INSERT INTO param_monitoringparametertype (
       id,
       label,
       applies_to_lane,
       applies_to_area,
       applies_to_crossroads,
       applies_to_location,
       applies_to_turn,
       datatype,
       is_deprecated,
       min_value,
       is_directly_measured,
       max_value,
       unit
       ) VALUES (
       4,
       'Wykrywanie ruchu',
       TRUE,
       TRUE,
       TRUE,
       TRUE,
       TRUE,
       'xsd:integer',
       FALSE,
       '0',
       TRUE,
       '1',
       'http://mapserv.kt.agh.edu.pl/ontologies/units.owl#Unit.m'
       );
 
-- video_queue, metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
       4,
       'param_monitoringparametertype',
       'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.PresentVehiclesMonitoringaParameterType' -- FIXME might be not present in the ontology, unable to verify the ontology is offline
);
 
 
COMMIT;

Przykładowa instanacja wraz z przykładowymi danymi.

BEGIN;
 
-- Instance: K1-S, http://insigma.kt.agh.edu.pl/K1-S
-- InstanceAssignment
 
INSERT INTO param_instanceassignment (
       id
       ) VALUES (
       17
);
 
-- metadata 
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
       17,
       'param_instanceassignment',
       'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LaneInstanceAssignment'
);
 
 
-- MonitoringParameterInstance
 
INSERT INTO param_monitoringparameterinstance (
       id,
       time_interval,
       TYPE,
       label,
       assignment,
       min_frequency,
       max_frequency,
       lifetime,
       time_created
       ) VALUES (
       17,
       90,
       1, -- http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.LengthQueueVehiclesMonitoringaParameterType
       'http://insigma.kt.agh.edu.pl/K1-S',
       17,
       0.0166, -- co 60 s
       0.0083, -- co 120 s
       360,
       '2012-04-18 13:13:04'
);
 
-- metadata 
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
       17,
       'param_monitoringparameterinstance',
       'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.FixedMonitoringParameterInstance'
);
 
 
-- InstanceAssignmentSmLane
 
INSERT INTO param_instanceassignment_sm_lane (
       param_instanceassignment,
       sm_lane
       ) VALUES (
       17,
       11 -- lane id: 11
);
 
 
-- MonitoringParameterState
 
INSERT INTO param_monitoringparameterstate (
       id,
       parameter_instance,
       time_entered,
       TYPE
       ) VALUES (
       17,
       17,
       '2012-04-18 13:13:04',
       'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#MonitoringParameterStateType.Active'
);
 
-- metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES (
       17,
       'param_monitoringparameterstate',
       'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterState'
);
 
-- MonitoringParameterInstance id:15, update: current_state=1
 
UPDATE param_monitoringparameterinstance 
SET current_state=1
WHERE id=17;
 
-- Sensors omitted for now, TODO
 
-- MonitoringParameterValue
 
INSERT INTO param_monitoringparametervalue (
       id,
       confidence,
       PRECISION,
       valid_until,
       time_measured,
       VALUE,
       instance
       ) VALUES 
       ( -- K1-S
	17,
       	1,
       	'1',
	'2012-04-30 14:15:55',
	'2012-04-18 14:15:55',
	'18',
	17
       )
;
 
-- metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES 
       (
	17,
       	'param_monitoringparametervalue',
       	'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
	)
;
 
COMMIT;

Przykładowe umieszczanie danych

Poniższa sekcja dotyczy wartości paramtetrów monitorowania.

Do umieszczenia danych konieczne jest wykonanie dwóch zapytań INSERT:

  • danych właściwych (MonitoringParameterValue) oraz
  • metadanych (meta_param_pk_table_class) nawiązujących do ontologii.

Muszą one być wykonane w ramach tego samego połączenia z bazą danych w sekwencji: najpierw dane, potem metadane. Najlepiej w ramach transakcji (tak jak w przykładzie poniżej), aby uniknąć ewentualnych niespójności.

  • Instancja o etykiecie: http://insigma.kt.agh.edu.pl/K1-S.
  • Wartość pomiaru: 6.
  • Czas pomiaru: 2012-04-18 14:15:55
  • Ważność pomiaru: 2012-04-30 14:15:55
  • Dokładność: 1.
  • Pewność: 1.
BEGIN;
-- MonitoringParameterValue
 
INSERT INTO param_monitoringparametervalue (
       confidence,
       PRECISION,
       valid_until,
       time_measured,
       VALUE,
       instance
       ) VALUES 
       ( -- K1-S
       	1,
       	'1',
	'2012-04-30 14:15:55',
	'2012-04-18 14:15:55',
	'6', -- wartośc mierzona (value)
	(SELECT id FROM param_monitoringparameterinstance WHERE label='http://insigma.kt.agh.edu.pl/K1-S') -- etykieta instancji (label)
       )
;
 
-- metadata
 
INSERT INTO meta_param_pk_table_class (pk, tbl, cls) VALUES 
       (
	(SELECT currval('pmpv_seq')),
       	'param_monitoringparametervalue',
       	'http://mapserv.kt.agh.edu.pl/ontologies/param.owl#param.MonitoringaParameterValue'
	)
;
 
COMMIT;

Uwagi końcowe

Jako dane testowe umieszczono w bazie danych Mapy Statycznej (baza osmosis_db) informacje o:

  • 10 obiektach Lane modelujących sytuacje na testowym skrzyżowaniu.

W repozytorium RDNR (baza rdnr) umieszczono informacje o:

  • 3 typach instancji parametrów monitorowania,
  • 2 instancjach (K1-N oraz V-S)
  • 6 wartościach parametrów monitorowania, po 3 dla każdej z instancji.

Uwaga: w RDNR nie umieszczono informacji o Sensorach.

FIXME informacje o parkingu

pl/ztb/przyklad_uzycia_map_dynamicznych.txt · ostatnio zmienione: 2021/01/08 14:09 (edycja zewnętrzna)