| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571 |
- Internet Engineering Task Force (IETF) H. Butler
- Request for Comments: 7946 Hobu Inc.
- Category: Standards Track M. Daly
- ISSN: 2070-1721 Cadcorp
- A. Doyle
- S. Gillies
- Mapbox
- S. Hagen
- T. Schaub
- Planet Labs
- August 2016
- The GeoJSON Format
- Abstract
- GeoJSON is a geospatial data interchange format based on JavaScript
- Object Notation (JSON). It defines several types of JSON objects and
- the manner in which they are combined to represent data about
- geographic features, their properties, and their spatial extents.
- GeoJSON uses a geographic coordinate reference system, World Geodetic
- System 1984, and units of decimal degrees.
- Status of This Memo
- This is an Internet Standards Track document.
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 7841.
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc7946.
- Butler, et al. Standards Track [Page 1]
- RFC 7946 GeoJSON August 2016
- Copyright Notice
- Copyright (c) 2016 IETF Trust and the persons identified as the
- document authors. All rights reserved.
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
- Table of Contents
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
- 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4
- 1.2. Conventions Used in This Document . . . . . . . . . . . . 4
- 1.3. Specification of GeoJSON . . . . . . . . . . . . . . . . 4
- 1.4. Definitions . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.5. Example . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2. GeoJSON Text . . . . . . . . . . . . . . . . . . . . . . . . 6
- 3. GeoJSON Object . . . . . . . . . . . . . . . . . . . . . . . 6
- 3.1. Geometry Object . . . . . . . . . . . . . . . . . . . . . 7
- 3.1.1. Position . . . . . . . . . . . . . . . . . . . . . . 7
- 3.1.2. Point . . . . . . . . . . . . . . . . . . . . . . . . 8
- 3.1.3. MultiPoint . . . . . . . . . . . . . . . . . . . . . 8
- 3.1.4. LineString . . . . . . . . . . . . . . . . . . . . . 8
- 3.1.5. MultiLineString . . . . . . . . . . . . . . . . . . . 8
- 3.1.6. Polygon . . . . . . . . . . . . . . . . . . . . . . . 9
- 3.1.7. MultiPolygon . . . . . . . . . . . . . . . . . . . . 9
- 3.1.8. GeometryCollection . . . . . . . . . . . . . . . . . 9
- 3.1.9. Antimeridian Cutting . . . . . . . . . . . . . . . . 10
- 3.1.10. Uncertainty and Precision . . . . . . . . . . . . . . 11
- 3.2. Feature Object . . . . . . . . . . . . . . . . . . . . . 11
- 3.3. FeatureCollection Object . . . . . . . . . . . . . . . . 12
- 4. Coordinate Reference System . . . . . . . . . . . . . . . . . 12
- 5. Bounding Box . . . . . . . . . . . . . . . . . . . . . . . . 12
- 5.1. The Connecting Lines . . . . . . . . . . . . . . . . . . 14
- 5.2. The Antimeridian . . . . . . . . . . . . . . . . . . . . 14
- 5.3. The Poles . . . . . . . . . . . . . . . . . . . . . . . . 14
- 6. Extending GeoJSON . . . . . . . . . . . . . . . . . . . . . . 15
- 6.1. Foreign Members . . . . . . . . . . . . . . . . . . . . . 15
- 7. GeoJSON Types Are Not Extensible . . . . . . . . . . . . . . 16
- 7.1. Semantics of GeoJSON Members and Types Are Not Changeable 16
- 8. Versioning . . . . . . . . . . . . . . . . . . . . . . . . . 17
- Butler, et al. Standards Track [Page 2]
- RFC 7946 GeoJSON August 2016
- 9. Mapping 'geo' URIs . . . . . . . . . . . . . . . . . . . . . 17
- 10. Security Considerations . . . . . . . . . . . . . . . . . . . 18
- 11. Interoperability Considerations . . . . . . . . . . . . . . . 18
- 11.1. I-JSON . . . . . . . . . . . . . . . . . . . . . . . . . 18
- 11.2. Coordinate Precision . . . . . . . . . . . . . . . . . . 18
- 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19
- 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 20
- 13.1. Normative References . . . . . . . . . . . . . . . . . . 20
- 13.2. Informative References . . . . . . . . . . . . . . . . . 21
- Appendix A. Geometry Examples . . . . . . . . . . . . . . . . . 22
- A.1. Points . . . . . . . . . . . . . . . . . . . . . . . . . 22
- A.2. LineStrings . . . . . . . . . . . . . . . . . . . . . . . 22
- A.3. Polygons . . . . . . . . . . . . . . . . . . . . . . . . 23
- A.4. MultiPoints . . . . . . . . . . . . . . . . . . . . . . . 24
- A.5. MultiLineStrings . . . . . . . . . . . . . . . . . . . . 24
- A.6. MultiPolygons . . . . . . . . . . . . . . . . . . . . . . 25
- A.7. GeometryCollections . . . . . . . . . . . . . . . . . . . 26
- Appendix B. Changes from the Pre-IETF GeoJSON Format
- Specification . . . . . . . . . . . . . . . . . . . 26
- B.1. Normative Changes . . . . . . . . . . . . . . . . . . . . 26
- B.2. Informative Changes . . . . . . . . . . . . . . . . . . . 27
- Appendix C. GeoJSON Text Sequences . . . . . . . . . . . . . . . 27
- Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 27
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28
- 1. Introduction
- GeoJSON is a format for encoding a variety of geographic data
- structures using JavaScript Object Notation (JSON) [RFC7159]. A
- GeoJSON object may represent a region of space (a Geometry), a
- spatially bounded entity (a Feature), or a list of Features (a
- FeatureCollection). GeoJSON supports the following geometry types:
- Point, LineString, Polygon, MultiPoint, MultiLineString,
- MultiPolygon, and GeometryCollection. Features in GeoJSON contain a
- Geometry object and additional properties, and a FeatureCollection
- contains a list of Features.
- The format is concerned with geographic data in the broadest sense;
- anything with qualities that are bounded in geographical space might
- be a Feature whether or not it is a physical structure. The concepts
- in GeoJSON are not new; they are derived from preexisting open
- geographic information system standards and have been streamlined to
- better suit web application development using JSON.
- GeoJSON comprises the seven concrete geometry types defined in the
- OpenGIS Simple Features Implementation Specification for SQL [SFSQL]:
- 0-dimensional Point and MultiPoint; 1-dimensional curve LineString
- and MultiLineString; 2-dimensional surface Polygon and MultiPolygon;
- Butler, et al. Standards Track [Page 3]
- RFC 7946 GeoJSON August 2016
- and the heterogeneous GeometryCollection. GeoJSON representations of
- instances of these geometry types are analogous to the well-known
- binary (WKB) and well-known text (WKT) representations described in
- that same specification.
- GeoJSON also comprises the types Feature and FeatureCollection.
- Feature objects in GeoJSON contain a Geometry object with one of the
- above geometry types and additional members. A FeatureCollection
- object contains an array of Feature objects. This structure is
- analogous to that of the Web Feature Service (WFS) response to
- GetFeatures requests specified in [WFSv1] or to a Keyhole Markup
- Language (KML) Folder of Placemarks [KMLv2.2]. Some implementations
- of the WFS specification also provide GeoJSON-formatted responses to
- GetFeature requests, but there is no particular service model or
- Feature type ontology implied in the GeoJSON format specification.
- Since its initial publication in 2008 [GJ2008], the GeoJSON format
- specification has steadily grown in popularity. It is widely used in
- JavaScript web-mapping libraries, JSON-based document databases, and
- web APIs.
- 1.1. Requirements Language
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- [RFC2119].
- 1.2. Conventions Used in This Document
- The ordering of the members of any JSON object defined in this
- document MUST be considered irrelevant, as specified by [RFC7159].
- Some examples use the combination of a JavaScript single-line comment
- (//) followed by an ellipsis (...) as placeholder notation for
- content deemed irrelevant by the authors. These placeholders must of
- course be deleted or otherwise replaced, before attempting to
- validate the corresponding JSON code example.
- Whitespace is used in the examples inside this document to help
- illustrate the data structures, but it is not required. Unquoted
- whitespace is not significant in JSON.
- 1.3. Specification of GeoJSON
- This document supersedes the original GeoJSON format specification
- [GJ2008].
- Butler, et al. Standards Track [Page 4]
- RFC 7946 GeoJSON August 2016
- 1.4. Definitions
- o JavaScript Object Notation (JSON), and the terms object, member,
- name, value, array, number, true, false, and null, are to be
- interpreted as defined in [RFC7159].
- o Inside this document, the term "geometry type" refers to seven
- case-sensitive strings: "Point", "MultiPoint", "LineString",
- "MultiLineString", "Polygon", "MultiPolygon", and
- "GeometryCollection".
- o As another shorthand notation, the term "GeoJSON types" refers to
- nine case-sensitive strings: "Feature", "FeatureCollection", and
- the geometry types listed above.
- o The word "Collection" in "FeatureCollection" and
- "GeometryCollection" does not have any significance for the
- semantics of array members. The "features" and "geometries"
- members, respectively, of these objects are standard ordered JSON
- arrays, not unordered sets.
- 1.5. Example
- A GeoJSON FeatureCollection:
- {
- "type": "FeatureCollection",
- "features": [{
- "type": "Feature",
- "geometry": {
- "type": "Point",
- "coordinates": [102.0, 0.5]
- },
- "properties": {
- "prop0": "value0"
- }
- }, {
- "type": "Feature",
- "geometry": {
- "type": "LineString",
- "coordinates": [
- [102.0, 0.0],
- [103.0, 1.0],
- [104.0, 0.0],
- [105.0, 1.0]
- ]
- },
- "properties": {
- Butler, et al. Standards Track [Page 5]
- RFC 7946 GeoJSON August 2016
- "prop0": "value0",
- "prop1": 0.0
- }
- }, {
- "type": "Feature",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [100.0, 0.0],
- [101.0, 0.0],
- [101.0, 1.0],
- [100.0, 1.0],
- [100.0, 0.0]
- ]
- ]
- },
- "properties": {
- "prop0": "value0",
- "prop1": {
- "this": "that"
- }
- }
- }]
- }
- 2. GeoJSON Text
- A GeoJSON text is a JSON text and consists of a single GeoJSON
- object.
- 3. GeoJSON Object
- A GeoJSON object represents a Geometry, Feature, or collection of
- Features.
- o A GeoJSON object is a JSON object.
- o A GeoJSON object has a member with the name "type". The value of
- the member MUST be one of the GeoJSON types.
- o A GeoJSON object MAY have a "bbox" member, the value of which MUST
- be a bounding box array (see Section 5).
- o A GeoJSON object MAY have other members (see Section 6).
- Butler, et al. Standards Track [Page 6]
- RFC 7946 GeoJSON August 2016
- 3.1. Geometry Object
- A Geometry object represents points, curves, and surfaces in
- coordinate space. Every Geometry object is a GeoJSON object no
- matter where it occurs in a GeoJSON text.
- o The value of a Geometry object's "type" member MUST be one of the
- seven geometry types (see Section 1.4).
- o A GeoJSON Geometry object of any type other than
- "GeometryCollection" has a member with the name "coordinates".
- The value of the "coordinates" member is an array. The structure
- of the elements in this array is determined by the type of
- geometry. GeoJSON processors MAY interpret Geometry objects with
- empty "coordinates" arrays as null objects.
- 3.1.1. Position
- A position is the fundamental geometry construct. The "coordinates"
- member of a Geometry object is composed of either:
- o one position in the case of a Point geometry,
- o an array of positions in the case of a LineString or MultiPoint
- geometry,
- o an array of LineString or linear ring (see Section 3.1.6)
- coordinates in the case of a Polygon or MultiLineString geometry,
- or
- o an array of Polygon coordinates in the case of a MultiPolygon
- geometry.
- A position is an array of numbers. There MUST be two or more
- elements. The first two elements are longitude and latitude, or
- easting and northing, precisely in that order and using decimal
- numbers. Altitude or elevation MAY be included as an optional third
- element.
- Implementations SHOULD NOT extend positions beyond three elements
- because the semantics of extra elements are unspecified and
- ambiguous. Historically, some implementations have used a fourth
- element to carry a linear referencing measure (sometimes denoted as
- "M") or a numerical timestamp, but in most situations a parser will
- not be able to properly interpret these values. The interpretation
- and meaning of additional elements is beyond the scope of this
- specification, and additional elements MAY be ignored by parsers.
- Butler, et al. Standards Track [Page 7]
- RFC 7946 GeoJSON August 2016
- A line between two positions is a straight Cartesian line, the
- shortest line between those two points in the coordinate reference
- system (see Section 4).
- In other words, every point on a line that does not cross the
- antimeridian between a point (lon0, lat0) and (lon1, lat1) can be
- calculated as
- F(lon, lat) = (lon0 + (lon1 - lon0) * t, lat0 + (lat1 - lat0) * t)
- with t being a real number greater than or equal to 0 and smaller
- than or equal to 1. Note that this line may markedly differ from the
- geodesic path along the curved surface of the reference ellipsoid.
- The same applies to the optional height element with the proviso that
- the direction of the height is as specified in the coordinate
- reference system.
- Note that, again, this does not mean that a surface with equal height
- follows, for example, the curvature of a body of water. Nor is a
- surface of equal height perpendicular to a plumb line.
- Examples of positions and geometries are provided in Appendix A,
- "Geometry Examples".
- 3.1.2. Point
- For type "Point", the "coordinates" member is a single position.
- 3.1.3. MultiPoint
- For type "MultiPoint", the "coordinates" member is an array of
- positions.
- 3.1.4. LineString
- For type "LineString", the "coordinates" member is an array of two or
- more positions.
- 3.1.5. MultiLineString
- For type "MultiLineString", the "coordinates" member is an array of
- LineString coordinate arrays.
- Butler, et al. Standards Track [Page 8]
- RFC 7946 GeoJSON August 2016
- 3.1.6. Polygon
- To specify a constraint specific to Polygons, it is useful to
- introduce the concept of a linear ring:
- o A linear ring is a closed LineString with four or more positions.
- o The first and last positions are equivalent, and they MUST contain
- identical values; their representation SHOULD also be identical.
- o A linear ring is the boundary of a surface or the boundary of a
- hole in a surface.
- o A linear ring MUST follow the right-hand rule with respect to the
- area it bounds, i.e., exterior rings are counterclockwise, and
- holes are clockwise.
- Note: the [GJ2008] specification did not discuss linear ring winding
- order. For backwards compatibility, parsers SHOULD NOT reject
- Polygons that do not follow the right-hand rule.
- Though a linear ring is not explicitly represented as a GeoJSON
- geometry type, it leads to a canonical formulation of the Polygon
- geometry type definition as follows:
- o For type "Polygon", the "coordinates" member MUST be an array of
- linear ring coordinate arrays.
- o For Polygons with more than one of these rings, the first MUST be
- the exterior ring, and any others MUST be interior rings. The
- exterior ring bounds the surface, and the interior rings (if
- present) bound holes within the surface.
- 3.1.7. MultiPolygon
- For type "MultiPolygon", the "coordinates" member is an array of
- Polygon coordinate arrays.
- 3.1.8. GeometryCollection
- A GeoJSON object with type "GeometryCollection" is a Geometry object.
- A GeometryCollection has a member with the name "geometries". The
- value of "geometries" is an array. Each element of this array is a
- GeoJSON Geometry object. It is possible for this array to be empty.
- Butler, et al. Standards Track [Page 9]
- RFC 7946 GeoJSON August 2016
- Unlike the other geometry types described above, a GeometryCollection
- can be a heterogeneous composition of smaller Geometry objects. For
- example, a Geometry object in the shape of a lowercase roman "i" can
- be composed of one point and one LineString.
- GeometryCollections have a different syntax from single type Geometry
- objects (Point, LineString, and Polygon) and homogeneously typed
- multipart Geometry objects (MultiPoint, MultiLineString, and
- MultiPolygon) but have no different semantics. Although a
- GeometryCollection object has no "coordinates" member, it does have
- coordinates: the coordinates of all its parts belong to the
- collection. The "geometries" member of a GeometryCollection
- describes the parts of this composition. Implementations SHOULD NOT
- apply any additional semantics to the "geometries" array.
- To maximize interoperability, implementations SHOULD avoid nested
- GeometryCollections. Furthermore, GeometryCollections composed of a
- single part or a number of parts of a single type SHOULD be avoided
- when that single part or a single object of multipart type
- (MultiPoint, MultiLineString, or MultiPolygon) could be used instead.
- 3.1.9. Antimeridian Cutting
- In representing Features that cross the antimeridian,
- interoperability is improved by modifying their geometry. Any
- geometry that crosses the antimeridian SHOULD be represented by
- cutting it in two such that neither part's representation crosses the
- antimeridian.
- For example, a line extending from 45 degrees N, 170 degrees E across
- the antimeridian to 45 degrees N, 170 degrees W should be cut in two
- and represented as a MultiLineString.
- {
- "type": "MultiLineString",
- "coordinates": [
- [
- [170.0, 45.0], [180.0, 45.0]
- ], [
- [-180.0, 45.0], [-170.0, 45.0]
- ]
- ]
- }
- Butler, et al. Standards Track [Page 10]
- RFC 7946 GeoJSON August 2016
- A rectangle extending from 40 degrees N, 170 degrees E across the
- antimeridian to 50 degrees N, 170 degrees W should be cut in two and
- represented as a MultiPolygon.
- {
- "type": "MultiPolygon",
- "coordinates": [
- [
- [
- [180.0, 40.0], [180.0, 50.0], [170.0, 50.0],
- [170.0, 40.0], [180.0, 40.0]
- ]
- ],
- [
- [
- [-170.0, 40.0], [-170.0, 50.0], [-180.0, 50.0],
- [-180.0, 40.0], [-170.0, 40.0]
- ]
- ]
- ]
- }
- 3.1.10. Uncertainty and Precision
- As in [RFC5870], the number of digits of the values in coordinate
- positions MUST NOT be interpreted as an indication to the level of
- uncertainty.
- 3.2. Feature Object
- A Feature object represents a spatially bounded thing. Every Feature
- object is a GeoJSON object no matter where it occurs in a GeoJSON
- text.
- o A Feature object has a "type" member with the value "Feature".
- o A Feature object has a member with the name "geometry". The value
- of the geometry member SHALL be either a Geometry object as
- defined above or, in the case that the Feature is unlocated, a
- JSON null value.
- o A Feature object has a member with the name "properties". The
- value of the properties member is an object (any JSON object or a
- JSON null value).
- Butler, et al. Standards Track [Page 11]
- RFC 7946 GeoJSON August 2016
- o If a Feature has a commonly used identifier, that identifier
- SHOULD be included as a member of the Feature object with the name
- "id", and the value of this member is either a JSON string or
- number.
- 3.3. FeatureCollection Object
- A GeoJSON object with the type "FeatureCollection" is a
- FeatureCollection object. A FeatureCollection object has a member
- with the name "features". The value of "features" is a JSON array.
- Each element of the array is a Feature object as defined above. It
- is possible for this array to be empty.
- 4. Coordinate Reference System
- The coordinate reference system for all GeoJSON coordinates is a
- geographic coordinate reference system, using the World Geodetic
- System 1984 (WGS 84) [WGS84] datum, with longitude and latitude units
- of decimal degrees. This is equivalent to the coordinate reference
- system identified by the Open Geospatial Consortium (OGC) URN
- urn:ogc:def:crs:OGC::CRS84. An OPTIONAL third-position element SHALL
- be the height in meters above or below the WGS 84 reference
- ellipsoid. In the absence of elevation values, applications
- sensitive to height or depth SHOULD interpret positions as being at
- local ground or sea level.
- Note: the use of alternative coordinate reference systems was
- specified in [GJ2008], but it has been removed from this version of
- the specification because the use of different coordinate reference
- systems -- especially in the manner specified in [GJ2008] -- has
- proven to have interoperability issues. In general, GeoJSON
- processing software is not expected to have access to coordinate
- reference system databases or to have network access to coordinate
- reference system transformation parameters. However, where all
- involved parties have a prior arrangement, alternative coordinate
- reference systems can be used without risk of data being
- misinterpreted.
- 5. Bounding Box
- A GeoJSON object MAY have a member named "bbox" to include
- information on the coordinate range for its Geometries, Features, or
- FeatureCollections. The value of the bbox member MUST be an array of
- length 2*n where n is the number of dimensions represented in the
- contained geometries, with all axes of the most southwesterly point
- followed by all axes of the more northeasterly point. The axes order
- of a bbox follows the axes order of geometries.
- Butler, et al. Standards Track [Page 12]
- RFC 7946 GeoJSON August 2016
- The "bbox" values define shapes with edges that follow lines of
- constant longitude, latitude, and elevation.
- Example of a 2D bbox member on a Feature:
- {
- "type": "Feature",
- "bbox": [-10.0, -10.0, 10.0, 10.0],
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [-10.0, -10.0],
- [10.0, -10.0],
- [10.0, 10.0],
- [-10.0, -10.0]
- ]
- ]
- }
- //...
- }
- Example of a 2D bbox member on a FeatureCollection:
- {
- "type": "FeatureCollection",
- "bbox": [100.0, 0.0, 105.0, 1.0],
- "features": [
- //...
- ]
- }
- Example of a 3D bbox member with a depth of 100 meters:
- {
- "type": "FeatureCollection",
- "bbox": [100.0, 0.0, -100.0, 105.0, 1.0, 0.0],
- "features": [
- //...
- ]
- }
- Butler, et al. Standards Track [Page 13]
- RFC 7946 GeoJSON August 2016
- 5.1. The Connecting Lines
- The four lines of the bounding box are defined fully within the
- coordinate reference system; that is, for a box bounded by the values
- "west", "south", "east", and "north", every point on the northernmost
- line can be expressed as
- (lon, lat) = (west + (east - west) * t, north)
- with 0 <= t <= 1.
- 5.2. The Antimeridian
- Consider a set of point Features within the Fiji archipelago,
- straddling the antimeridian between 16 degrees S and 20 degrees S.
- The southwest corner of the box containing these Features is at 20
- degrees S and 177 degrees E, and the northwest corner is at 16
- degrees S and 178 degrees W. The antimeridian-spanning GeoJSON
- bounding box for this FeatureCollection is
- "bbox": [177.0, -20.0, -178.0, -16.0]
- and covers 5 degrees of longitude.
- The complementary bounding box for the same latitude band, not
- crossing the antimeridian, is
- "bbox": [-178.0, -20.0, 177.0, -16.0]
- and covers 355 degrees of longitude.
- The latitude of the northeast corner is always greater than the
- latitude of the southwest corner, but bounding boxes that cross the
- antimeridian have a northeast corner longitude that is less than the
- longitude of the southwest corner.
- 5.3. The Poles
- A bounding box that contains the North Pole extends from a southwest
- corner of "minlat" degrees N, 180 degrees W to a northeast corner of
- 90 degrees N, 180 degrees E. Viewed on a globe, this bounding box
- approximates a spherical cap bounded by the "minlat" circle of
- latitude.
- "bbox": [-180.0, minlat, 180.0, 90.0]
- Butler, et al. Standards Track [Page 14]
- RFC 7946 GeoJSON August 2016
- A bounding box that contains the South Pole extends from a southwest
- corner of 90 degrees S, 180 degrees W to a northeast corner of
- "maxlat" degrees S, 180 degrees E.
- "bbox": [-180.0, -90.0, 180.0, maxlat]
- A bounding box that just touches the North Pole and forms a slice of
- an approximate spherical cap when viewed on a globe extends from a
- southwest corner of "minlat" degrees N and "westlon" degrees E to a
- northeast corner of 90 degrees N and "eastlon" degrees E.
- "bbox": [westlon, minlat, eastlon, 90.0]
- Similarly, a bounding box that just touches the South Pole and forms
- a slice of an approximate spherical cap when viewed on a globe has
- the following representation in GeoJSON.
- "bbox": [westlon, -90.0, eastlon, maxlat]
- Implementers MUST NOT use latitude values greater than 90 or less
- than -90 to imply an extent that is not a spherical cap.
- 6. Extending GeoJSON
- 6.1. Foreign Members
- Members not described in this specification ("foreign members") MAY
- be used in a GeoJSON document. Note that support for foreign members
- can vary across implementations, and no normative processing model
- for foreign members is defined. Accordingly, implementations that
- rely too heavily on the use of foreign members might experience
- reduced interoperability with other implementations.
- For example, in the (abridged) Feature object shown below
- {
- "type": "Feature",
- "id": "f1",
- "geometry": {...},
- "properties": {...},
- "title": "Example Feature"
- }
- the name/value pair of "title": "Example Feature" is a foreign
- member. When the value of a foreign member is an object, all the
- descendant members of that object are themselves foreign members.
- Butler, et al. Standards Track [Page 15]
- RFC 7946 GeoJSON August 2016
- GeoJSON semantics do not apply to foreign members and their
- descendants, regardless of their names and values. For example, in
- the (abridged) Feature object below
- {
- "type": "Feature",
- "id": "f2",
- "geometry": {...},
- "properties": {...},
- "centerline": {
- "type": "LineString",
- "coordinates": [
- [-170, 10],
- [170, 11]
- ]
- }
- }
- the "centerline" member is not a GeoJSON Geometry object.
- 7. GeoJSON Types Are Not Extensible
- Implementations MUST NOT extend the fixed set of GeoJSON types:
- FeatureCollection, Feature, Point, LineString, MultiPoint, Polygon,
- MultiLineString, MultiPolygon, and GeometryCollection.
- 7.1. Semantics of GeoJSON Members and Types Are Not Changeable
- Implementations MUST NOT change the semantics of GeoJSON members and
- types.
- The GeoJSON "coordinates" and "geometries" members define Geometry
- objects. FeatureCollection and Feature objects, respectively, MUST
- NOT contain a "coordinates" or "geometries" member.
- The GeoJSON "geometry" and "properties" members define a Feature
- object. FeatureCollection and Geometry objects, respectively, MUST
- NOT contain a "geometry" or "properties" member.
- The GeoJSON "features" member defines a FeatureCollection object.
- Feature and Geometry objects, respectively, MUST NOT contain a
- "features" member.
- Butler, et al. Standards Track [Page 16]
- RFC 7946 GeoJSON August 2016
- 8. Versioning
- The GeoJSON format can be extended as defined here, but no explicit
- versioning scheme is defined. A specification that alters the
- semantics of GeoJSON members or otherwise modifies the format does
- not create a new version of this format; instead, it defines an
- entirely new format that MUST NOT be identified as GeoJSON.
- 9. Mapping 'geo' URIs
- 'geo' URIs [RFC5870] identify geographic locations and precise (not
- uncertain) locations can be mapped to GeoJSON Geometry objects.
- For this section, as in [RFC5870], "lat", "lon", "alt", and "unc" are
- placeholders for 'geo' URI latitude, longitude, altitude, and
- uncertainty values, respectively.
- A 'geo' URI with two coordinates and an uncertainty ('u') parameter
- that is absent or zero, and a GeoJSON Point geometry may be mapped to
- each other. A GeoJSON Point is always converted to a 'geo' URI that
- has no uncertainty parameter.
- 'geo' URI:
- geo:lat,lon
- GeoJSON:
- {"type": "Point", "coordinates": [lon, lat]}
- The mapping between 'geo' URIs and GeoJSON Points that specify
- elevation is shown below.
- 'geo' URI:
- geo:lat,lon,alt
- GeoJSON:
- {"type": "Point", "coordinates": [lon, lat, alt]}
- GeoJSON has no concept of uncertainty; imprecise or uncertain 'geo'
- URIs thus cannot be mapped to GeoJSON geometries.
- Butler, et al. Standards Track [Page 17]
- RFC 7946 GeoJSON August 2016
- 10. Security Considerations
- GeoJSON shares security issues common to all JSON content types. See
- [RFC7159], Section 12 for additional information. GeoJSON does not
- provide executable content.
- GeoJSON does not provide privacy or integrity services. If sensitive
- data requires privacy or integrity protection, those must be provided
- by the transport -- for example, Transport Layer Security (TLS) or
- HTTPS. There will be cases in which stored data need protection,
- which is out of scope for this document.
- As with other geographic data formats, e.g., [KMLv2.2], providing
- details about the locations of sensitive persons, animals, habitats,
- and facilities can expose them to unauthorized tracking or injury.
- Data providers should recognize the risk of inadvertently identifying
- individuals if locations in anonymized datasets are not adequately
- skewed or not sufficiently fuzzed [Sweeney] and recognize that the
- effectiveness of location obscuration is limited by a number of
- factors and is unlikely to be an effective defense against a
- determined attack [RFC6772].
- 11. Interoperability Considerations
- 11.1. I-JSON
- GeoJSON texts should follow the constraints of Internet JSON (I-JSON)
- [RFC7493] for maximum interoperability.
- 11.2. Coordinate Precision
- The size of a GeoJSON text in bytes is a major interoperability
- consideration, and precision of coordinate values has a large impact
- on the size of texts. A GeoJSON text containing many detailed
- Polygons can be inflated almost by a factor of two by increasing
- coordinate precision from 6 to 15 decimal places. For geographic
- coordinates with units of degrees, 6 decimal places (a default common
- in, e.g., sprintf) amounts to about 10 centimeters, a precision well
- within that of current GPS systems. Implementations should consider
- the cost of using a greater precision than necessary.
- Furthermore, the WGS 84 [WGS84] datum is a relatively coarse
- approximation of the geoid, with the height varying by up to 5 m (but
- generally between 2 and 3 meters) higher or lower relative to a
- surface parallel to Earth's mean sea level.
- Butler, et al. Standards Track [Page 18]
- RFC 7946 GeoJSON August 2016
- 12. IANA Considerations
- The media type for GeoJSON text is "application/geo+json" and is
- registered in the "Media Types" registry described in [RFC6838]. The
- entry for "application/vnd.geo+json" in the same registry should have
- its status changed to be "OBSOLETED" with a pointer to the media type
- "application/geo+json" and a reference added to this RFC.
- Type name: application
- Subtype name: geo+json
- Required parameters: n/a
- Optional parameters: n/a
- Encoding considerations: binary
- Security considerations: See Section 10 above
- Interoperability considerations: See Section 11 above
- Published specification: [[RFC7946]]
- Applications that use this media type: No known applications
- currently use this media type. This media type is intended for
- GeoJSON applications currently using the "application/
- vnd.geo+json" or "application/json" media types, of which there
- are several categories: web mapping, geospatial databases,
- geographic data processing APIs, data analysis and storage
- services, and data dissemination.
- Additional information:
- Magic number(s): n/a
- File extension(s): .json, .geojson
- Macintosh file type code: n/a
- Object Identifiers: n/a
- Windows clipboard name: GeoJSON
- Macintosh uniform type identifier: public.geojson conforms to
- public.json
- Butler, et al. Standards Track [Page 19]
- RFC 7946 GeoJSON August 2016
- Person to contact for further information: Sean Gillies
- (sean.gillies@gmail.com)
- Intended usage: COMMON
- Restrictions on usage: none
- Restrictions on usage: none
- Author: see "Authors' Addresses" section of [[RFC7946]].
- Change controller: Internet Engineering Task Force
- 13. References
- 13.1. Normative References
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119,
- DOI 10.17487/RFC2119, March 1997,
- <http://www.rfc-editor.org/info/rfc2119>.
- [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
- Specifications and Registration Procedures", BCP 13,
- RFC 6838, DOI 10.17487/RFC6838, January 2013,
- <http://www.rfc-editor.org/info/rfc6838>.
- [RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
- Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March
- 2014, <http://www.rfc-editor.org/info/rfc7159>.
- [RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493,
- DOI 10.17487/RFC7493, March 2015,
- <http://www.rfc-editor.org/info/rfc7493>.
- [WGS84] National Imagery and Mapping Agency, "Department of
- Defense World Geodetic System 1984: Its Definition and
- Relationships with Local Geodetic Systems", Third Edition,
- 1984.
- Butler, et al. Standards Track [Page 20]
- RFC 7946 GeoJSON August 2016
- 13.2. Informative References
- [GJ2008] Butler, H., Daly, M., Doyle, A., Gillies, S., Schaub, T.,
- and C. Schmidt, "The GeoJSON Format Specification", June
- 2008.
- [KMLv2.2] Wilson, T., "OGC KML", OGC 07-147r2, Version 2.2.0, April
- 2008.
- [RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource
- Identifier for Geographic Locations ('geo' URI)",
- RFC 5870, DOI 10.17487/RFC5870, June 2010,
- <http://www.rfc-editor.org/info/rfc5870>.
- [RFC6772] Schulzrinne, H., Ed., Tschofenig, H., Ed., Cuellar, J.,
- Polk, J., Morris, J., and M. Thomson, "Geolocation Policy:
- A Document Format for Expressing Privacy Preferences for
- Location Information", RFC 6772, DOI 10.17487/RFC6772,
- January 2013, <http://www.rfc-editor.org/info/rfc6772>.
- [RFC7464] Williams, N., "JavaScript Object Notation (JSON) Text
- Sequences", RFC 7464, DOI 10.17487/RFC7464, February 2015,
- <http://www.rfc-editor.org/info/rfc7464>.
- [SFSQL] OpenGIS Consortium, Inc., "OpenGIS Simple Features
- Specification For SQL Revision 1.1", OGC 99-049, May 1999.
- [Sweeney] Sweeney, L., "k-anonymity: a model for protecting
- privacy", International Journal on Uncertainty, Fuzziness
- and Knowledge-based Systems 10 (5), 2002; 557-570,
- DOI 10.1142/S0218488502001648, 2002.
- [WFSv1] Vretanos, P., "Web Feature Service Implementation
- Specification", OGC 04-094, Version 1.1.0, May 2005.
- Butler, et al. Standards Track [Page 21]
- RFC 7946 GeoJSON August 2016
- Appendix A. Geometry Examples
- Each of the examples below represents a valid and complete GeoJSON
- object.
- A.1. Points
- Point coordinates are in x, y order (easting, northing for projected
- coordinates, longitude, and latitude for geographic coordinates):
- {
- "type": "Point",
- "coordinates": [100.0, 0.0]
- }
- A.2. LineStrings
- Coordinates of LineString are an array of positions (see
- Section 3.1.1):
- {
- "type": "LineString",
- "coordinates": [
- [100.0, 0.0],
- [101.0, 1.0]
- ]
- }
- Butler, et al. Standards Track [Page 22]
- RFC 7946 GeoJSON August 2016
- A.3. Polygons
- Coordinates of a Polygon are an array of linear ring (see
- Section 3.1.6) coordinate arrays. The first element in the array
- represents the exterior ring. Any subsequent elements represent
- interior rings (or holes).
- No holes:
- {
- "type": "Polygon",
- "coordinates": [
- [
- [100.0, 0.0],
- [101.0, 0.0],
- [101.0, 1.0],
- [100.0, 1.0],
- [100.0, 0.0]
- ]
- ]
- }
- With holes:
- {
- "type": "Polygon",
- "coordinates": [
- [
- [100.0, 0.0],
- [101.0, 0.0],
- [101.0, 1.0],
- [100.0, 1.0],
- [100.0, 0.0]
- ],
- [
- [100.8, 0.8],
- [100.8, 0.2],
- [100.2, 0.2],
- [100.2, 0.8],
- [100.8, 0.8]
- ]
- ]
- }
- Butler, et al. Standards Track [Page 23]
- RFC 7946 GeoJSON August 2016
- A.4. MultiPoints
- Coordinates of a MultiPoint are an array of positions:
- {
- "type": "MultiPoint",
- "coordinates": [
- [100.0, 0.0],
- [101.0, 1.0]
- ]
- }
- A.5. MultiLineStrings
- Coordinates of a MultiLineString are an array of LineString
- coordinate arrays:
- {
- "type": "MultiLineString",
- "coordinates": [
- [
- [100.0, 0.0],
- [101.0, 1.0]
- ],
- [
- [102.0, 2.0],
- [103.0, 3.0]
- ]
- ]
- }
- Butler, et al. Standards Track [Page 24]
- RFC 7946 GeoJSON August 2016
- A.6. MultiPolygons
- Coordinates of a MultiPolygon are an array of Polygon coordinate
- arrays:
- {
- "type": "MultiPolygon",
- "coordinates": [
- [
- [
- [102.0, 2.0],
- [103.0, 2.0],
- [103.0, 3.0],
- [102.0, 3.0],
- [102.0, 2.0]
- ]
- ],
- [
- [
- [100.0, 0.0],
- [101.0, 0.0],
- [101.0, 1.0],
- [100.0, 1.0],
- [100.0, 0.0]
- ],
- [
- [100.2, 0.2],
- [100.2, 0.8],
- [100.8, 0.8],
- [100.8, 0.2],
- [100.2, 0.2]
- ]
- ]
- ]
- }
- Butler, et al. Standards Track [Page 25]
- RFC 7946 GeoJSON August 2016
- A.7. GeometryCollections
- Each element in the "geometries" array of a GeometryCollection is one
- of the Geometry objects described above:
- {
- "type": "GeometryCollection",
- "geometries": [{
- "type": "Point",
- "coordinates": [100.0, 0.0]
- }, {
- "type": "LineString",
- "coordinates": [
- [101.0, 0.0],
- [102.0, 1.0]
- ]
- }]
- }
- Appendix B. Changes from the Pre-IETF GeoJSON Format Specification
- This appendix briefly summarizes non-editorial changes from the 2008
- specification [GJ2008].
- B.1. Normative Changes
- o Specification of coordinate reference systems has been removed,
- i.e., the "crs" member of [GJ2008] is no longer used.
- o In the absence of elevation values, applications sensitive to
- height or depth SHOULD interpret positions as being at local
- ground or sea level (see Section 4).
- o Implementations SHOULD NOT extend position arrays beyond 3
- elements (see Section 3.1.1).
- o A line between two positions is a straight Cartesian line (see
- Section 3.1.1).
- o Polygon rings MUST follow the right-hand rule for orientation
- (counterclockwise external rings, clockwise internal rings).
- o The values of a "bbox" array are "[west, south, east, north]", not
- "[minx, miny, maxx, maxy]" (see Section 5).
- o A Feature object's "id" member is a string or number (see
- Section 3.2).
- Butler, et al. Standards Track [Page 26]
- RFC 7946 GeoJSON August 2016
- o Extensions MAY be used, but MUST NOT change the semantics of
- GeoJSON members and types (see Section 6).
- o GeoJSON objects MUST NOT contain the defining members of other
- types (see Section 7.1).
- o The media type for GeoJSON is "application/geo+json".
- B.2. Informative Changes
- o The definition of a GeoJSON text has been added.
- o Rules for mapping 'geo' URIs have been added.
- o A recommendation of the I-JSON [RFC7493] constraints has been
- added.
- o Implementers are cautioned about the effect of excessive
- coordinate precision on interoperability.
- o Interoperability concerns of GeometryCollections are noted. These
- objects should be used sparingly (see Section 3.1.8).
- Appendix C. GeoJSON Text Sequences
- All GeoJSON objects defined in this specification --
- FeatureCollection, Feature, and Geometry -- consist of exactly one
- JSON object. However, there may be circumstances in which
- applications need to represent sets or sequences of these objects
- (over and above the grouping of Feature objects in a
- FeatureCollection), e.g., in order to efficiently "stream" large
- numbers of Feature objects. The definition of such sets or sequences
- is outside the scope of this specification.
- If such a representation is needed, a new media type is required that
- has the ability to represent these sets or sequences. When defining
- such a media type, it may be useful to base it on "JavaScript Object
- Notation (JSON) Text Sequences" [RFC7464], leaving the foundations of
- how to represent multiple JSON objects to that specification, and
- only defining how it applies to GeoJSON objects.
- Acknowledgements
- The GeoJSON format is the product of discussion on the GeoJSON
- mailing list, <http://lists.geojson.org/listinfo.cgi/
- geojson-geojson.org>, before October 2015 and in the IETF's GeoJSON
- WG after October 2015.
- Butler, et al. Standards Track [Page 27]
- RFC 7946 GeoJSON August 2016
- Material in this document was adapted with changes from
- <http://geojson.org/geojson-spec.html> [GJ2008], which is licensed
- under <http://creativecommons.org/licenses/by/3.0/us/>.
- Authors' Addresses
- Howard Butler
- Hobu Inc.
- Email: howard@hobu.co
- Martin Daly
- Cadcorp
- Email: martin.daly@cadcorp.com
- Allan Doyle
- Email: adoyle@intl-interfaces.com
- Sean Gillies
- Mapbox
- Email: sean.gillies@gmail.com
- URI: http://sgillies.net
- Stefan Hagen
- Rheinaustr. 62
- Bonn 53225
- Germany
- Email: stefan@hagen.link
- URI: http://stefan-hagen.website/
- Tim Schaub
- Planet Labs
- Email: tim.schaub@gmail.com
- Butler, et al. Standards Track [Page 28]
|