Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 1 Beitrag ] 
Die PLZ Bibliothek 
Autor Nachricht
Administrator
Benutzeravatar

Registriert: Sa 15. Dez 2012, 19:15
Beiträge: 137
Wohnort: Karlsruhe
Mit Zitat antworten
Hallo Leute!

Das erste Mal das ich mit größeren Daten in Berührung kam, war die Liste mit den Banken der Deutschen Bundesbank. Aber die Datenbank für PLZ, zugehörige Orte und Bundesland ist auch nicht schlecht. Allerdings musste ich die Quelle etwas aufbereiten.

Die Quelle hatte eine Menge an Einträgen bei dem die PLZ mehrfach vorkam, aber zu unterschiedlichen Orten gehörte. Wenigstens blieb das Bundesland fix. So habe ich folgendes struct erstellt:

Code:
 
public struct PLZ
        {
            public static Dictionary<string, PLZ> List = new Dictionary<string, PLZ>(8290);
 
            public const char Separator = '\t';
 
            public string Postleitzahl { get; set; }
            public string[] Orte { get; set; }
            public string Bundesland { get; set; }
 
            public PLZ(string bundesland, string plz, params string[] orte):this()
            {
                Bundesland = bundesland;
                Postleitzahl = plz;
                Orte = orte;
            }
 
            public override string ToString()
            {
                StringBuilder str = new StringBuilder(Orte.Length * 50 + 60);
                str.Append(Bundesland + Separator + Postleitzahl);
                foreach (string ort in Orte) { str.Append(Separator + ort); }
                return str.ToString();
            }
 
            public static PLZ Parse(string s)
            {
                PLZ plz = new PLZ(); List<string> orte = new List<string>();
                string[] i = s.Split(Separator);
                try
                {
                    plz.Bundesland = i[0];
                    plz.Postleitzahl = i[1];
                    for (int ix = 2; ix < i.Length; ix++) { orte.Add(i[ix]); }
                }
                catch { }
                plz.Orte = orte.ToArray();
                return plz;
            }
        }
 

Die Datenbank hat also genau 8.290 Einträge. Sie werden mit dem statischen Konstruktor instanziiert. Dort werden alle Einträge durch die statische Methode Parse(string s) dem statischen Wörterbuch und den AutoCompleteStingCollections hinzugefügt. Auch werden sie wiederhergestellten PLZ in das statische Wörterbuch PLZundOrt.PLZ.List aufgenommen, die PLZ als Schlüssel.

Code:
 
namespace plzLibrary
{
    public static class PLZundOrt
    {
        public static AutoCompleteStringCollection AutoCompletePLZ = new AutoCompleteStringCollection();
        public static AutoCompleteStringCollection AutoCompleteOrte = new AutoCompleteStringCollection();
        public static PLZ Get(string plz) { try { return PLZ.List[plz]; } catch { return new PLZ("", "", ""); } }
    } // Konstruktor und die in die Klasse PLZundOrt eingebettete struct PLZ wurden hier jetzt weggelassen
}
 

Mithilfe der AutoCompleteStringCollection kann man bei der Eingabe in eine Textbox einen Vorschlag bekommen. Dazu muss die AutoCompleteSource der Textbox auf CustumSource eingestellt und als AutoCompleteCustomSource eine der statischen AutoCompleteStingCollections ausgewählt werden. Beim AutoCompleteMode solltet ihr einfach mal ausprobieren was euch besser gefällt.


Hier könnt ihr die Bibliothek downloaden. Bindet die entpackte Bibliothek einfach über "Verweise" in eurem "Projektmappen-Explorer" ein.


Schöne Grüße,
Magony


P.S.: Wer sich mit der Materie näher beschäftigen möchte: http://opengeodb.org/wiki/Projekte
Dort werden auch Bibliotheken angeboten für eine Entfernungsberechnung in Ruby, PHP und Phyton

_________________
Bei Fragen, Lob, Kritik, Vorschläge, hilfreiche Hinweise oder Alternativvorschläge: Beitrag, neues Thema oder PN.
Für Dinge die diskutiert werden sollten, bitte neues Thema im jeweiligen Forum.
Wenn du nicht weißt wohin: Forum Unsortiert.


Mi 19. Dez 2012, 06:30
Diesen Beitrag melden
Profil Website besuchen
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.   [ 1 Beitrag ] 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst neue Themen in diesem Forum erstellen.
Du darfst Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software
Deutsche Übersetzung durch phpBB.de

Impressum