Modèle & adaptateur
Aucune carte ici : ce que les helpers « geo » tirent d'une charge utile schema.org, en clair.
Un point, quelle que soit la forme de la source
L'adaptateur lit les propriétés, jamais « @type » — un objet qui porte une latitude et une longitude est un point, quel que soit son nom.
Place avec geo
{
"@type": "Place",
"name": "Notre-Dame de Paris",
"geo": {
"@type": "GeoCoordinates",
"latitude": 48.852968,
"longitude": 2.349902
}
}48.852968, 2.349902
48°51'10.7"N, 2°20'59.6"E
latitude 48.852968 · longitude 2.349902
Warehouse à plat
{
"@type": "Warehouse",
"name": "Entrepôt de Rungis",
"latitude": 48.7489,
"longitude": 2.3606
}48.748900, 2.360600
48°44'56.0"N, 2°21'38.2"E
latitude 48.7489 · longitude 2.3606
GeoCoordinates, valeurs en chaînes
{
"@type": "GeoCoordinates",
"latitude": "44.837789",
"longitude": "-0.579180",
"elevation": 20
}44.837789, -0.579180
44°50'16.0"N, 0°34'45.0"W
latitude 44.837789 · longitude -0.57918 · altitude 20 m
Latitude hors bornes
{
"@type": "Place",
"name": "Coordonnée impossible",
"latitude": 148.5,
"longitude": 2.35
}null
Rendu « null » plutôt qu'une exception : une carte à laquelle il manque un point reste une carte.
Quand une Place dit deux choses
Le même objet porte « geo » et ses propres latitude/longitude, avec des valeurs différentes. « prefer » décide laquelle gagne.
Place portant les deux
{
"@type": "Place",
"name": "Deux sources qui divergent",
"geo": {
"latitude": 48.852968,
"longitude": 2.349902
},
"latitude": 44.837789,
"longitude": -0.57918
}Par défaut — prefer : 'geo'
48.852968, 2.349902
48°51'10.7"N, 2°20'59.6"E
latitude 48.852968 · longitude 2.349902
Forcé — prefer : 'flat'
44.837789, -0.579180
44°50'16.0"N, 0°34'45.0"W
latitude 44.837789 · longitude -0.57918
Les géométries, et l'inversion des axes
schema.org écrit « latitude longitude » en texte, GeoJSON écrit « [ longitude , latitude ] » en tableau. C'est ici, et nulle part ailleurs, que la bascule a lieu.
Polygon — l'anneau est refermé
{
"@type": "GeoShape",
"polygon": "48.845 2.32 48.865 2.32 48.865 2.37 48.845 2.37"
}{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
2.32,
48.845
],
[
2.32,
48.865
],
[
2.37,
48.865
],
[
2.37,
48.845
],
[
2.32,
48.845
]
]
]
},
"properties": {
"shape": "polygon"
}
}Circle — un Point plus un rayon
{
"@type": "GeoShape",
"circle": "48.8566 2.3522 1500"
}{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
2.3522,
48.8566
]
},
"properties": {
"shape": "circle",
"radius": 1500
}
}Box — deux coins, quatre côtés
{
"@type": "GeoShape",
"box": "48.80 2.25 48.90 2.42"
}{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
2.25,
48.8
],
[
2.42,
48.8
],
[
2.42,
48.9
],
[
2.25,
48.9
],
[
2.25,
48.8
]
]
]
},
"properties": {
"shape": "box"
}
}La collection GeoJSON
Ce qu'une source vectorielle consomme. Le point hors bornes est écarté plutôt que placé à zéro.
1{
2 "type": "FeatureCollection",
3 "features": [
4 {
5 "type": "Feature",
6 "geometry": {
7 "type": "Point",
8 "coordinates": [
9 2.349902,
10 48.852968
11 ]
12 },
13 "properties": {
14 "name": "Notre-Dame de Paris"
15 }
16 },
17 {
18 "type": "Feature",
19 "geometry": {
20 "type": "Point",
21 "coordinates": [
22 2.3606,
23 48.7489
24 ]
25 },
26 "properties": {
27 "name": "Entrepôt de Rungis"
28 }
29 }
30 ]
31}