Znáte GeoJSON?

Úvod

Pro ty, kteří nevědí, GeoJSON je standardní datový formát používaný k ukládání dat o poloze a geografických prvků.

Obsah

  1. Terminologie
  2. Různé typy geometrie
  3. Zdroje

GeoJSON je pouze objekt JSON. Co z nich dělá odlišný datový typ od prostého JSON, jsou jeho specifikace.

Některé databáze jako Mongo DB mají oficiální podporu pro datový typ GeoJSON. Stejně jako MongoDB identifikuje typy String a Integer, identifikuje a odlišuje GeoJSON od normálního JSON. Dodává se s podporou indexování a dotazování GeoJSON

V tomto příspěvku se budu zabývat některými základními koncepty datového typu GeoJSON.

Typický GeoJSON vypadá takto.
Nenechte se zmást, vše jsme probrali níže.

{
    "type": "Feature",
    "properties": {},
    "geometry": {
        "type": "Point",
        "coordinates": [-40.078125,70.72897946208789]
    }
}

Terminologie

Souřadnice

Jeden bod na mapě se nazývá souřadnice
Když ukazujeme na místo na mapě, ukazujeme na některé jednotky zeměpisné délky a šířky. Tyto sady jednotek ukládáme do pole zvaného souřadnice.
Pole souřadnic obsahuje dva prvky zeměpisná délka a zeměpisná šířka
POZNÁMKA:Důležité je pořadí
coordinates : [ longitude , latitude ]

Geometrie

Představte si geometrii jako struktury. Geometrie definuje, v jaké struktuře jsou souřadnice uloženy.
Existují určité předdefinované typy geometrie rozlišující malá a velká písmena, jmenovitě 'Bod', 'Line', 'Polygon' a další. Uvidíme je jednoho po druhém.

Typická geometrie vypadá níže

"geometry": {
    "type": "Point",
    "coordinates": [longitude,latitude]
}

"typ"

Každá geometrie musí mít vlastnost nazvanou "type", jejíž hodnota musí být pouze jedním z typů GeoJSON uvedených v GeoJSON RFC

Existují některé typy geometrie, které se používají k ukládání jiných typů geometrie. Jsou to „Feature“ a „FeatureCollection“, o kterých jsme diskutovali níže.

Typy geometrie

Bod

Bod je jeden bod nebo značka na mapě. Jeho geometrie obsahuje jedinou souřadnici. To lze použít k uložení jednotlivých míst, jako je obchod.


"geometry": {
        "type": "Point",
        "coordinates": [
            78.4918212890625,
            22.304343762932216
        ]
    }

MultiPoint

Jak jste uhodli podle názvu, geometrie MultiPoint se používá k uložení více bodů souřadnic v jedné geometrii. Každý prvek v poli souřadnic je sám o sobě souřadnicí. To lze použít k uložení seznamu oblíbených míst.


{
    "type": "MultiPoint",
    "coordinates": [
        [80.26951432228088,13.09223800602329],
        [80.27061939239502,13.091631907724683],
        [80.2714991569519,13.09260375427521],
        [80.27050137519836,13.093241199930675]
    ]
}

Řetězec čáry

Jsou to linie bodů. Struktura JSON je stejná jako struktura MultiPoint, ale protože se jedná o typ LinePoint, jednotlivé souřadnice jsou považovány za spojenou čáru, nikoli za body, které se kolem sebe zřetelně nacházejí.


"geometry": {
    "type": "LineString",
    "coordinates": [
        [80.2122116088867,13.113586344333864],
        [80.25959014892577,13.072121016365408],
        [80.29048919677733,13.114923819297273],
        [80.3207015991211,13.075799674224164],
        [80.33477783203125,13.112248862097216]
    ]
}

Víceřádkový řetězec

Jak název napovídá, používá se k uložení více než jednoho LineString v jedné geometrii. Každý prvek pole Coordinates je jako jediné pole LineString Coordinates.

"geometry":{"type": "MultiLineString",
"coordinates" : [
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
]}

Mnohoúhelník

Specifikace RFC definuje, že polygony jsou lineární prstence, v případě, že vás zajímá, co je to lineární prsten, tak jsem byl i já.
Řeknu to takto, polygony jsou jakýkoli uzavřený tvar , ano doslova jakýkoli tvar. Na obrázku covenu tohoto příspěvku je každé písmeno mnohoúhelník.

Pokud jste pochopili LineStrings, specifikace RFC také definuje, že polygony jsou uzavřené LineString, tj. polygon je jakýkoli uzavřený tvar. Uzavřený LineString znamená, že první a poslední souřadnice budou stejné.

To lze použít k uložení okrajů. Může to být hranice země, města, vesnice nebo hranice oblasti.


"geometry": {
    "type": "Polygon",
    "coordinates": [
        [
            [78.44238281249999,22.62415215809042],
            [77.8436279296875,22.151795575397756],
            [78.486328125,21.764601405743978],
            [79.0521240234375,22.233175265402785],
            [78.44238281249999,22.62415215809042]
        ]
    ]
}

Víceúhelník

Do této doby byste měli uhodnout, stejně jako MultiPoint a MultiLine, MultiPolygon je sbírka mnohoúhelníků. Můžete to použít k uložení informací o hranicích různých měst ve státě.

Titulní obrázek tohoto příspěvku může být příkladem MultiPolygon

Funkce a kolekce FeatureCollection

Tady přichází šťáva. Nyní jste se naučili, jak ukládat geografická data v různých strukturách, jako jsou body, čáry a mnohoúhelníky. Jak nyní ukládáte informace o těchto místech?

Správným způsobem ukládání geografických informací je použití funkcí Feature a FeatureCollection.

Feature a FeatureCollections GeoJSON jsou geometrií samy o sobě. Jsou druhem geometrie, která se používá k ukládání jiné geometrie a vlastností (informací) o této geometrii.

Typická funkce vypadá takto

{
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [-10.0,-10.0]
    },
    "properties": {
        "temperature": "4C",
        "country": "IN",
        "somepropertyName": "Some description"
    }
}

Ve výše uvedeném GeoJSON může být geometrie libovolný z typů, o kterých jsme hovořili dříve, jako je bod, čára nebo mnohoúhelník, a vlastnosti obsahují data a informace o této geometrii.

FeatureCollection

Jak název napovídá, FeatureCollection GeoJSON obsahuje kolekci funkcí.


{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [78.31054687499999,22.39071391683855]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [78.486328125,11.43695521614319]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [77.9150390625,27.176469131898898]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [75.673828125,19.766703551716976]
      }
    }
  ]
}

Zdroje

  • Secifikace RFC pro GeoJSON
    https://tools.ietf.org/html/rfc7946

  • Interaktivní ruce s GeoJSON
    https://geojson.io/

  • Nejlepší knihovna map JS
    Leaflet.js