2010-06-02 5 views
5

Je cherche à calculer la distance la plus courte entre deux points dans SQL Server 2008 en ne tenant compte que de la masse terrestre. J'ai utilisé le type de données géographiques avec STDistance() pour calculer le point x distance au point y à vol d'oiseau, mais cela traverse parfois la mer que j'essaie d'éviter.distance entre deux points à travers le terrain en utilisant le serveur sql

J'ai aussi créé un polygone autour de la limite de la masse terrestre Je suis intéressé par

Je crois que je dois combiner ces deux méthodes pour faire en sorte que STDistance reste toujours dans un polygone -. À moins d'une solution plus simple.

Merci pour tout conseil

Répondre

1

Utilisez STIntersects - http://msdn.microsoft.com/en-us/library/bb933899%28v=SQL.105%29.aspx pour savoir quelle partie de la ligne est sur la terre. Après avoir lu votre commentaire, votre exigence a du sens. Cependant, je suis assez sûr qu'il n'y a pas de techniques intégrées pour le faire dans SQL Server. Je suppose que vous ignorez les routes, et que vous prenez une approche à la volée, mais sur terre seulement. La seule façon que je peux penser pour faire cela serait de convertir votre zone en un raster (cellules de la grille) et d'effectuer une analyse de coût. Vous définiriez la zone de mer à un coût prohibitif, de sorte que l'algorithme serait acheminé autour de la mer. Voir ce lien pour la description de la technique:

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

Sinon, essayez la mise en œuvre de l'algorithme ci-dessous!

http://bit.ly/ckvciz

Il peut y avoir d'autres bibliothèques qui font cela. En ce qui concerne l'utilisation de la nouvelle API Google Directions entre les deux villes, vous obtiendrez des distances réelles.

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

+0

Merci pour la réponse. À moins que je ne comprenne mal ce qui ne me donnera pas la plus courte distance dans la masse terrestre, cela me permettrait simplement de faire la différence entre la distance à travers la terre et la distance à travers la mer. Peut-être qu'un exemple travaillé m'aidera à expliquer. À vol d'oiseau, Malaga (Espagne) est plus proche de Tanger (Maroc) que de Madrid. Si nous ne pouvons voyager que par voie terrestre, Tanger est toujours accessible (après un long voyage en Europe, au Moyen-Orient, etc.) mais il est maintenant beaucoup plus éloigné que Madrid, Paris, etc .. Donc, j'essaie de calculer les distances masse terrestre seulement. –

+0

SQL Server ne différencie pas entre terre ou mer (ou collines, d'ailleurs). –

+0

Je suppose que les polygones seraient attribués correctement? – geographika

Questions connexes