Ich danke für die Hinweise. Erstmal muss ich mich genauer damit beschäftigen,
wie mit den Postleitzahlen umgegangen wird (loc_type 100800000, text_type
50010000 und 500300000).
Wenn ich meine bisherigen Erkenntnisse und die Hinweise zusammenfasse, ist eine
Gemeinde wie folgt definiert (habe zunächst nur mit den Daten aus Deutschland
experimentiert):
1. Das Objekt ist auf Level 6.
2. Es handelt sich um den loc_type 10070000.
3. Es gibt einen Eintrag in geo_textdata mit text_type = 500600000 (AGS).
Stimmt das?
Es gibt auf Level 6 noch Postleitzahlbereiche (loc_type 100800000). Was aber
sind die Objekte auf Level 6, die eine Ortschaft darstellen, aber keinen
Eintrag in geo_textdata mit text_type = 500600000 (AGS) haben, z. B. mit loc_id
13349?
Die komplette Liste liefert das folgende Statement:
SELECT * FROM geodb_locations AS lc
INNER JOIN geodb_hierarchies AS h ON h.loc_id = lc.loc_id
AND lc.loc_type = 100700000 -- Ortschaft
AND h.level = 6
AND h.id_lvl2 = 105 -- nur Deutschland
-- AND h.valid_until >= current_date -- kann wohl durch die folgende
Zeile ersetzt werden?
AND h.date_type_until = 300500000 -- letzter gültiger Eintrag
INNER JOIN geodb_textdata AS td1 ON td1.loc_id = lc.loc_id
AND td1.text_type = 500100000 -- Name
AND td1.date_type_until = 300500000
LEFT JOIN geodb_textdata AS td2 ON td2.loc_id = lc.loc_id
AND td2.text_type = 500600000 -- AGS
AND td2.date_type_until = 300500000
WHERE td2.text_val IS NULL -- AGS fehlt
ORDER BY lc.loc_type, lc.loc_id, td1.text_val;
> >SELECT level, count(*) AS anzahl FROM geodb_hierarchies
> >WHERE (level = 5 AND loc_id <> id_lvl5)
> >OR (level = 6 AND loc_id <> id_lvl6)
> >OR (level = 7 AND loc_id <> id_lvl7)
> >OR (level = 8 AND loc_id <> id_lvl8)
> >GROUP BY level
> >ORDER BY level;
> >
> >level;anzahl
> >5;2
> >6;22184
> >7;2178
> >8;258
> Wenn Du noch mit geodb_locations.loc_type verlinkt haettest, haettest
> Du (hoffentlich) gesehen, dass dies NUR den loc_type LOC_AREA_CODE
> betrifft.
OK, verstanden:
SELECT lc.loc_type, h.level, count(*) AS anzahl FROM geodb_locations AS lc
INNER JOIN geodb_hierarchies AS h ON h.loc_id = lc.loc_id
WHERE (h.level = 5 AND h.loc_id <> h.id_lvl5)
OR (h.level = 6 AND h.loc_id <> h.id_lvl6)
OR (h.level = 7 AND h.loc_id <> h.id_lvl7)
OR (h.level = 8 AND h.loc_id <> h.id_lvl8)
GROUP BY lc.loc_type, h.level
ORDER BY lc.loc_type, h.level;
loc_type;level;anzahl
100500000;5;2
100800000;6;22184
100800000;7;2178
100800000;8;258
Gut, NUR zwei Abweichungen, beide auf Level 5.
Das Diagramm mit dem Datenbankschema habe ich mir als erstes angesehen. Eine
nähere Beschreibung der Eigenschaften der gespeicherten Objekte, die sich nicht
aus dem Datenbankschema ableiten lassen, habe ich nicht gefunden.
Mit freundlichen Grüßen
Ingmar Lötzsch
ASCI Systemhaus GmbH
--
Mailingliste OpenGeoDB
Listenadresse: opengeodb-r1mDYR0DdAyzQB+pC5nmwQ@xxxxxxxxxxxxxxxx
Informationen: http://opengeodb.de
Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)
|