2009-09-03 6 views
3

Est-ce que le plugin Spatial de Postgres, ou n'importe quel package Spatial de cette manière, prend en compte l'altitude lors du calcul de la distance entre 2 points? Je sais que les paquets spatiaux prennent en compte la courbure approximative de la terre, mais si un endroit est au sommet d'une montagne et l'autre endroit est proche de la mer - il semble que la différence calculée entre ces deux points serait grandement varient si la différence d'altitude n'a pas été prise en compte.Cartes: Est-ce que le calcul de la distance entre 2 points tient compte de l'altitude?

Gardez également à l'esprit que si j'ai 2 points sont à la même altitude de l'océan mais une montagne existe entre les 2 points - le paquet de distance devrait expliquer cela.

+0

Possible copie: http://stackoverflow.com/questions/1108965/taking-altitude-into-account-when-calculating-geodesic-distance –

+0

@Reed: Je pense que l'autre question est similaire, en quelque sorte, mais il/elle demande si les paquets existants prennent en compte ce facteur, et non comment l'intégrer. – MusiGenesis

Répondre

3

Ces facteurs ne sont pas comptés du tout. Pourquoi? Le logiciel ne connaît que les deux fonctions (les deux points dont vous obtenez la distance, la sphère/sphéroïde et un facteur de référence/projection). Pour cela, vous devez probablement utiliser une chaîne de caractères développée, dans laquelle vous connecterez votre point avec n sommets, chacun d'entre eux étant conscient de Z. Imaginez ceci (lâche WKT): LINESTRING ((0,1,2), (0,2,3), (0,3,4), (0,10,15), (0,11, 0,92) -1)). Demander au logiciel de calculer la distance entre chaque sommet et de le résumer, considérera les variations du terrain. Mais sans quelque chose comme ça, il est impossible de cartographier les irrégularités dans le terrain.

Tous les logiciels SIG ne peuvent pas dire, par eux-mêmes, quelles sont ces irrégularités dans le terrain et, par conséquent, ne pas en tenir compte.

Vous pouvez créer de telles lignes (automatiquement) avec des logiciels comme ArcGIS (et autres), en utilisant une ligne (entre deux points) et un fichier de surface, comme ceux fournis gratuitement par NASA (projet SRTM). Ces fichiers sont au format raster et chaque pixel a une valeur X Y et Z, en mètres. Traversant la ligne que vous voulez, couplé avec ce profil de terrain, vous pouvez réaliser le calcul que vous voulez réaliser. Si vous avez besoin de calculs super précis, vous avez besoin d'une surface précise et de valeurs Z précises dans chaque sommet de cette ligne de profil.

Qui a disparu?

1

Si la formule de distance que vous utilisez ne prend pas en paramètre l'altitude des deux points (en plus des Latitudes et Longitudes des deux points), elle ne tient pas compte de l'altitude du calcul de distance. En tout état de cause, la différence d'altitude n'a pas d'effet très significatif sur la distance calculée. Comme d'habitude avec le GPS, la différence de calcul de distance que ferait l'altitude est probablement plus petite que celle de la plupart des appareils GPS commerciaux, donc dans la plupart des applications l'altitude peut être évitée (les mesures d'altitude sont assez imprécises). Appareils GPS, bien que les données d'enquête sur les altitudes soient assez précises).

1

PostgreSQL ne prend pas en compte l'altitude lors du calcul des distances. Tout est fait dans une surface plane.

La plupart des packages spatiaux de base de données n'en tiennent pas compte, si votre point est 3d, c'est-à-dire que la coordonnée Z est susceptible de se produire.

Je n'ai pas PostgreSQL dans cette machine, mais essayez ceci.

SELECT ST_DISTANCE (ST_POINT (0,0,10), ST_POINT (0,0,0));

Il est assez facile de savoir s'il prend en compte votre valeur Z, puisque le retour doit être> 0; Si cela s'avère être vrai, il suffit de créer des fonctions Z, et vous aurez du succès. Ce que SQL Server 2008, par exemple, prend en compte lors du calcul des distances, est la position d'une entité Géographie dans une sphère. Les fonctions de géométrie dans SQL SERVER utilisent toujours des calculs planaires.

EDIT: vérifié cela dans PostGIS manuel

Pour les points Z au courant, vous devez utiliser la fonction ST_MakePoint. Il prend jusqu'à 4 arguments (X Y Z et M).ST_Point ne prend que deux (XY)

http://postgis.refractions.net/documentation/manual-1.4/ST_Distance.html ST_Distance = calculs 2D

documentation ST_DISTANCE_SPHERE (prend en compte une sphère fixe pour les calculs - alias non planes) http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Sphere.html

documentation ST_DISTANCE_SPHEROID (prend en compte choisir sphéroïde pour vos calculs) http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Spheroid.html

Documentation ST_POINT http://postgis.refractions.net/documentation/manual-1.4/ST_Point.html

+0

@George, ce qui ne me paraît pas clair dans les liens que vous avez fournis, c'est si cela prend en compte les changements d'altitude entre les deux points. Par exemple, disons que les deux extrémités se trouvent à l'altitude de l'océan (0) mais qu'une montagne existe entre les deux points. Le changement d'altitude pour monter cette montagne du point A au point B doit être pris en compte. –

Questions connexes