Benutzer mit den meisten Antworten
Geocoding: Wer kann helfen?

Frage
-
Moin moin,
bisher habe ich keine Erfahrungen mit Geocoding gesammelt, doch da für eine WinForm-Anwendung eine entsprechende Erweiterung angedacht ist, muss ich mich damit beschäftigen und hoffe, dass mir hier jemand ein paar Praxistipps geben kann.
Der Ausgangspunkt:
Für jeden Teilnehmer eines unserer Projekte sind neben der Anschrift auch seine Geo-Koordinaten hinterlegt. Bis hierhin kein Problem.
Nun soll in einer Erweiterung der Software der jeweilige User die Möglichkeit erhalten, die Anzahl anderer Anwender in frei bestimmbaren Radien (10, 20, 50 und 100 Kilometer) angezeigt zu bekommen und ebenso bestimmte Eigenschaften von ihnen.
Es gelten also die folgenden Anforderungen:
- Bestimmung der Geo-Position des Users (bereits hinterlegt)
- Bestimmung der Umfeldgröße (Radius von 10, 20, 50 oder 100 Kilometern)
- Bestimmung wieviel und welche andere Anwender sich innerhalb dieses Umfeldes befinden.
Hat jemand mit derartigen Berechnungen schon Erfahrungen sammeln können? Gibt es hierzu vielleicht sogar ein, zwei praktische Berechnungsbeispiele?
Bin für jeden Hinweis dankbar.
Grüße aus Hamburg,
Peter
Peter R. Horak, Hamburg
Antworten
-
oder in bestimmten Produkten wohl auch von MS selber (SQL/Bing-Maps?).
oder falls .NET 4.0 / VS2010 sogar 'eingebaut' (aber leider etwas spezifisch):
http://blogs.msdn.com/b/sensorslocation/archive/2010/02/23/introducing-location-in-net-4-0.aspx
http://msdn.microsoft.com/de-de/library/system.device.location.geocoordinate.getdistanceto.aspxFür Distanz dann ganz einfach:
Reference: System.Device.dll
using System.Device.Location;
GeoCoordinate berlin = new GeoCoordinate(52.518611, 13.408056); // Berlin (wikipedia,geohack)
GeoCoordinate hamburg = new GeoCoordinate(53.550556, 9.993333); // Hamburg
double meters = berlin.GetDistanceTo(hamburg); // 255.721km- Als Antwort markiert prHorak Montag, 18. Oktober 2010 13:29
Alle Antworten
-
Hallo Peter
deine Angaben interpretiere ich so, dass es hier wohl um die Berechnung der Distanz zweier Punkte (Breiten-/Längengrad) geht, also vermutlich hilft Suche:
http://www.google.de/search?q=C%23+distance+points+longitude+latitude+%2BMath+%2BSin
http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points
http://www.codeproject.com/KB/cs/distancebetweenlocations.aspx
http://www.storm-consultancy.com/blog/development/code-snippets/the-haversine-formula-in-c-and-sql/
dann Test gegen grösser/kleiner 10/20/50/100 km.
Aber für Geocoding gibt es sicherlich Klassen, ungeprüft ähnlich
http://sharpmap.codeplex.com/
oder in bestimmten Produkten wohl auch von MS selber (SQL/Bing-Maps?). -
Lieber Thomas,
danke für Deine Antwort. Leider hilft mir sie nicht so recht weiter.
Wahrscheinlich bin ich da auch zu blauäugig, wenn ich mir denke, es müste doch möglich sein, durch einen Vergleich der jeweiligen Geodaten in VB herauszufinden, ob sie sich innerhalb der errechneten Kreisfläche befinden.
Mehr will ich eigentlich gar nicht, muss aber sagen, dass ich keine Ahnung habe, wie ich dies angehen muss. Meine Hoffnung ist, dass hier jemand schon mit einer Umkreissuche (idealerweise in VB) gearbeitet hat und mir entscheidende Praxistipps geben kann.
Grüße,
Peter
Peter R. Horak, Hamburg -
danke für Deine Antwort. Leider hilft mir sie nicht so recht weiter.Wahrscheinlich bin ich da auch zu blauäugig, wenn ich mir denke, es müste doch möglich sein, durch einen Vergleich der jeweiligen Geodaten in VB herauszufinden, ob sie sich innerhalb der errechneten Kreisfläche befinden.
Peter,
ich kann mir nicht vorstellen, dass eine 'Kreisfläche' hier irgend einen Nutzen hat.
Auch wenn dies 'optisch' (zB auf einer Karte) nach sowas wie 'konzentrische Umkreise' aussehen mag,
für deine Aufgabe geht es IMHO bloss um die Geo-Distanz (siehe verlinkte Formeln, zB Haversine) vom aktuellen User zu anderen Usern.
Abgesehen von der halt etwas komplexen Geo-Distanz - Formel ist dann dein Code ein höchst simpler Vergleichstest gegen jene 10/20/50/100km.
http://de.wikipedia.org/wiki/Orthodrome
http://en.wikipedia.org/wiki/Great-circle_distance
http://en.wikipedia.org/wiki/Haversine_formula -
der halt etwas komplexen Geo-Distanz - Formel
P.S. wenn es in deinem Fall um maximal 100km geht und Fehler bis ~Prozentbereich akzeptabel, dann gäbe es diverse, etwas einfachere Näherungs-Formeln, wohl wie
http://en.wikipedia.org/wiki/Geographical_distance
http://mathforum.org/library/drmath/view/62720.html
http://www.codeproject.com/kb/dotnet/Zip_code_radius_search.aspx -
-
oder in bestimmten Produkten wohl auch von MS selber (SQL/Bing-Maps?).
oder falls .NET 4.0 / VS2010 sogar 'eingebaut' (aber leider etwas spezifisch):
http://blogs.msdn.com/b/sensorslocation/archive/2010/02/23/introducing-location-in-net-4-0.aspx
http://msdn.microsoft.com/de-de/library/system.device.location.geocoordinate.getdistanceto.aspxFür Distanz dann ganz einfach:
Reference: System.Device.dll
using System.Device.Location;
GeoCoordinate berlin = new GeoCoordinate(52.518611, 13.408056); // Berlin (wikipedia,geohack)
GeoCoordinate hamburg = new GeoCoordinate(53.550556, 9.993333); // Hamburg
double meters = berlin.GetDistanceTo(hamburg); // 255.721km- Als Antwort markiert prHorak Montag, 18. Oktober 2010 13:29
-
Thomas,
ich erkläre Dich hiermit zu meinem persönlichen Helden des Monats Oktober!
Vielen Dank für Deine Mühe, dies zu recherchieren. Zwar musste ich nach längerer Lektüre von meiner Kreisflächen-Vorstellung Abschied nehmen, doch macht Dein aktueller Lösungsansatz dies mehr als wett: Getestet und für gut befunden.
Da wir zum Glück(!) seit dem letzten Update unseres Tools ohnehin auf .NET 4.0 umgestellt haben, ist die Referenz auf System.Device einfach genial - und genial einfach.
Ganz herzlichen Dank!
Grüße aus Hamburg,
Peter
Peter R. Horak, Hamburg