Suite

Calcul de la distance entre un point et une ligne virtuelle de deux lat/lng


Veuillez vous référer à l'exemple et à l'image correspondante.

Je souhaite obtenir les résultats suivants : fournir deux emplacements (lat/lng), qui sont indiqués ci-dessous comme UNE et B. À partir de là, une ligne virtuelle serait tracée, puis la distance entre cette ligne et C serait calculé (dans n'importe quelle mesure).

J'y suis actuellement parvenu dans l'API Google Maps v3, mais je souhaiterais également pouvoir l'effectuer en coulisses dans la langue de mon choix. Tous les conseils/idées seraient grandement appréciés!


def get_perp(X1, Y1, X2, Y2, X3, Y3) : """****************************** ************************************************** *************** Objet - X1,Y1,X2,Y2 = Deux points représentant les extrémités du segment de ligne X3,Y3 = Le point de décalage 'Retours - X4,Y4 = Renvoie le Point sur la ligne perpendiculaire au décalage ou Aucun si aucun point n'existe '************************************ ************************************************** ************ """ XX = X2 - X1 YY = Y2 - Y1 Longueur la plus courte = ((XX * (X3 - X1)) + (YY * (Y3 - Y1))) / ( (XX * XX) + (YY * YY)) X4 = X1 + XX * ShortestLength Y4 = Y1 + YY * ShortestLength si X4 < X2 et X4 > X1 et Y4 < Y2 et Y4 > Y1 : renvoie X4, Y4 renvoie Aucun

La longueur la plus courte est la distance dont vous avez besoin, sauf erreur de ma part ?


Peut-être que je rends les choses trop compliquées, mais ce que vous voulez, c'est la distance d'un point à une ligne. C'est la distance d'un point le long de AB qui relie AB à C avec une ligne orthogonale à AB. Ce vecteur perpendiculaire à AB est donné par

v=[x2-x1, -(y2-y1)] # Le point A est [x1,y1] Le point B est [x2,y2]

(J'ai utilisé les crochets pour définir un vecteur ou un tableau à deux éléments). La distance entre C [xp, yp] et le point A est

u=[x1-xp, y1-xp]

La distance entre la ligne et C est juste la projection de u sur v. Si nous supposons que mod(v) = 1 (juste le normaliser), alors

distance = u*v = abs( (x2-x1)*(y1-yp) - (x1-xp)*(y2-y1) )

La seule complication est que vous voulez probablement vous assurer que vos coordonnées ne sont pas des paires lat/log WGS84, mais projetées (ou utilisez des coordonnées géodésiques). Vous pouvez utiliser OGR ou Proj4 pour cela.


Étant un peu opposé à tous ces calculs également, je l'aborderais sous un angle différent. J'en ferais une ligne "réelle", plutôt qu'une ligne virtuelle, puis j'utiliserais les outils existants.

Si A et B partagent un attribut, vous pouvez les connecter en traçant une ligne (Kosmo GIS a un outil qui créera des lignes à partir de points, et je pense qu'il existe également un plugin QGIS pour cela). Une fois que vous avez les lignes, une fonction « près » sur la couche de points « C » vous donnera la distance à la ligne. Laissez le logiciel gérer les maths pour vous !


Si vous utilisiez Java sur Android, c'est une seule ligne avec la fonction de bibliothèque

importer com.google.maps.android.PolyUtil.distanceToLine statique ;

distanceVersLigne :

public statique double distanceToLine (LatLng p, LatLng start, LatLng end)

Calcule la distance sur la sphère entre le point p et le début à la fin du segment de droite.

Paramètres : p - le point à mesurer

start - le début du segment de ligne

end - la fin du segment de ligne

Renvoie : la distance en mètres (en supposant une terre sphérique)

Ajoutez simplement la bibliothèque à votre

dépendances { compiler 'com.google.maps.android:android-maps-utils:0.5+' }

Utilisez la formule suivante pour trouver la distance entre deux lat-long :

Passez lat,longs avec la fonction et l'unité dans laquelle vous voulez la distance ("K" pour kilomètre et "M" pour Miles). J'espère que ceci vous aidera.

Location.distanceBetween() le fera pour deux points de coordonnées Latitude Longitude.

Lorsque vous voyagez par la route (même par voie aérienne aussi), le relèvement de la Terre entre en jeu puisque la Terre n'est pas plate. mais cette formule Haversine devrait déjà s'en occuper. Deuxièmement, ce que les gens ont pu dire, c'est que lorsque vous voyagez par la route, vous n'allez pas tout droit entre deux points. vous faites un certain nombre de tours. Et pour indiquer "précisément" la distance entre deux points, vous voudrez peut-être aussi prendre ces virages en considération.

J'ai trouvé l'exemple de code dans le lien suivant pour calculer la distance passant par les routes.

Sa distance semble plus grande, car les trains et les camions ne se déplacent pas en ligne droite mais les avions le font.

Vous avez besoin d'une feuille de route pour calculer la distance


Fonctions géographiques en SQL standard

Les fonctions géographiques fonctionnent sur ou génèrent des valeurs BigQuery GEOGRAPHY. La signature de toute fonction géographique commence par ST_ . BigQuery prend en charge les fonctions suivantes qui peuvent être utilisées pour analyser des données géographiques, déterminer des relations spatiales entre des entités géographiques et construire ou manipuler des GEOGRAPHY .

Toutes les fonctions géographiques BigQuery renvoient NULL si un argument d'entrée est NULL .

Catégories

Les fonctions géographiques sont regroupées dans les catégories suivantes en fonction de leur comportement :

Catégorie Les fonctions La description
Constructeurs ST_GEOGPOINT
ST_MAKELINE
ST_MAKEPOLYGONE
ST_MAKEPOLYGONORIENTED
Fonctions qui créent de nouvelles valeurs géographiques à partir de coordonnées ou de géographies existantes.
Analyseurs ST_GEOGFROM
ST_GEOGFROMGEOJSON
ST_GEOGFROMTEXT
ST_GEOGFROMWKB
ST_GEOGPOINTDE GEOHASH
Fonctions qui créent des géographies à partir d'un format externe tel que WKT et GeoJSON.
Formateurs ST_ASBINAIRE
ST_ASGEOJSON
ST_ASTEXT
ST_GEOHASH
Fonctions qui exportent des géographies vers un format externe tel que WKT.
Transformations ST_BOUNDARY
ST_CENTROID
ST_CENTROID_AGG (agrégat)
ST_CLOSESTPOINT
ST_CONVEXCOQUE
ST_DIFFERENCE
ST_DUMP
ST_INTERSECTION
ST_SIMPLIFIER
ST_SNAPTOGRID
ST_UNION
ST_UNION_AGG (agrégat)
Fonctions qui génèrent une nouvelle géographie basée sur les entrées.
Accesseurs ST_DIMENSION
ST_DUMP
ST_ENDPOINT
ST_ISCOLLECTION
ST_ISEMPTY
ST_NPOINTS
ST_NUMPOINTS
ST_POINTN
ST_STARTPOINT
ST_X
PORCHERIE
Fonctions qui donnent accès aux propriétés d'une géographie sans effets secondaires.
Prédicats ST_CONTAINS
ST_COVEREDBY
ST_COVERS
ST_DISJOINT
ST_DWITHIN
ST_EQUALS
ST_INTERSECTES
ST_INTERSECTSBOX
ST_TOUCHES
ST_WITHIN
Fonctions qui renvoient TRUE ou FALSE pour une relation spatiale entre deux géographies ou une propriété d'une géographie. Ces fonctions sont couramment utilisées dans les clauses de filtrage.
Les mesures ST_AREA
ST_DISTANCE
ST_LENGTH
ST_MAXDISTANCE
ST_PERIMETRE
Fonctions qui calculent les mesures d'une ou plusieurs zones géographiques.
Regroupement ST_CLUSTERDBSCAN Fonctions qui effectuent le clustering sur des géographies.

ST_AREA

La description

Renvoie la superficie en mètres carrés couverte par les polygones dans l'entrée GEOGRAPHY .

Si géographie_expression est un point ou une ligne, renvoie zéro. Si géographie_expression est une collection, renvoie l'aire des polygones de la collection si la collection ne contient pas de polygones, renvoie zéro.

Le paramètre facultatif use_spheroid détermine comment cette fonction mesure la distance. Si use_spheroid est FALSE , la fonction mesure la distance à la surface d'une sphère parfaite.

Le paramètre use_spheroid ne prend actuellement en charge que la valeur FALSE . La valeur par défaut de use_spheroid est FALSE .

Type de retour

ST_ASBINAIRE

La description

Renvoie la représentation WKB d'une entrée GEOGRAPHY .

Voir ST_GEOGFROMWKB pour construire une GEOGRAPHIE à partir de WKB.

Type de retour

ST_ASGEOJSON

La description

Renvoie la représentation GeoJSON conforme à la RFC 7946 de l'entrée GEOGRAPHY .

Un objet BigQuery GEOGRAPHY a des arêtes géodésiques sphériques, tandis qu'un objet GeoJSON Geometry a explicitement des arêtes planes. Pour effectuer la conversion entre ces deux types d'arêtes, BigQuery ajoute des points supplémentaires à la ligne si nécessaire afin que la séquence d'arêtes résultante reste à moins de 10 mètres de l'arête d'origine.

Voir ST_GEOGFROMGEOJSON pour construire une GEOGRAPHIE à partir de GeoJSON.

Type de retour

ST_ASTEXT

La description

Renvoie la représentation WKT d'une entrée GEOGRAPHY .

Voir ST_GEOGFROMTEXT pour construire une GEOGRAPHIE à partir de WKT.

Type de retour

ST_BOUNDARY

La description

Renvoie un seul GEOGRAPHY qui contient l'union des limites de chaque composant dans l'entrée GEOGRAPHY donnée.

La limite de chaque composante d'une GÉOGRAPHIE est définie comme suit :

  • La limite d'un point est vide.
  • La limite d'une chaîne de lignes se compose des extrémités de la chaîne de lignes.
  • La limite d'un polygone se compose des chaînes de lignes qui forment la coque du polygone et de chacun des trous du polygone.

Type de retour

ST_CENTROID

La description

Renvoie le centre de gravité de l'entrée GEOGRAPHIE en un seul point GEOGRAPHIE .

le centre de gravité d'une GÉOGRAPHIE est la moyenne pondérée des centroïdes des composantes les plus dimensionnelles de la GÉOGRAPHIE . Le centroïde des composants dans chaque dimension est défini comme suit :

  • Le centre de gravité des points est la moyenne arithmétique des coordonnées d'entrée.
  • Le centroïde des chaînes de lignes est le centroïde de toutes les arêtes pondérées par la longueur. Le centre de gravité de chaque arête est le milieu géodésique de l'arête.
  • Le centre de gravité d'un polygone est son centre de masse.

Si l'entrée GEOGRAPHY est vide, une GEOGRAPHY vide est renvoyée.

Contraintes

Dans le cas improbable où le centroïde d'une GÉOGRAPHIE ne peut pas être défini par un seul point à la surface de la Terre, un point déterministe mais arbitraire est renvoyé. Cela ne peut se produire que si le centre de gravité est exactement au centre de la Terre, comme le centre de gravité pour une paire de points antipodaux, et la probabilité que cela se produise est extrêmement faible.

Type de retour

ST_CENTROID_AGG

La description

Calcule le centroïde de l'ensemble de GEOGRAPHIE d'entrée en tant que GEOGRAPHIE à point unique.

le centre de gravité sur l'ensemble de GEOGRAPHIE d'entrée s est la moyenne pondérée du centroïde de chaque GEOGRAPHIE individuelle. Seules les GEOGRAPHIES ayant la dimension la plus élevée présentes dans l'entrée contribuent au centroïde de l'ensemble. Par exemple, si l'entrée contient à la fois des GEOGRAPHY avec des lignes et des GEOGRAPHY avec uniquement des points, ST_CENTROID_AGG renvoie la moyenne pondérée des GEOGRAPHY avec des lignes, puisque celles-ci ont une dimension maximale. Dans cet exemple, ST_CENTROID_AGG ignore les GEOGRAPHY avec uniquement des points lors du calcul du centroïde global.

ST_CENTROID_AGG ignore les valeurs GEOGRAPHIE d'entrée NULL.

Voir ST_CENTROID pour la version non agrégée de ST_CENTROID_AGG et la définition du centroïde pour une valeur GEOGRAPHIE individuelle.

Type de retour

Les requêtes suivantes calculent le centroïde agrégé sur un ensemble de valeurs GÉOGRAPHIE. L'entrée de la première requête ne contient que des points et, par conséquent, chaque valeur contribue au centroïde agrégé. Notez également que ST_CENTROID_AGG est ne pas équivalent à appeler ST_CENTROID sur le résultat de ST_UNION_AGG les doublons sont supprimés par l'union, contrairement à ST_CENTROID_AGG . L'entrée de la deuxième requête a des dimensions mixtes et seules les valeurs ayant la dimension la plus élevée de l'ensemble, les lignes, affectent le centroïde global.

ST_CLOSESTPOINT

La description

Renvoie une GEOGRAPHIE contenant un point sur géographie_1 avec la plus petite distance possible par rapport à géographie_2 . Cela implique que la distance entre le point renvoyé par ST_CLOSESTPOINT et géographie_2 est inférieure ou égale à la distance entre tout autre point sur géographie_1 et géographie_2 .

Si l'une des entrées GEOGRAPHY est vide, ST_CLOSESTPOINT renvoie NULL .

Le paramètre facultatif use_spheroid détermine comment cette fonction mesure la distance. Si use_spheroid est FALSE , la fonction mesure la distance à la surface d'une sphère parfaite.

Le paramètre use_spheroid ne prend actuellement en charge que la valeur FALSE . La valeur par défaut de use_spheroid est FALSE .

Type de retour

ST_CLUSTERDBSCAN

Effectue un clustering DBSCAN sur une colonne de zones géographiques. Renvoie un numéro de cluster basé sur 0.

Paramètres d'entrée

  • Geographic_column : une colonne de GEOGRAPHIE qui est regroupée.
  • epsilon : L'epsilon qui spécifie le rayon, mesuré en mètres, autour d'une valeur centrale. Valeur FLOAT64 non négative.
  • minimum_geographies : spécifie le nombre minimum de zones géographiques dans un seul cluster. Seule l'entrée dense forme un cluster, sinon elle est classée comme bruit. Valeur INT64 non négative.

OVER : Spécifie une fenêtre. Voir Fonctions analytiques. L'utilisation de la clause OVER avec ST_CLUSTERDBSCAN est compatible avec les éléments suivants :

Types de géographie et algorithme DBSCAN

L'algorithme DBSCAN identifie les grappes de données à haute densité et marque les valeurs aberrantes dans les zones de bruit à faible densité. Les géographies transmises via géographie_column sont classées de l'une des trois manières suivantes par l'algorithme DBSCAN :

  • Valeur de base : une géographie est une valeur de base si elle se trouve à une distance epsilon des géographies minimum_geographies, y compris elle-même. La valeur de base démarre un nouveau cluster ou est ajoutée au même cluster en tant que valeur de base à une distance d'epsilon. Les valeurs de base sont regroupées dans un cluster avec toutes les autres valeurs de base et de bordure qui se trouvent à une distance d'epsilon.
  • Valeur de frontière : une géographie est une valeur de frontière si elle se trouve à une distance epsilon d'une valeur de base. Il est ajouté au même cluster en tant que valeur de base à distance epsilon. Une valeur de frontière peut être à une distance epsilon de plusieurs clusters. Dans ce cas, il peut être assigné arbitrairement à l'un ou l'autre des clusters et la fonction produira le même résultat lors des appels suivants.
  • Bruit : Une géographie est du bruit si elle n'est ni une valeur centrale ni une valeur frontière. Les valeurs de bruit sont affectées à un cluster NULL. Une GEOGRAPHIE vide est toujours classée comme bruit.

Contraintes

  • L'argument minimum_geographies est un INT64 non négatif et epsilon est un FLOAT64 non négatif .
  • Une géographie vide ne peut rejoindre aucun cluster.
  • Des affectations de clustering multiples pourraient être possibles pour une valeur de frontière. Si une géographie est une valeur de frontière, ST_CLUSTERDBSCAN l'affectera à un cluster valide arbitraire.

Type de retour

INT64 pour chaque géographie dans la colonne géographie.

Cet exemple effectue un clustering DBSCAN avec un rayon de 100 000 mètres avec un argument minimum_geographies de 1. Les géographies analysées sont un mélange de points, de lignes et de polygones.

ST_CONTAINS

La description

Renvoie VRAI si aucun point de géographie_2 n'est à l'extérieur de géographie_1 , et les intérieurs se coupent renvoie FAUX sinon.

REMARQUE : UNE GÉOGRAPHIE ne fait pas contenir sa propre limite. Comparez avec ST_COVERS .

Type de retour

La requête suivante teste si le polygone POLYGONE((1 1, 20 1, 10 20, 1 1)) contient chacun des trois points (0, 0) , (1, 1) et (10, 10) , qui se trouvent à l'extérieur, la limite et l'intérieur du polygone respectivement.

ST_CONVEXCOQUE

La description

Renvoie l'enveloppe convexe de l'entrée GEOGRAPHY . L'enveloppe convexe est la plus petite GÉOGRAPHIE convexe qui couvre l'entrée. Une GÉOGRAPHIE est convexe si pour chaque paire de points de la GÉOGRAPHIE, l'arête géodésique reliant les points est également contenue dans la même GÉOGRAPHIE.

Dans la plupart des cas, l'enveloppe convexe se compose d'un seul polygone. Les cas extrêmes notables sont les suivants :

  • L'enveloppe convexe d'un seul point est aussi un point.
  • L'enveloppe convexe de deux ou plusieurs points colinéaires est une ligne tant que cette ligne est convexe.
  • Si la GEOGRAPHIE d'entrée s'étend sur plus d'un hémisphère, l'enveloppe convexe est le globe entier. Cela inclut toute entrée qui contient une paire de points antipodaux.
  • ST_CONVEXHULL renvoie NULL si l'entrée est NULL ou la GEOGRAPHIE vide.

Type de retour

L'enveloppe convexe renvoyée par ST_CONVEXHULL peut être un point, une chaîne de lignes ou un polygone, selon l'entrée.

ST_COVEREDBY

La description

Renvoie FALSE si géographie_1 ou géographie_2 est vide. Renvoie VRAI si aucun point de géographie_1 ne se trouve à l'extérieur de géographie_2 .

Étant donné deux GEOGRAPHY s a et b , ST_COVEREDBY(a, b) renvoie le même résultat que ST_COVERS (b, a) . Notez l'ordre inverse des arguments.

Type de retour

ST_COVERS

La description

Renvoie FALSE si géographie_1 ou géographie_2 est vide. Renvoie VRAI si aucun point de géographie_2 ne se trouve à l'extérieur de géographie_1 .

Type de retour

La requête suivante teste si le polygone POLYGONE((1 1, 20 1, 10 20, 1 1)) couvre chacun des trois points (0, 0) , (1, 1) et (10, 10) , qui se trouvent à l'extérieur, la limite et l'intérieur du polygone respectivement.

ST_DIFFERENCE

La description

Renvoie une GEOGRAPHIE qui représente la différence d'ensemble de points entre géographie_1 et géographie_2 .

Si geometry_1 est entièrement contenu dans geometry_2 , alors ST_DIFFERENCE renvoie une GEOGRAPHIE vide .

Contraintes

Les objets géométriques sous-jacents représentés par BigQuery GEOGRAPHY correspondent à un fermé ensemble de points. Par conséquent, ST_DIFFERENCE est la fermeture de la différence d'ensemble de points de géographie_1 et géographie_2 . Cela implique que si géographie_1 et géographie_2 se croisent, une partie de la limite de géographie_2 pourrait se trouver dans la différence.

Type de retour

ST_DIMENSION

La description

Renvoie la dimension de l'élément de dimension la plus élevée dans l'entrée GEOGRAPHY .

La dimension de chaque élément possible est la suivante :

  • La dimension d'un point est 0 .
  • La dimension d'une ligne est 1 .
  • La dimension d'un polygone est 2 .

Si l'entrée GEOGRAPHIE est vide, ST_DIMENSION renvoie -1 .

Type de retour

ST_DISJOINT

La description

Renvoie VRAI si l'intersection de géographie_1 et géographie_2 est vide, c'est-à-dire qu'aucun point de géographie_1 n'apparaît également dans géographie_2 .

ST_DISJOINT est la négation logique de ST_INTERSECTS .

Type de retour

ST_DISTANCE

La description

Renvoie la distance la plus courte en mètres entre deux GEOGRAPHY non vides.

Si l'une des entrées GEOGRAPHY est vide, ST_DISTANCE renvoie NULL .

Le paramètre facultatif use_spheroid détermine comment cette fonction mesure la distance. Si use_spheroid est FALSE , la fonction mesure la distance à la surface d'une sphère parfaite.

Le paramètre use_spheroid ne prend actuellement en charge que la valeur FALSE . La valeur par défaut de use_spheroid est FALSE .

Type de retour

ST_DUMP

La description

Renvoie un ARRAY de GEOGRAPHY simples où chaque élément est un composant de l'entrée GEOGRAPHY . Une GÉOGRAPHIE simple consiste en un seul point, une chaîne de lignes ou un polygone. Si l'entrée GEOGRAPHIE est simple, le résultat est un élément unique. Lorsque l'entrée GEOGRAPHY est une collection, ST_DUMP renvoie un ARRAY avec une simple GEOGRAPHY pour chaque composant de la collection.

Si la dimension est fournie, la fonction renvoie uniquement les GEOGRAPHIE de la dimension correspondante. Une dimension de -1 équivaut à omettre la dimension .

Type de retour

L'exemple suivant montre comment ST_DUMP renvoie les géographies simples dans une géographie complexe.

L'exemple suivant montre comment ST_DUMP avec l'argument dimension ne renvoie que des géographies simples de la dimension donnée.

ST_DWITHIN

La description

Renvoie VRAI si la distance entre au moins un point de géographie_1 et un point de géographie_2 est inférieure ou égale à la distance donnée par l'argument distance sinon, renvoie FAUX . Si l'une des entrées GEOGRAPHY est vide, ST_DWithin renvoie FALSE . La distance donnée est en mètres à la surface de la Terre.

Le paramètre facultatif use_spheroid détermine comment cette fonction mesure la distance. Si use_spheroid est FALSE , la fonction mesure la distance à la surface d'une sphère parfaite.

Le paramètre use_spheroid ne prend actuellement en charge que la valeur FALSE . La valeur par défaut de use_spheroid est FALSE .

Type de retour

ST_ENDPOINT

La description

Renvoie le dernier point d'une géographie de chaîne de lignes en tant que géographie de points. Renvoie une erreur si l'entrée n'est pas une chaîne de ligne ou si l'entrée est vide. Utilisez le préfixe SAFE pour obtenir NULL pour une entrée non valide au lieu d'une erreur.

Type de retour

ST_EQUALS

La description

Renvoie VRAI si géographie_1 et géographie_2 représentent la même chose

valeur GÉOGRAPHIE. Plus précisément, cela signifie que l'une des conditions suivantes est vérifiée : + ST_COVERS(geography_1, géographie_2) = TRUE et ST_COVERS(geography_2, géographie_1) = TRUE + Géographie_1 et géographie_2 sont vides.

Par conséquent, deux GEOGRAPHIES peuvent être égales même si l'ordre des points ou des sommets diffère, tant qu'ils représentent toujours la même structure géométrique.

Contraintes

ST_EQUALS n'est pas garanti comme une fonction transitive.

Type de retour

ST_GEOGFROM

La description

Convertit une expression pour une valeur STRING ou BYTES en une valeur GEOGRAPHY.

Si expression représente une valeur STRING, il doit s'agir d'une représentation GEOGRAPHY valide dans l'un des formats suivants :

  • Format WKT. Pour en savoir plus sur ce format et les conditions requises pour l'utiliser, consultez ST_GEOGFROMTEXT.
  • WKB au format texte hexadécimal. Pour en savoir plus sur ce format et les conditions requises pour l'utiliser, consultez ST_GEOGFROMWKB.
  • Format GeoJSON. Pour en savoir plus sur ce format et les conditions requises pour l'utiliser, consultez ST_GEOGFROMGEOJSON.

Si expression représente une valeur BYTES, il doit s'agir d'une expression binaire GEOGRAPHY valide au format WKB. Pour en savoir plus sur ce format et les conditions requises pour l'utiliser, consultez ST_GEOGFROMWKB.

Si expression est NULL , la sortie est NULL .

Type de retour

Cela prend une chaîne au format WKT et renvoie un polygone GEOGRAPHY :

Cela prend une chaîne codée en hexadécimal au format WKB et renvoie un point GEOGRAPHY :

Cela prend des octets au format WKB et renvoie un point GEOGRAPHY :

Cela prend une chaîne au format GEOJSON et renvoie un polygone GEOGRAPHY :

ST_GEOGFROMGEOJSON

La description

Renvoie une valeur GEOGRAPHY qui correspond à la représentation GeoJSON d'entrée.

ST_GEOGFROMGEOJSON accepte les entrées conformes à la RFC 7946.

Si le paramètre make_valid est défini sur TRUE , la fonction tente de réparer les polygones qui ne sont pas conformes à la sémantique Open Geospatial Consortium. Ce paramètre utilise la syntaxe d'argument nommé et doit être spécifié à l'aide de la syntaxe make_valid => argument_value.

Un objet BigQuery GEOGRAPHY a des arêtes géodésiques sphériques, tandis qu'un objet GeoJSON Geometry a explicitement des arêtes planes. Pour effectuer la conversion entre ces deux types d'arêtes, BigQuery ajoute des points supplémentaires à la ligne si nécessaire afin que la séquence d'arêtes résultante reste à moins de 10 mètres de l'arête d'origine.

Voir ST_ASGEOJSON pour formater une GEOGRAPHIE en GeoJSON.

Contraintes

L'entrée est soumise aux contraintes suivantes :

  • ST_GEOGFROMGEOJSON accepte uniquement les fragments de géométrie JSON et ne peut pas être utilisé pour ingérer un document JSON entier.
  • Le fragment JSON d'entrée doit être constitué d'un type de géométrie GeoJSON, qui inclut Point , MultiPoint , LineString , MultiLineString , Polygon , MultiPolygon et GeometryCollection . Tout autre type GeoJSON tel que Feature ou FeatureCollection entraînera une erreur.
  • Une position dans le membre des coordonnées d'un type de géométrie GeoJSON doit être constituée d'exactement deux éléments. Le premier est la longitude et le second est la latitude. Par conséquent, ST_GEOGFROMGEOJSON ne prend pas en charge le troisième élément facultatif pour une position dans le membre de coordonnées.

Type de retour

ST_GEOGFROMTEXT

Signature 1

La description

Renvoie une valeur GEOGRAPHY qui correspond à la représentation WKT d'entrée.

Cette fonction prend en charge un paramètre facultatif de type BOOL , orienté . Si ce paramètre est défini sur TRUE , tous les polygones en entrée sont supposés être orientés comme suit : si quelqu'un marche le long de la limite du polygone dans l'ordre des sommets en entrée, l'intérieur du polygone est à gauche. Cela permet à WKT de représenter des polygones plus grands qu'un hémisphère. Si orienté est FAUX ou omis, cette fonction renvoie le polygone avec la plus petite surface. Voir aussi ST_MAKEPOLYGONORIENTED qui est similaire à ST_GEOGFROMTEXT avec oriented=TRUE .

Pour formater GEOGRAPHY en WKT, utilisez ST_ASTEXT .

Contraintes

  • Toutes les arêtes en entrée sont supposées être des géodésiques sphériques, et ne pas lignes droites planes. Pour lire des données dans une projection planaire, envisagez d'utiliser ST_GEOGFROMGEOJSON . Pour plus d'informations sur les différences entre les géodésiques sphériques et les lignes planes, voir Systèmes de coordonnées et arêtes.
  • La fonction ne prend pas en charge les géométries tridimensionnelles qui ont un suffixe Z, ni les géométries du système de référencement linéaire avec un suffixe M.
  • La fonction prend uniquement en charge les primitives de géométrie et les géométries en plusieurs parties. En particulier, il ne prend en charge que Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon et GeometryCollection.

Type de retour

La requête suivante lit la chaîne WKT POLYGON((0 0, 0 2, 2 2, 2 0, 0 0)) à la fois comme un polygone non orienté et comme un polygone orienté, et vérifie si chaque résultat contient le point (1, 1) .

Signature 2

La description

Renvoie une valeur GEOGRAPHY qui correspond à la représentation WKT d'entrée.

Cette fonction prend en charge trois paramètres facultatifs de type BOOL : oriented , planar et make_valid . Cette signature utilise la syntaxe des arguments nommés et les paramètres doivent être spécifiés à l'aide de la syntaxe parameter_name => parameter_value, dans n'importe quel ordre.

Si le paramètre orienté est défini sur TRUE , tous les polygones en entrée sont supposés être orientés comme suit : si quelqu'un marche le long de la limite du polygone dans l'ordre des sommets en entrée, l'intérieur du polygone est à gauche. Cela permet à WKT de représenter des polygones plus grands qu'un hémisphère. Si orienté est FAUX ou omis, cette fonction renvoie le polygone avec la plus petite surface. Voir aussi ST_MAKEPOLYGONORIENTED qui est similaire à ST_GEOGFROMTEXT avec oriented=TRUE .

Si le paramètre planar est défini sur TRUE , les bords des chaînes de lignes et des polygones sont supposés utiliser la sémantique de la carte planaire, plutôt que la sémantique des géodésiques sphériques par défaut de BigQuery. Pour plus d'informations sur les différences entre les géodésiques sphériques et les lignes planes, voir Systèmes de coordonnées et arêtes.

Si le paramètre make_valid est défini sur TRUE , la fonction tente de réparer les polygones qui ne sont pas conformes à la sémantique Open Geospatial Consortium.

Pour formater GEOGRAPHY en WKT, utilisez ST_ASTEXT .

Contraintes

  • Toutes les arêtes en entrée sont supposées être des géodésiques sphériques par défaut, et ne pas lignes droites planes. Pour lire les données dans une projection planaire, transmettez l'argument planar => TRUE ou envisagez d'utiliser ST_GEOGFROMGEOJSON . Pour plus d'informations sur les différences entre les géodésiques sphériques et les lignes planes, voir Systèmes de coordonnées et arêtes.
  • La fonction ne prend pas en charge les géométries tridimensionnelles qui ont un suffixe Z, ni les géométries du système de référencement linéaire avec un suffixe M.
  • La fonction ne prend en charge que les primitives géométriques et les géométries en plusieurs parties. En particulier, il ne prend en charge que Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon et GeometryCollection.
  • orienté et planaire ne peut pas être égal à VRAI en même temps.
  • orienté et make_valid ne peuvent pas être égaux à TRUE en même temps.

La requête suivante lit la chaîne WKT POLYGON((0 0, 0 2, 2 2, 0 2, 0 0)) à la fois comme un polygone non orienté et comme un polygone orienté, et vérifie si chaque résultat contient le point (1, 1) .

La requête suivante convertit une chaîne WKT avec un polygone non valide en GEOGRAPHY . La chaîne WKT viole deux propriétés d'un polygone valide : la boucle décrivant le polygone n'est pas fermée et elle contient une auto-intersection. Avec l'option make_valid, ST_GeogFromText le convertit avec succès en une forme multipolygone.

ST_GEOGFROMWKB

La description

Convertit une expression pour une valeur STRING ou BYTES de texte hexadécimal en une valeur GEOGRAPHY. L'expression doit être au format WKB.

Pour formater GEOGRAPHY en WKB, utilisez ST_ASBINARY .

Contraintes

Toutes les arêtes en entrée sont supposées être des géodésiques sphériques, et ne pas lignes droites planes. Pour lire des données dans une projection planaire, envisagez d'utiliser ST_GEOGFROMGEOJSON .

Type de retour

ST_GEOGPOINT

La description

Crée une GÉOGRAPHIE avec un seul point. ST_GEOGPOINT crée un point à partir des paramètres de longitude et de latitude FLOAT64 spécifiés et renvoie ce point dans une valeur GEOGRAPHY.

Contraintes

  • Les latitudes doivent être comprises entre [-90, 90]. Les latitudes en dehors de cette plage entraîneront une erreur.
  • Les longitudes en dehors de la plage [-180, 180] sont autorisées ST_GEOGPOINT utilise la longitude d'entrée modulo 360 pour obtenir une longitude comprise entre [-180, 180].

Type de retour

ST_GEOGPOINTDE GEOHASH

La description

Renvoie une valeur GEOGRAPHY qui correspond à un point au milieu d'un cadre de délimitation défini dans le GeoHash.

Type de retour

ST_GEOHASH

La description

Renvoie une représentation GeoHash de géographie_expression . Le GeoHash résultant contiendra au plus des caractères maxchars. Moins de caractères correspond à une précision inférieure (ou, décrit différemment, à un cadre de délimitation plus grand).

ST_GeoHash sur un objet GEOGRAPHY vide renvoie NULL .

Contraintes

  • Seuls les objets GEOGRAPHY représentant des points uniques sont pris en charge.
  • La valeur maximale de maxchars est 20.

Type de retour

Renvoie un GeoHash du Seattle Center avec 10 caractères de précision.

ST_INTERSECTION

La description

Renvoie une GEOGRAPHY qui représente l'intersection de l'ensemble de points des deux GEOGRAPHY d'entrée. Ainsi, chaque point de l'intersection apparaît à la fois dans géographie_1 et géographie_2 .

Si les deux entrées GEOGRAPHY sont disjointes, c'est-à-dire qu'aucun point n'apparaît à la fois dans l'entrée geometry_1 et dans geometry_2 , une GEOGRAPHIE vide est renvoyée.

Voir ST_INTERSECTS, ST_DISJOINT pour les fonctions de prédicat associées.

Type de retour

ST_INTERSECTES

La description

Renvoie VRAI si l'intersection de l'ensemble de points de géographie_1 et géographie_2 n'est pas vide. Ainsi, cette fonction renvoie TRUE s'il y a au moins un point qui apparaît dans les deux entrées GEOGRAPHY.

Si ST_INTERSECTS renvoie TRUE , cela implique que ST_DISJOINT renvoie FALSE .

Type de retour

ST_INTERSECTSBOX

La description

Renvoie TRUE si la géographie coupe le rectangle entre [lng1, lng2] et [lat1, lat2] . Les bords du rectangle suivent des lignes constantes de longitude et de latitude. lng1 et lng2 spécifient les lignes de longitude constante les plus à l'ouest et à l'est qui délimitent le rectangle, et lat1 et lat2 spécifient les lignes de latitude constante minimale et maximale qui délimitent le rectangle.

Spécifiez tous les arguments de longitude et de latitude en degrés.

Contraintes

Les arguments d'entrée sont soumis aux contraintes suivantes :

  • Les latitudes doivent être comprises entre [-90, 90] degrés.
  • Les longitudes doivent être comprises entre [-180, 180] degrés.

Type de retour

ST_ISCOLLECTION

La description

Renvoie TRUE si le nombre total de points, de lignes et de polygones est supérieur à un.

Une GEOGRAPHIE vide n'est pas une collection.

Type de retour

ST_ISEMPTY

La description

Renvoie VRAI si la GÉOGRAPHIE donnée est vide, c'est-à-dire que la GÉOGRAPHIE ne contient aucun point, ligne ou polygone.

REMARQUE : Une GEOGRAPHIE vide BigQuery n'est pas associée à une forme géométrique particulière. Par exemple, les résultats des expressions ST_GEOGFROMTEXT('POINT EMPTY') et ST_GEOGFROMTEXT('GEOMETRYCOLLECTION EMPTY') sont identiques.

Type de retour

ST_LENGTH

La description

Renvoie la longueur totale en mètres des lignes dans l'entrée GEOGRAPHY .

Si géographie_expression est un point ou un polygone, renvoie zéro. Si expression_géographie est une collection, renvoie la longueur des lignes de la collection si la collection ne contient pas de lignes, renvoie zéro.

Le paramètre facultatif use_spheroid détermine comment cette fonction mesure la distance. Si use_spheroid est FALSE , la fonction mesure la distance à la surface d'une sphère parfaite.

Le paramètre use_spheroid ne prend actuellement en charge que la valeur FALSE . La valeur par défaut de use_spheroid est FALSE .

Type de retour

ST_MAKELINE

La description

Crée une GEOGRAPHIE avec une seule chaîne de lignes en concaténant les sommets de point ou de ligne de chacun des GEOGRAPHY d'entrée dans l'ordre dans lequel ils sont donnés.

ST_MAKELINE se décline en deux variantes. Pour la première variante, l'entrée doit être deux GEOGRAPHY s. Pour la seconde, l'entrée doit être un ARRAY de type GEOGRAPHY . Dans l'une ou l'autre variante, chaque entrée GEOGRAPHIE doit être constituée de l'une des valeurs suivantes :

Pour la première variante de ST_MAKELINE , si l'une des entrées GEOGRAPHY est NULL , ST_MAKELINE renvoie NULL . Pour la deuxième variante, si l'entrée ARRAY ou tout élément de l'entrée ARRAY est NULL , ST_MAKELINE renvoie NULL .

Contraintes

Chaque bord doit couvrir strictement moins de 180 degrés.

REMARQUE : Le processus d'accrochage de BigQuery peut ignorer les bords suffisamment courts et accrocher les deux points de terminaison ensemble. Par exemple, si deux GEOGRAPHIE en entrée contiennent chacune un point et que les deux points sont séparés par une distance inférieure au rayon d'accrochage, les points seront accrochés ensemble. Dans un tel cas, le résultat sera une GÉOGRAPHIE avec exactement un point.

Type de retour

ST_MAKEPOLYGONE

La description

Creates a GEOGRAPHY containing a single polygon from linestring inputs, where each input linestring is used to construct a polygon ring.

ST_MAKEPOLYGON comes in two variants. For the first variant, the input linestring is provided by a single GEOGRAPHY containing exactly one linestring. For the second variant, the input consists of a single GEOGRAPHY and an array of GEOGRAPHY s, each containing exactly one linestring. The first GEOGRAPHY in either variant is used to construct the polygon shell. Additional GEOGRAPHY s provided in the input ARRAY specify a polygon hole. For every input GEOGRAPHY containing exactly one linestring, the following must be true:

  • The linestring must consist of at least three distinct vertices.
  • The linestring must be closed: that is, the first and last vertex have to be the same. If the first and last vertex differ, the function constructs a final edge from the first vertex to the last.

For the first variant of ST_MAKEPOLYGON , if either input GEOGRAPHY is NULL , ST_MAKEPOLYGON returns NULL . For the second variant, if input ARRAY or any element in the ARRAY is NULL , ST_MAKEPOLYGON returns NULL .

NOTE: ST_MAKEPOLYGON accepts an empty GEOGRAPHY as input. ST_MAKEPOLYGON interprets an empty GEOGRAPHY as having an empty linestring, which will create a full loop: that is, a polygon that covers the entire Earth.

Constraints

Together, the input rings must form a valid polygon:

  • The polygon shell must cover each of the polygon holes.
  • There can be only one polygon shell (which has to be the first input ring). This implies that polygon holes cannot be nested.
  • Polygon rings may only intersect in a vertex on the boundary of both rings.

Every edge must span strictly less than 180 degrees.

Each polygon ring divides the sphere into two regions. The first input linesting to ST_MAKEPOLYGON forms the polygon shell, and the interior is chosen to be the smaller of the two regions. Each subsequent input linestring specifies a polygon hole, so the interior of the polygon is already well-defined. In order to define a polygon shell such that the interior of the polygon is the larger of the two regions, see ST_MAKEPOLYGONORIENTED .

NOTE: BigQuery's snapping process may discard sufficiently short edges and snap the two endpoints together. Hence, when vertices are snapped together, it is possible that a polygon hole that is sufficiently small may disappear, or the output GEOGRAPHY may contain only a line or a point.

Return type

ST_MAKEPOLYGONORIENTED

La description

Like ST_MAKEPOLYGON , but the vertex ordering of each input linestring determines the orientation of each polygon ring. The orientation of a polygon ring defines the interior of the polygon as follows: if someone walks along the boundary of the polygon in the order of the input vertices, the interior of the polygon is on the left. This applies for each polygon ring provided.

This variant of the polygon constructor is more flexible since ST_MAKEPOLYGONORIENTED can construct a polygon such that the interior is on either side of the polygon ring. However, proper orientation of polygon rings is critical in order to construct the desired polygon.

If the input ARRAY or any element in the ARRAY is NULL , ST_MAKEPOLYGONORIENTED returns NULL .

NOTE: The input argument for ST_MAKEPOLYGONORIENTED may contain an empty GEOGRAPHY . ST_MAKEPOLYGONORIENTED interprets an empty GEOGRAPHY as having an empty linestring, which will create a full loop: that is, a polygon that covers the entire Earth.

Constraints

Together, the input rings must form a valid polygon:

  • The polygon shell must cover each of the polygon holes.
  • There must be only one polygon shell, which must to be the first input ring. This implies that polygon holes cannot be nested.
  • Polygon rings may only intersect in a vertex on the boundary of both rings.

Every edge must span strictly less than 180 degrees.

ST_MAKEPOLYGONORIENTED relies on the ordering of the input vertices of each linestring to determine the orientation of the polygon. This applies to the polygon shell and any polygon holes. ST_MAKEPOLYGONORIENTED expects all polygon holes to have the opposite orientation of the shell. See ST_MAKEPOLYGON for an alternate polygon constructor, and other constraints on building a valid polygon.

NOTE: Due to BigQuery's snapping process, edges with a sufficiently short length will be discarded and the two endpoints will be snapped to a single point. Therefore, it is possible that vertices in a linestring may be snapped together such that one or more edge disappears. Hence, it is possible that a polygon hole that is sufficiently small may disappear, or the resulting GEOGRAPHY may contain only a line or a point.

Return type

ST_MAXDISTANCE

Returns the longest distance in meters between two non-empty GEOGRAPHY s that is, the distance between two vertices where the first vertex is in the first GEOGRAPHY , and the second vertex is in the second GEOGRAPHY . If geography_1 and geography_2 are the same GEOGRAPHY , the function returns the distance between the two most distant vertices in that GEOGRAPHY .

If either of the input GEOGRAPHY s is empty, ST_MAXDISTANCE returns NULL .

The optional use_spheroid parameter determines how this function measures distance. If use_spheroid is FALSE , the function measures distance on the surface of a perfect sphere.

The use_spheroid parameter currently only supports the value FALSE . The default value of use_spheroid is FALSE .

Return type

ST_NPOINTS

La description

ST_NUMPOINTS

La description

Returns the number of vertices in the input GEOGRAPHY . This includes the number of points, the number of linestring vertices, and the number of polygon vertices.

NOTE: The first and last vertex of a polygon ring are counted as distinct vertices.

Return type

ST_PERIMETER

La description

Returns the length in meters of the boundary of the polygons in the input GEOGRAPHY .

If geography_expression is a point or a line, returns zero. If geography_expression is a collection, returns the perimeter of the polygons in the collection if the collection does not contain polygons, returns zero.

The optional use_spheroid parameter determines how this function measures distance. If use_spheroid is FALSE , the function measures distance on the surface of a perfect sphere.

The use_spheroid parameter currently only supports the value FALSE . The default value of use_spheroid is FALSE .

Return type

ST_POINTN

La description

Returns the Nth point of a linestring geography as a point geography, where N is the index. The index is 1-based. Negative values are counted backwards from the end of the linestring, so that -1 is the last point. Returns an error if the input is not a linestring, if the input is empty, or if there is no vertex at the given index. Use the SAFE prefix to obtain NULL for invalid input instead of an error.

Return Type

The following example uses ST_POINTN , ST_STARTPOINT and ST_ENDPOINT to extract points from a linestring.

ST_SIMPLIFY

La description

Returns a simplified version of geography , the given input GEOGRAPHY . The input GEOGRAPHY is simplified by replacing nearly straight chains of short edges with a single long edge. The input geography will not change by more than the tolerance specified by tolerance_meters . Thus, simplified edges are guaranteed to pass within tolerance_meters of the original positions of all vertices that were removed from that edge. The given tolerance_meters is in meters on the surface of the Earth.

Note that ST_SIMPLIFY preserves topological relationships, which means that no new crossing edges will be created and the output will be valid. For a large enough tolerance, adjacent shapes may collapse into a single object, or a shape could be simplified to a shape with a smaller dimension.

Constraints

For ST_SIMPLIFY to have any effect, tolerance_meters must be non-zero.

ST_SIMPLIFY returns an error if the tolerance specified by tolerance_meters is one of the following:

  • A negative tolerance.
  • Greater than

Return type

The following example shows how ST_SIMPLIFY simplifies the input line GEOGRAPHY by removing intermediate vertices.

The following example illustrates how the result of ST_SIMPLIFY can have a lower dimension than the original shape.

ST_SNAPTOGRID

La description

Returns the input GEOGRAPHY , where each vertex has been snapped to a longitude/latitude grid. The grid size is determined by the grid_size parameter which is given in degrees.

Constraints

Arbitrary grid sizes are not supported. The grid_size parameter is rounded so that it is of the form (10^n), where (-10 < n < 0).

Return type

ST_STARTPOINT

La description

Returns the first point of a linestring geography as a point geography. Returns an error if the input is not a linestring or if the input is empty. Use the SAFE prefix to obtain NULL for invalid input instead of an error.

Return Type

ST_TOUCHES

La description

Returns TRUE provided the following two conditions are satisfied:

  1. geography_1 intersects geography_2 .
  2. The interior of geography_1 and the interior of geography_2 are disjoint.

Return type

ST_UNION

La description

Returns a GEOGRAPHY that represents the point set union of all input GEOGRAPHY s.

ST_UNION comes in two variants. For the first variant, input must be two GEOGRAPHY s. For the second, the input is an ARRAY of type GEOGRAPHY .

For the first variant of ST_UNION , if an input GEOGRAPHY is NULL , ST_UNION returns NULL . For the second variant, if the input ARRAY value is NULL , ST_UNION returns NULL . For a non- NULL input ARRAY , the union is computed and NULL elements are ignored so that they do not affect the output.

See ST_UNION_AGG for the aggregate version of ST_UNION .

Return type

ST_UNION_AGG

La description

Returns a GEOGRAPHY that represents the point set union of all input GEOGRAPHY s.

ST_UNION_AGG ignores NULL input GEOGRAPHY values.

See ST_UNION for the non-aggregate version of ST_UNION_AGG .

Return type

ST_WITHIN

La description

Returns TRUE if no point of geography_1 is outside of geography_2 and the interiors of geography_1 and geography_2 intersect.

Given two geographies a and b , ST_WITHIN(a, b) returns the same result as ST_CONTAINS (b, a) . Note the opposite order of arguments.

Return type

La description

Returns the longitude in degrees of the single-point input GEOGRAPHY .

For any input GEOGRAPHY that is not a single point, including an empty GEOGRAPHY , ST_X returns an error. Use the SAFE. prefix to obtain NULL .

Return type

The following example uses ST_X and ST_Y to extract coordinates from single-point geographies.

La description

Returns the latitude in degrees of the single-point input GEOGRAPHY .

For any input GEOGRAPHY that is not a single point, including an empty GEOGRAPHY , ST_Y returns an error. Use the SAFE. prefix to return NULL instead.

Return type

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.


GeographicLib

Would it be possible to calculate the intersection point between two geodesic
lines using GeographicLib?

I've been reading the documentation but I haven't been able to find anything
regarding this functionality.

Thanks in advance,
Gonzalo

The code below is a simple solution to the intersection problem
using the gnomonic projection. In this projection geodesics are
nearly straight and they are exactly straight if they go
through the center of projection. So the intersection of two
geodesics can be found as follows: Guess an intersection point.
Project the two line segments into gnomonic, compute their
intersection in this projection, use this intersection point as
the new center, and repeat.

The attached code implements this (without any attempt to figure
out a termination condition). Here's an example of its
operation. Note that the 4 points must be in the same
hemisphere centered at the intersection point for the gnomonic
projection to be defined.

Line A: Istanbul - Washington
Line B: Reyjkavik - Accra

g++ -I/usr/local -L/usr/local -Wl,"-rpath=/usr/local/lib"
-lGeographic -o intersect intersect.cpp

echo 42 29 39 -77 64 -22 6 0 | ./intersect

Initial guess 37.75 -17.5
Increment 16.97176336894064 2.933476949591608
Increment -0.004733759685677796 0.002667305917045226
Increment -3.072813115068129e-10 1.835989138498917e-10
Increment 1.4210854715202e-14 -5.329070518200751e-15
Increment 0 0
Increment 0 0
Increment 0 0
Increment 0 0
Increment 0 0
Increment 0 0
Final result 54.7170296089477 -14.56385574430775
Azimuths on line A -84.14506440848534 -84.14506440848535
Azimuths on line B 160.9174944697586 160.9174944697586

Thank you very much for your fast response. I’ve compiled your sample program
and it works OK.

The problem is that my knowledge regarding geographical calculations and
projections is quite limited, so it’s going to take me some time to understand
the code.

My goal is to check if I can implement by myself other calculations like for
example: distance between a location and a geodesic line or check if three
locations are aligned. I’ll get to you with my conclusions.

For more information on how to do these problems see Sections 11
and 13 of

C. F. F. Karney,
Geodesics on an ellipsoid of revolution,
Feb. 2011, http://arxiv.org/abs/1102.1215

The code below is a simple solution to the interception problem
using the gnomonic projection.

The problem is as follows:

A plane is traveling from A1 to A2. A missile battery is
located at B1. Find the point B2 on the path of the plane, such
that the distance from B1 to B2 is minimum.

The solution is similar to the intersection problem:

guess a position B2 make this the center of a gnomonic
projection map A1, A2, B1 to this projection solve the planar
interception problem to obtained an updated position B2 repeat.
The final azimuths printed allow you to verify that the
interception angle is 90 deg.

A1 = Istanbul, A2 = Washington, B1 = Reyjkavik

g++ -I/usr/local -L/usr/local -Wl,"-rpath=/usr/local/lib"
-lGeographic -o intercept intercept.cpp

echo 42 29 39 -77 64 -22 | ./intercept

Initial guess 40.5 -24
Increment 14.43198468492627 2.186112681554786
Increment -0.003453185661449254 -0.1234026147103826
Increment -2.147899635929207e-09 -1.132893178379391e-06
Increment -1.4210854715202e-14 3.552713678800501e-15
Increment 7.105427357601002e-15 -3.552713678800501e-15
Increment -7.105427357601002e-15 0
Increment 1.4210854715202e-14 7.105427357601002e-15
Increment -1.4210854715202e-14 0
Increment 7.105427357601002e-15 -7.105427357601002e-15
Increment -7.105427357601002e-15 0
Final result 54.92853149711691 -21.93729106604878
Azimuth to A1 89.82530404926784
Azimuth to A2 -90.17469595073216
Azimuth to B1 -0.1746959507321521

It a is very useful tool, but which is the way to perform intersection of two geodesics in a similar manner to FAAs Compsys?

I'm not sure what you're asking for here. If you want a slick
GUI such as Compsys offers, then I can't help.

Ok, Compsys is an achievement of many people, but your achievement is also remarkable by alone person.

I do not understand the problem, that is why i can not do the code or follow the instructions you gave.

My question is to intersect two geodesic path, which is the first step? I suppose to calculate first the two path then transform into gnomonic projection and finally calculate the intersection point. It is that correct?

The algorithm is described in section 8 of "Algorithms for geodesics". I hope this provides you with the information you need.

The solution for calculating the intersection always returns the nearest intersection point without taking directionality into account. But what if you need the antipodal intersection point?
Example: plane A travels in a straight line from N52 E15 with an initial bearing of 80 degrees plane B travels in a straight line from N51 E15 with an initial bearing of 110 degrees. Where do they collide?
The solution above returns N51.41228, E10.46628, but that would only be true when the planes traveled in the opposite directions. Instead, it should be something like S51.4117, W169.9028 (approximately determined visually)

For each plane, pick two points (1000km apart, let's say) on its path
which straddle the intended intersection point (visually determined as
you say). (These points can be computed by solving the direct geodesic
problem with distances of around 20000km.) Then run the algorithm with
these points.

So the answer is S51.63673 W168.33512

Thank you very much!
I've incorporated it on this page: http://www.javawa.nl/coordcalc_en.html
It's a tool for projecting points, calculate distances and intersections etc.
(BTW: the coordinates in my example weren't correct, because I used a bearing of 100 degrees instead of 110)

On the 2nd question (about the distance from a point to a geodesic), using the 2nd provided source file intercept.cpp, i downloaded the last version of the library and installed it in std place (/usr/local, w.o. errors, tests succeeded too)

/usr/local/lib: ldconfig -p | grep -i geographic
libGeographic.so.19 (libc6,x86-64) => /usr/local/lib/libGeographic.so.19
libGeographic.so (libc6,x86-64) => /usr/local/lib/libGeographic.so
/usr/local/lib:

$ g++ intercept.cpp
/tmp/ccQGg0bv.o: In function main': intercept.cpp:(.text+0xbe): undefined reference to GeographicLib::Geodesic::Geodesic(double, double)'
intercept.cpp:(.text+0xd7): undefined reference to GeographicLib::Gnomonic::Gnomonic(GeographicLib::Geodesic const&)' /tmp/ccQGg0bv.o: In function GeographicLib::Geodesic::Inverse(double, double, double, double, double&, double&) const':
intercept.cpp:(.text.ZNK13GeographicLib8Geodesic7InverseEddddRdS1 [ZNK13GeographicLib8Geodesic7InverseEddddRdS1] +0x8f): undefined reference to GeographicLib::Geodesic::GenInverse(double, double, double, double, unsigned int, double&, double&, double&, double&, double&, double&, double&) const' /tmp/ccQGg0bv.o: In function GeographicLib::Gnomonic::Forward(double, double, double, double, double&, double&) const':
intercept.cpp:(.text.ZNK13GeographicLib8Gnomonic7ForwardEddddRdS1 [ZNK13GeographicLib8Gnomonic7ForwardEddddRdS1] +0x77): undefined reference to GeographicLib::Gnomonic::Forward(double, double, double, double, double&, double&, double&, double&) const' /tmp/ccQGg0bv.o: In function GeographicLib::Gnomonic::Reverse(double, double, double, double, double&, double&) const':
intercept.cpp:(.text.ZNK13GeographicLib8Gnomonic7ReverseEddddRdS1 [ZNK13GeographicLib8Gnomonic7ReverseEddddRdS1] +0x77): undefined reference to GeographicLib::Gnomonic::Reverse(double, double, double, double, double&, double&, double&, double&) const' collect2: error: ld returned 1 exit status

I am trying to see if i can get the c++ solution to work, if it's not too much trouble.


The tool seems to be just calculating the Euclidean distance between the two points (the square root of the sum of the squared differences between the coordinates). This doesn't make any sense for latitudes and longitudes, which are not coordinates in a Cartesian coordinate system. Not only is this number not a meaningful distance, but it no longer contains the information required to reconstruct a distance from it, so you won't be able to calculate anything meaningful from it you need to go back to the latitudes and longitudes themselves.

To calculate distances between points given by latitudes and longitudes precisely, you need to know which geoid was used as a reference in specifying them. But since you only want to get within 95% of the answer, you can safely assume that the Earth is a sphere.

There are two possible meanings for "the distance between two points" on a sphere. You can take the Euclidean distance between the two points (the actual points, not their latitude/longitude coordinates like your tool does), or you can take distance along the shortest curve along the surface of the Earth. Again, if you only want to get to within 95% of the answer and the distances are as small as in your example, the difference is negligble, so you can take the Euclidean distance, which is easier to calculate.

To get the Euclidean distance, you can first calculate the Cartesian coordinates of the points from their latitudes and longitudes. Denoting the latitude by $ heta$, the longitude by $phi$ and the Earth's radius by $R$ (with $Rapprox 6371 mathrm$), these are given by

$vec=left(eginxyzend ight) = left(egin Rcos hetacosphi Rcos hetasinphi Rsin heta end ight). $

Then you get the distance between them using

Since you seem to have small distances and aren't interested in precision, you can simplify this by expanding the trigonometric functions around one of the points, or, for greater precision, around the midpoint $ heta=( heta_1+ heta_2)/2$, $phi=(phi_1+phi_2)/2$:

$vec-vecapprox Rleft(egin sin hetacosphi( heta_2- heta_1)-cos hetasinphi(phi_2-phi_1) sin hetasinphi( heta_2- heta_1)+cos hetacosphi(phi_2-phi_1) cos heta( heta_2- heta_1) end ight), $


Computational geometry.

  • Intervals. An interval is defined by two Comparable objects of the same type. Program Interval.java represents a 1D interval.
  • Intervals. A 2D interval is defined by two 1D intervals, possibly of different types. (Maybe we should make them the same type for simplicity since that's all we need.) Program Interval2D.java represents a 2D interval.
  • Polygons. Polygons are a useful mathematical abstraction for representing the shapes of real-world objects (letters for optical character recognition, obstacles to be avoided by a robot, US congressional district, pieces of an airfoil). Program Polygon.java is a data type for closed polygons. A polygon is a sequence of points p0 through pN, where we assume the first point is equal to the last point, i.e., the polygon is closed. le perimeter is the sum of the Euclidean distances of the N line segments. le signed area of a non self-intersecting polygon is given by

The polygon is counterclockwise if the area is positive. We assume the points are indexed 0 through N-1 and that point N equals point 0. The centre de gravité (or center of mass) of a non self-intersecting polygon is given by the point (x, y) where x and y are defined by

To draw a shaded polygon on screen, we need to know whether each pixel (i, j) is inside or outside the polygon. Jordan curve theorem implies any polygon partitions plane into a finite inside region and an infinite outside region. Solution (ray crossing method): draw a ray from (i, j) down and count the number of times it crosses the polygon (even = outside, odd = inside). Intution: think of polygon as a fence and count # times you jump over the fence.


Distance & travel time in Excel – Google Maps API

Let’s say your Google Maps API key is in a cell named gmaps.key

This API is really easy to use compared to Bing maps (as we need to make just one call).

https://maps.googleapis.com/maps/api/distancematrix/ xml ?origins= $1 &destinations= $2 &mode= $3 &key=gmaps.key

For example, let’s lookup the travel time and distance between Microsoft & APPLE offices.

The response is XML (if you want json, then replace xml with json) like below:

<?xml version=”𔄣.0″” encoding=””UTF-8″”?>
<DistanceMatrixResponse>
<status>OK</status>
<origin_address>Apple Campus, Cupertino, CA 95014, USA</origin_address>
<destination_address>Redmond, WA, USA</destination_address>
<row>
<element>
<status>OK</status>
<duration>
<value> 47736 </value>
<text> 13 hours 16 mins </text>
</duration>
<distance>
<value> 1379709 </value>
<text> 1,380 km </text>
</distance>
</element>
</row>
</DistanceMatrixResponse>

We can FILTERXML this response to extract the important bits like this:


2. Data Acquisition

In photogrammetry data acquisition is define as the process of obtaining the reliable information about the object of interest. This is achieved without physical being in contact with the objects.

The remotely acquired image can be grouped into four:

Geometric Information: It involves in the spatial position and the shape of objects.

Physical Information: It refers to the electromagnetic radiation properties of objects.

Semantic Information: It is refer to the meaning of a required image.

Temporal Information: Recorded images with different date shows the change in the object.


2.1 Geometric Characteristics of Aerial Photographs:

Aerial photographs are classified into two categories: vertical or oblique. Vertical photographs have the camera axis directed as vertically as possible. Most of time vertical photography use single lens camera to acquire remotely sensed image. It is very hard to obtain a true vertical image due to the angular rotation or tilts. This angular rotation or tilts are due to the angular attitude of the aircraft at the instant of exposure. This unavoidable tilts which results in 1 to 3 degree inclination of camera optical axis results in the capturing of titled photographs.

If there is intention of degree of inclination of camera optical axis then it is called Oblique photographs. High oblique photographs contains the image of horizon and Low Oblique photographs exclude it.

2.2 Geometric Characteristics of a Vertical Photographs:

Photographs taken by the camera are the perspective view. Image we see is the 3D view and camera convert 3D look of the image to the 2D. Our brain process the depth and other features of the photographs by using the 3D concept. Camera uses powerful concept of perspective to transfer 3D image to 2D.

Most vertical image acquires distortion in image due to image motion and image displacement due to topography and the effect of parallax. The geometric center of the air photo or the principal point does not have image displacement. The perpendicular from the principal point to the ground is called the Nadir or the Plumb point. Towards the margins of the air photo, the image displacement increases due to effect of the parallax.

The word parallax is derived from the Greek term parallaxis,which means alteration. The object we are observing at any given distance is dependent on the viewpoint or the position of the viewer. Perspective shift occurs when a close object is observed from various viewpoints with respective to the distant background.

Parallax can be describe with the help of the geometry. On the above figure object UNE and Object B are two viewpoints observing the object O. is the baseline distance between two viewpoints, and then unknown variable R can be calculated. You can use trigonometry to calculate the unknown values.

In a simple way to explain the parallax is the way our eyes operate. We are always using parallax but do not realize because our brain process things very fast. Hold your arm straight in front of you at eye level and then point your forefinger up. After that alternatively blink each of your eyes and you will notice the forefingers that is arm length appears to move with the respect to the background object. This is the parallax effect.

2.3 Flight Characteristics:

Most of Photographs taken by the frame camera are along flight lines. The line on the ground which is just under the camera lens during photo capturing is called the nadir line. All the photographs taken with the degree of endlap. Endlap is the repeat of the some portion of the successive photographs. This not only ensure that end part of photographs is covered but also it is essential for the stereoscopic coverage.

Aerial photographs are generally taken North-South or East-West direction along flightlines. Flightlines are the path taken by the aircraft to cover the area of interest. This are imaginary lines drawn on the paper by the specialist so whole region is covered for the photographs and also there is enough succession of overlapping. The photos that overlaps within flightlines are called avant overlap and between flightlines are called sidelap.(image source: www.nrcan.gc.ca)

The area that is overlapped for the avant should be between 60-70 percentage. It is used for the stereoscopic view and complete coverage of the area of interest.

The area that is overlapped for the sidelap should be between 25-40 percentage. It is used to ensure that no area is left unphotographhed.

2.4 Coverage Errors: There are two errors that can lead for unsuccessful capturing of photographs: Drift and Crab. Drift is the lateral shift of the aircraft from the flight lines that may be caused by the blowing wind or the pilot error. So it is said that it is good practice to capture a photographs on a sunny day with no wind. Crab occurs when the aircraft is not oriented with flightline.


GIS Resources

The committee formally known as the GIS Committee is now GSADD (Geographic, Spatial and Demographic Data) Workgroup. Materials on this page have been developed by members of this committee.

Address Validation Reference Data - July 2015

Street address and county location at diagnosis are characteristically critically important elements for GIS mapping and analysis. Correct and complete geocoding to coordinate point locations (e.g., latitude/longitude) and standard data analysis areas (e.g., census tract and block) are a function of valid input in these standard NAACCR abstract fields.

The Wisconsin Cancer Reporting System has purchased licensing from the United States Postal Service (USPS) to access USA-wide zip code and street address Data (including County FIPS for addresses.) Using this authoritative reference data, the current validity of individual address zip codes, city/locality names, and county locations can be validated individually and in combination. These records can be used as visual job aids for abstractors as well as validation templates for automated edits in the field or at the central cancer registry.

  • Zip Code Data General Documentation
  • Zip Code Reference Files – DBF
  • Zip Code Reference Files – Single MDB
  • Zip Code Reference Files

American Community Survey Census Tract Data

The NAACCR GIS Committee has created a data table of commonly used demographic and socio-economic variables at the census tract level from the Census Bureau’s American Community Survey (ACS). Most variables are given as percentages of the population to facilitate geographic comparisons. ACS tract-level data are from 5-year periods and covers all of the U.S. and Puerto Rico. The data file downloads contain the tract data table in both SAS and MS Access format, a data dictionary, and a summary report. The SAS code library used to create the data tables is also available and includes a Word file describing the steps in the process.

Note: Updated SAS codes for ACS census tract-level data and urban/rural census tract-level data are available on the NAACCR Call for Data Website under the Certification Tab.

  • ACS Census Tract Data 2011-2015 (uses Census 2010 geographies)
  • ACS Census Tract Data 2007-2011 (uses Census 2010 geographies)
  • ACS Census Tract Data 2006-2010 (uses Census 2010 geographies)
  • ACS Census Tract Data 2005-2009 (uses Census 2000 geographies)
  • ACS Census Tract SAS Code Library

Cluster Analysis Software Review

The GIS Committee, working with a consultant, Luc Anselin, PhD of the University of Illinois at Urbana-Champaign, selected four spatial analysis software packages to be reviewed based on the following criteria: 1) they were free and/or open source, 2) they were up-to-date and under active development, 3) they came with a manual and documentation, 4) they were downloadable from the Internet, and 5) they worked within a Microsoft Windows operating system. This report, was accepted by the NAACCR Board of Directors on August 18, 2004.

NAACCR Geocoder

Due to a partnership between NAACCR, Texas A&M University, and the National Cancer Institute, NAACCR members have access to a single, uniform geocoding platform for open use by all NAACCR Full Member Registries. This system, Automated Geospatial Geocoding Interface Environment or AGGIE, system is accessible through your MyNAACCR log-in. The NAACCR AGGIE Geocoder is also integrated within the SEER DMS registry software package.

To access, first log-on to MyNAACCR.

There are resources on this page to assist with geocoding. For personal assistance or technical issues, please contact Dr. Recinda Sherman at .

Geocoding Best Practices Guide

This Guide was authored by Daniel W. Goldberg of the University of Southern California (USC) GIS Research Laboratory, with expert input and guidance from members of the NAACCR GIS Committee. The Guide serves to centralize much of the available research and practice scholarship on these topics to provide a single, comprehensive perspective on all aspects of geocoding. Geocoding, for example, may involve the process of assigning latitude and longitude coordinates to street addresses.

The Guide is designed for a variety of users, including cancer registry staff who design geocoding systems, those who geocode cancer data, and researchers who use these data for public health research and practice. Dr. John Wilson, Director of the USC GIS Research Laboratory, notes that the Best Practices Guide “will serve as a rich reference manual for anyone who wants to inject more science and less art (uncertainty) into their geocoding tasks.

NAACCR Geocoder Data Dictionary

This document defines the data items generated the by the NAACCR Geocoder during the batch database geocoding process.

NAACCR Geocoder Tutorial

In addition to the materials below, NAACCR is available to individually assist registries with issues related to geocoding and use of the NAACCR Geocoder.


2 A View System for Providing Environmental Information Prior to Work

In this section, we develop a view system to provide environmental information to teleoperators before work on the basis of human spatial cognition. First, we explain human spatial cognition according to psychological knowledge. Next, we assume the effects of acquiring environmental information for teleoperation. Finally, we develop a view system based on human spatial cognition and presume the effects of this view system.

2.1 Human Spatial Cognition

Humans store mental representations known as cognitive maps (Edward, 1948). These maps can be built by acquiring knowledge from survey and route perspectives (Golledge & Stimson, 1997). Humans acquire survey knowledge from external viewpoints, whereas route knowledge can be acquired from internal or personal viewpoints. Thus, survey knowledge is usually described in absolute coordinates such as east and west, whereas route knowledge is described in terms of relative coordinates such as front and back. Moreover, maps are usually used to express survey knowledge, whereas pictures taken from a human viewpoint are usually used to express route knowledge. For example, the maps illustrated in Figure 3(a) are used for the survey knowledge and described in terms such as south and north, whereas the pictures shown in Figure 3(b) come from the route knowledge and are described in terms of right and left (Figures 3(a) and (b) represent the campus of Waseda University).