2010-06-02 21 views
5

Ich bin auf der Suche nach der kürzesten Entfernung zwischen zwei Punkten innerhalb von SQL Server 2008 unter Berücksichtigung nur Masse.Entfernung zwischen zwei Punkten über Land mit sql Server

Ich habe den geography-Datentyp zusammen mit STDistance() verwendet, um Punkt x Abstand zu Punkt y als Luftlinie zu berechnen, jedoch überquert dies manchmal das Meer, das ich zu vermeiden versuche.

ich geschaffen habe auch ein Polygon um die Landmasse Grenze Ich bin interessiert

Ich glaube, dass ich diese beiden Methoden kombinieren, müssen immer um sicherzustellen, dass STDistance innerhalb Polygon bleibt -. Es sei denn es eine einfachere Lösung.

Vielen Dank für jede Beratung

Antwort

1

Verwenden STIntersects - http://msdn.microsoft.com/en-us/library/bb933899%28v=SQL.105%29.aspx um herauszufinden, was Teil der Leitung über Land.

Nach dem Lesen Ihres Kommentars macht Ihre Anforderung Sinn. Ich bin mir jedoch ziemlich sicher, dass es keine eingebauten Techniken in SQL Server gibt. Ich gehe davon aus, dass Sie die Straßen ignorieren und sich nur über Land bewegen.

Die einzige Möglichkeit, dies zu tun, wäre, Ihren Bereich in ein Raster (Gitterzellen) zu konvertieren und eine Kostenpfadanalyse durchzuführen. Sie würden das Meeresgebiet zu unerschwinglich hohen Kosten festlegen, also würde der Algorithmus um das Meer routen. Siehe diesen Link für die Beschreibung der Technik:

http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=cost_path

versuchen Ansonsten unter den Algorithmus der Umsetzung!

http://bit.ly/ckvciz

Es können auch andere Bibliotheken sein, die dies tun. Wie wäre es mit der Nutzung der neuen Google Directions-API zwischen den beiden Städten - Sie erhalten dann tatsächliche Straßenentfernungen.

http://code.google.com/apis/maps/documentation/directions/

+0

Danke für die Antwort. Wenn ich nicht verkenne, dass mir nicht die kürzeste Entfernung innerhalb der Landmasse geben wird, würde es mir nur erlauben, zwischen der Entfernung über Land mit der Entfernung über Meer zu unterscheiden. Vielleicht hilft mir ein ausgearbeitetes Beispiel zu erklären. In der Luftlinie liegt Malaga (Spanien) näher an Tanger (Marokko) als Madrid. Wenn wir nur auf dem Landweg reisen können, ist Tanger immer noch zugänglich (nach einer langen Reise Europa, Mittlerer Osten usw.), aber es ist jetzt viel weiter weg als Madrid, Paris usw. Deshalb versuche ich die Entfernungen zu berechnen Landmasse nur. –

+0

SQL Server unterscheidet nicht zwischen Land oder Meer (oder Hügeln, für diese Angelegenheit). –

+0

Ich würde annehmen, dass die Polygone korrekt zugeordnet werden? – geographika

Verwandte Themen