C# finde alle Breite und Länge innerhalb einer Meile
Gegeben, eine lat-und long-Wert, gibt es eine Möglichkeit zu finden, alle lat und sehnt sich danach, dass sich innerhalb einer bestimmten Entfernung? Ich habe eine db-Tabelle von lat und long Werte, die Standorte von sagen wir mal Straßenlaternen, eine lat-long-pair-Mädchen-wie könnte ich all jene, die sich innerhalb einer bestimmten Entfernung?
Ich denke, das zeichnen eines Kreises vom Startpunkt aus und finden alle lat und Long enthalten wäre die beste Art jedoch, ich habe nicht die Fähigkeiten, dies zu tun. Ich bin ein c# - Entwickler von Beruf, sondern brauchen ein paar Hinweise, die in die ganze Welt geocoding -.
- Breite und Länge sind kontinuierliche Werte, man kann Sie nicht finden, alle von Ihnen in einem bestimmten Bereich, es gibt unendliche Anzahl von Ihnen.
- Sie, sagen Sie es nicht explizit, aber ich nehme an, Sie haben eine Liste mit den lat/lon Punkte? Ansonsten gibt es eine unendliche Anzahl von Punkten in jeder Entfernung > 0...
- Sie kann nicht wirklich finden Sie alle lat/long-Paare; es gibt unendlich viele von Ihnen. Sie können jedoch festlegen, die eine geometrische Grenze in Bezug auf die lat - /long-Paare und bestimmt dann, ob oder ob nicht lat/long-pair-Mädchen x,y fällt unter diese Grenze.
- Sie finden Sie in Ordnung, Sie können einfach nicht in endlicher Speicher. Aber eine mathematische Darstellung der resultierenden Form, oder ein test, ist die nächste beste Sache. Ich sehe nicht, warum dies rechtfertigt einen downvote.
- Ich habe eine db-Tabelle von lat und long Werte, die Standorte können sagen, Straßenlaternen, eine lat-long-pair-Mädchen-wie könnte ich all jene, die sich innerhalb einer bestimmten Entfernung.
- SQL Server 2008 verwenden, durch Zufall?
- Nein, aber ich tun könnte, wenn das einen Unterschied macht? Mithilfe von SQL Server 2005 mit .net und Entity framework
- Wie viele Punkte gibt es in der Datenbank? Wenn es zehn, hundert, tausend, dann nur die Berechnung der Entfernung zu jedem Punkt in der Datenbank und filtern diejenigen, die sind zu weit Weg. Wenn es Millionen, Milliarden, Billionen von Punkten in der Datenbank, dann ist dies wahrscheinlich nicht effizient genug; es gibt Möglichkeiten zum organisieren einer Datenbank für die Optimierung für Ihre Suche problem, aber Sie sind ein bisschen tricky.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mit der Haversine-Formel (siehe @tdammers Antwort) zum berechnen einer Entfernung zwischen jedem Punkt (Lat, Long) in der Tabelle und den angegebenen Punkt. Sie haben, Durchlaufen Sie die gesamte Sammlung, um zu bewerten, jeden Punkt einzeln.
Oder, wenn Sie SQL Server 2008 verwenden, dann geospatial support ist eingebaut. Jeder Datensatz speichert den Ort in Geographie geben (eventuell zusätzlich zu den zwei diskreten Spalten zu halten, breiten-und Längengrad, wenn es einfacher zu haben, die diese Werte aufgeschlüsselt), und dann bauen Sie eine einfache SQL-Abfrage:
Eine weitere ähnliche Möglichkeit ist es, den SQL-Räumliche Typen in Ihr .NET-Anwendung. Die redistributable, ist hier zu finden: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=CEB4346F-657F-4D28-83F5-AAE0C5C83D52 (unter Microsoft® System-CLR-Typen für SQL Server® 2008 R2).
Dann, die Abfrage erfolgt über LINQ. Hinweis: Das erspart Ihnen die Umsetzung der Haversine von selbst, ansonsten wird der Prozess von Abfragen die gleichen wären.
Den haversine Formel gibt Sie die Entfernung (in Metern; Umstellung auf Meilen ist trivial) zwischen zwei lat/lon Punkte. Von dort aus, können Sie wahrscheinlich finden die reverse...
Ich bin ein wenig spät, um diese Frage zu beantworten, aber ich kam mit einem trick, der vor Jahren zu tun im wesentlichen die gleiche für die Satelliten-Sichtfelder.
Gibt es zwei Punkte auf der Erde, wo Sie genau wissen, die Längen-und Breitengrad von jedem Punkt einer bestimmten Entfernung von Ihrem Standort. Diese Punkte sind die Nord-und Südpol. Also lassen wir den Punkt, den Sie wollen am Nordpol. Eine seemeile entfernt befindet sich der Kreis der Länge mit der Breite 90-Grad-minus 1 minute oder 90 – 1/60 Grad = 89.9833 Grad nördlicher Breite, da 1 minute of arc = 1 nautische Meile.
Nun, dass Sie die Position der Längengrade eine Meile von der pole latitude 89.9833, Sie im wesentlichen drehen die Erde, bis die lat/long, die Sie wollen, ist, wo die Stange verwendet werden. Dieser Vorgang wird als "Die Drehung der Karte Strichplatten". Die Mathematik dafür ist gerade nach vorne, sobald Sie darüber nachgedacht haben die Gleichungen eine Weile. Ich habe Sie irgendwo begraben, so dass ich nicht auf den code einfach, doch der Prozess, mit dem Gleichungen ist in John Snyders Buch "Map Projections: A Working Manual". Sie können das pdf kostenlos bei http://pubs.usgs.gov/pp/1395/report.pdf. Die Erklärung ist auf den Seiten 29 – 32.
Chuck Gantz
vor einiger Zeit war ich, ein problem zu lösen, wie man POIs entlang der Straße. Ich machte die Verwendung von quadtree, das bedeutet, dass die Aufteilung der gesamten Fläche in Zellen und subcells rekursiv. Jeder POI gehört zu nur einer Zelle. Mit diesen Zellen können Sie ganz einfach tun high-level-Berechnung auf Ebene der Zellen und nach, dass die Suche nur Zellen mit Kreuzung. Es ist mehr Spiel, das die Entwicklung Methode, aber kann verwendet werden, als auch hier. Hier steht etwas dazu auf Wiki:
http://en.wikipedia.org/wiki/Quadtree