SlideShare a Scribd company logo
Map the Globe, simply
Polygon indexing and GeoJSON support
in MongoDB
Greg Studer
greg@10gen.com
mongoNYC 2013
● 2d vs 2dsphere
● (Quick) overview of previous geospatial features
in MongoDB
● New line/polygon indexing on spherical globe
GeoJSON - lines and polygons
● Geo in aggregation
● Future Roadmap
Why use (2dsphere) geospatial indexing?
1. Have earth-like coordinates and regions tagged
to other data over large areas
2. Want to query this data
based on location
3. Don't necessarily want to
think a lot about the fact
that the earth is round
[ from Jpatokal at wikimedia.org ]
https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
[ from Jpatokal at wikimedia.org ]
https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
https://www.e-education.psu.edu/natureofgeoinfo
Why use (2d) geospatial indexing?
1. Have regional or virtual world coordinates
embedded in other data
2. (For now) Only indexing
locations
3. Don't want spherical
overhead
Overview of geo features
● 2.2 - "2d"
Index only (multi-)points
Query near points or within simple polygons
// Make a flat 2d index [-180 -> 180)
> db.coll.ensureIndex(
{ location : "2d", type : 1 } )
// Insert some point data
> db.coll.insert({ name : "Shake Shack",
type : "rest",
location : [ -73.9881353, 40.7415064 ]
})
> db.coll.insert({ name : "Park Avenue
Tavern", type : "bar",
location : [ -73.9786924, 40.7502231 ]
})
// Find in Manhattan Mall
> db.coll.find({ location : { $geoWithin : {
$polygon : [[ -73.9884761, 40.7491204 ],
[ -73.988829, 40.7486387 ],
[ -73.9901297, 40.7491856 ],
[ -73.9897768, 40.7496673 ],
[ -73.9884761, 40.7491204 ]] }}},
type : "rest" })
// Find near Washington Square (center)
> db.coll.find({ location : {
$geoNear : [ -73.7695467, 42.6622728 ] },
type : "rest" });
Overview of geo features
● 2.2 - "2d"
DEMO - NYC OpenStreetMaps data
github.com/mongodb/mongo-snippets/tree/master/2dsphere
Overview of geo features
● Current 2.4 - "2dsphere"
Index points, lines, and polygons (on sphere)
Understands simple GeoJSON
Query with points, lines, and polygons
Within-region, Intersect-region, Near-point
queries
GeoJSON
● Widely supported open JSON standard
http://www.geojson.org/
● Simple language:
{ type : 'Point',
coordinates : [<lon>, <lat>] }
{ type : 'LineString',
coordinates : [[<lon>, <lat>],...] }
{ type : 'Polygon',
coordinates : [[[<lon>,<lat>],...],...]}
+ other MultiXXX types (future) ...
// Make a spherical 2d compound index
> db.coll.ensureIndex(
{ type : 1, location : "2dsphere" } )
// Insert Park Avenue
> db.coll.insert(
{ name : "Park Avenue", type : "road",
location : { type : 'LineString',
coordinates : [
[ -73.9359712600708, 40.80942429324451],
[ -73.93676519393921, 40.80820620367037],
... ]} });
// Insert Great Hill
> db.coll.insert(
{ name : "Great Hill", type : "park",
location : { type : 'Polygon',
coordinates : [[
[ -73.95841598510742, 40.79724239132546],
[ -73.95817995071411, 40.79691751000055],
... ]]} });
// Find docs with geometry that intersects
// a route
> db.coll.find({ location :
{ $geoIntersects : { $geometry :
{ type : 'LineString',
// Run coordinates
coordinates : [
[ -73.95586252212524, 40.77964777966238 ],
[ -73.95886659622192, 40.78091513739611 ],
... ]} }}})
Overview of geo features
● Current 2.4 - "2dsphere"
DEMO - NYC OpenStreetMaps data
github.com/mongodb/mongo-snippets/tree/master/2dsphere
Overview of geo features
● Current 2.4 - "2dsphere"
Reduced shape distortion
DEMO - NYC OpenStreetMaps data
github.com/mongodb/mongo-snippets/tree/master/2dsphere
Technology
● GeoJSON
http://www.geojson.org
● Google S2 Geometry Library
Apache License 2.0
http://code.google.com/p/s2-geometry-library
image by user geek3 @ http://en.
wikipedia.org/wiki/File:
Sphere_wireframe_10deg_6r.svg
S2
S2
00
0110
11
10|01
10|0010|11
10|10
● 2d vs 2dsphere
● (Quick) overview of previous geospatial features
in MongoDB
● New line/polygon indexing on spherical globe
GeoJSON - lines and polygons
● Geo in aggregation
● Future Roadmap
Overview of geo features
● Current 2.4 - aggregation support
Geospatial predicates in aggregation
Near sorting in aggregation, custom output
fields
> db.ny.aggregate([
// Find everything in MidTown/Hell's Kitchen
{ $match : { geo: { $geoWithin: { $geometry:
{ type: "Polygon", coordinates: [[
// Midtown/Hell's Kitchen
[ -73.9984130859375, 40.78028146155187 ],
[ -73.95240783691406, 40.76182096906601 ],
[ -73.96888732910156, 40.73945350425846 ],
[ -74.01420593261719, 40.75531957477602 ],
[ -73.9984130859375, 40.78028146155187 ]
]] } } } } },
...
...
// Organize stuff we want
{ $project :
{ tags : 1,
info : { name : "$name",
lonLat : "$geo.coordinates" }} },
{ $unwind : "$tags" },
// Count by tag types
{ $group : { _id : "$tags",
total : { $sum : 1 },
locs : { $push : "$info" } }}
]); // end
{ "result" : [
{ "_id" : "park", "total" : 18,
"locs" : [{
"name" : "Hells Kitchen Park",
"lonLat" : [ -73.9925, 40.7630556 ] },
...
{ "_id" : "bar", "total" : 28,
"locs" : [
{ "name" : "Landmark Tavern",
"lonLat" : [ -73.9963261, 40.7631922 ] },
{ "name" : "Pony Bar",
"lonLat" : [ -73.994236, 40.761723 ] },
...
...
> db.ny.aggregate([
// Find near Times Square
{ $geoNear : {
near : {
type: "Point",
// Times Square
coordinates: [ -73.98508787155151,
40.75905795418586 ] },
distanceField : "distance",
spherical : true, // 2dsphere
num : 1000 } },
...
...
// Organize stuff we want
{ $project :
{ tags : 1,
info : { name : "$name",
distance : "$distance",
lonLat : "$geo.coordinates" }} },
{ $unwind : "$tags" },
// Count by tag types
{ $group : { _id : "$tags",
total : { $sum : 1 },
locs : { $push : "$info" } }}
]); // end
...
{ "result" : [
{ "_id" : "park", "total" : 11,
"locs" : [{
"name" : "Ramone Aponte Park",
"distance" : 449.7417003854033, // m
"lonLat" : [ -73.9894444, 40.7613889 ]},
...
{ "_id" : "bar", "total" : 24,
"locs" : [{
"name" : "The Lambs Club",
"distance" : 275.0270424641914, // m
"lonLat" : [ -73.9963261, 40.7631922 ]},
...
...
[ from Jpatokal at wikimedia.org ]
https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
Future
● Further support for other predicates
OGC Simple Features
● GeoJSON composite shapes
● Indexing API to allow similar enhancements for
"flat plane" work
● Space open for non-default CRSes
Thanks!
greg@10gen.com

More Related Content

What's hot (20)

PDF
10. R getting spatial
ExternalEvents
 
PPTX
Webinar: Exploring the Aggregation Framework
MongoDB
 
PPTX
Integration of Google-map in Rails Application
Swati Jadhav
 
TXT
Litebox
meli media
 
PDF
Fun with D3.js: Data Visualization Eye Candy with Streaming JSON
Tomomi Imura
 
PDF
Pycon2011
Django Stars
 
PPTX
The Aggregation Framework
MongoDB
 
PPT
Nosh slides mongodb web application - mongo philly 2011
MongoDB
 
PPTX
First app online conf
MongoDB
 
PDF
20110514 mongo dbチューニング
Yuichi Matsuo
 
PDF
MongoDB dla administratora
3camp
 
PDF
はじめてのMongoDB
Takahiro Inoue
 
PPTX
Scrollytelling
Baron Watts
 
PDF
How to calculate the optimal undo retention in Oracle
Jorge Batista
 
PDF
Having fun with graphs, a short introduction to D3.js
Michael Hackstein
 
PDF
MySQL flexible schema and JSON for Internet of Things
Alexander Rubin
 
PDF
The Web map stack on Django
Paul Smith
 
PPTX
Fact, Fiction, and FP
Brian Lonsdorf
 
PPTX
Lenses
Brian Lonsdorf
 
10. R getting spatial
ExternalEvents
 
Webinar: Exploring the Aggregation Framework
MongoDB
 
Integration of Google-map in Rails Application
Swati Jadhav
 
Litebox
meli media
 
Fun with D3.js: Data Visualization Eye Candy with Streaming JSON
Tomomi Imura
 
Pycon2011
Django Stars
 
The Aggregation Framework
MongoDB
 
Nosh slides mongodb web application - mongo philly 2011
MongoDB
 
First app online conf
MongoDB
 
20110514 mongo dbチューニング
Yuichi Matsuo
 
MongoDB dla administratora
3camp
 
はじめてのMongoDB
Takahiro Inoue
 
Scrollytelling
Baron Watts
 
How to calculate the optimal undo retention in Oracle
Jorge Batista
 
Having fun with graphs, a short introduction to D3.js
Michael Hackstein
 
MySQL flexible schema and JSON for Internet of Things
Alexander Rubin
 
The Web map stack on Django
Paul Smith
 
Fact, Fiction, and FP
Brian Lonsdorf
 

Similar to Geospatial Enhancements in MongoDB 2.4 (20)

PPTX
Conceptos básicos. Seminario web 4: Indexación avanzada, índices de texto y g...
MongoDB
 
KEY
Geospatial Indexing and Querying with MongoDB
Grant Goodale
 
PPTX
Back to Basics Webinar 4: Advanced Indexing, Text and Geospatial Indexes
MongoDB
 
PDF
MongoSF - Spatial MongoDB in OpenShift - script file
Steven Pousty
 
PDF
Spatial script for Spatial mongo for PHP and Zend
Steven Pousty
 
PPTX
Open Source Mapping with Python, and MongoDB
techprane
 
PDF
Script for Spatial Mongo
Steven Pousty
 
PPT
TDC2016SP - Trilha NoSQL
tdc-globalcode
 
PDF
A Century Of Weather Data - Midwest.io
Randall Hunt
 
PPTX
MongoDB Chicago - MapReduce, Geospatial, & Other Cool Features
ajhannan
 
PPTX
Geoindexing with MongoDB
leafnode
 
PPTX
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
MongoDB
 
PDF
Comparing Geospatial Implementation in MongoDB, Postgres, and Elastic
Antonios Giannopoulos
 
PDF
MongoDB + GeoServer
MongoDB
 
PDF
Some cool features of MongoDB
Tugdual Grall
 
PPT
Fast querying indexing for performance (4)
MongoDB
 
PPTX
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
POTX
Mobile 2: What's My Place in the Universe? Using Geo-Indexing to Solve Existe...
MongoDB
 
PPT
Mongo Web Apps: OSCON 2011
rogerbodamer
 
PDF
Webinar: Data Processing and Aggregation Options
MongoDB
 
Conceptos básicos. Seminario web 4: Indexación avanzada, índices de texto y g...
MongoDB
 
Geospatial Indexing and Querying with MongoDB
Grant Goodale
 
Back to Basics Webinar 4: Advanced Indexing, Text and Geospatial Indexes
MongoDB
 
MongoSF - Spatial MongoDB in OpenShift - script file
Steven Pousty
 
Spatial script for Spatial mongo for PHP and Zend
Steven Pousty
 
Open Source Mapping with Python, and MongoDB
techprane
 
Script for Spatial Mongo
Steven Pousty
 
TDC2016SP - Trilha NoSQL
tdc-globalcode
 
A Century Of Weather Data - Midwest.io
Randall Hunt
 
MongoDB Chicago - MapReduce, Geospatial, & Other Cool Features
ajhannan
 
Geoindexing with MongoDB
leafnode
 
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
MongoDB
 
Comparing Geospatial Implementation in MongoDB, Postgres, and Elastic
Antonios Giannopoulos
 
MongoDB + GeoServer
MongoDB
 
Some cool features of MongoDB
Tugdual Grall
 
Fast querying indexing for performance (4)
MongoDB
 
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
Mobile 2: What's My Place in the Universe? Using Geo-Indexing to Solve Existe...
MongoDB
 
Mongo Web Apps: OSCON 2011
rogerbodamer
 
Webinar: Data Processing and Aggregation Options
MongoDB
 
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
Ad

Geospatial Enhancements in MongoDB 2.4

  • 1. Map the Globe, simply Polygon indexing and GeoJSON support in MongoDB Greg Studer [email protected] mongoNYC 2013
  • 2. ● 2d vs 2dsphere ● (Quick) overview of previous geospatial features in MongoDB ● New line/polygon indexing on spherical globe GeoJSON - lines and polygons ● Geo in aggregation ● Future Roadmap
  • 3. Why use (2dsphere) geospatial indexing? 1. Have earth-like coordinates and regions tagged to other data over large areas 2. Want to query this data based on location 3. Don't necessarily want to think a lot about the fact that the earth is round
  • 4. [ from Jpatokal at wikimedia.org ] https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
  • 5. [ from Jpatokal at wikimedia.org ] https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
  • 7. Why use (2d) geospatial indexing? 1. Have regional or virtual world coordinates embedded in other data 2. (For now) Only indexing locations 3. Don't want spherical overhead
  • 8. Overview of geo features ● 2.2 - "2d" Index only (multi-)points Query near points or within simple polygons
  • 9. // Make a flat 2d index [-180 -> 180) > db.coll.ensureIndex( { location : "2d", type : 1 } ) // Insert some point data > db.coll.insert({ name : "Shake Shack", type : "rest", location : [ -73.9881353, 40.7415064 ] }) > db.coll.insert({ name : "Park Avenue Tavern", type : "bar", location : [ -73.9786924, 40.7502231 ] })
  • 10. // Find in Manhattan Mall > db.coll.find({ location : { $geoWithin : { $polygon : [[ -73.9884761, 40.7491204 ], [ -73.988829, 40.7486387 ], [ -73.9901297, 40.7491856 ], [ -73.9897768, 40.7496673 ], [ -73.9884761, 40.7491204 ]] }}}, type : "rest" }) // Find near Washington Square (center) > db.coll.find({ location : { $geoNear : [ -73.7695467, 42.6622728 ] }, type : "rest" });
  • 11. Overview of geo features ● 2.2 - "2d" DEMO - NYC OpenStreetMaps data github.com/mongodb/mongo-snippets/tree/master/2dsphere
  • 12. Overview of geo features ● Current 2.4 - "2dsphere" Index points, lines, and polygons (on sphere) Understands simple GeoJSON Query with points, lines, and polygons Within-region, Intersect-region, Near-point queries
  • 13. GeoJSON ● Widely supported open JSON standard http://www.geojson.org/ ● Simple language: { type : 'Point', coordinates : [<lon>, <lat>] } { type : 'LineString', coordinates : [[<lon>, <lat>],...] } { type : 'Polygon', coordinates : [[[<lon>,<lat>],...],...]} + other MultiXXX types (future) ...
  • 14. // Make a spherical 2d compound index > db.coll.ensureIndex( { type : 1, location : "2dsphere" } ) // Insert Park Avenue > db.coll.insert( { name : "Park Avenue", type : "road", location : { type : 'LineString', coordinates : [ [ -73.9359712600708, 40.80942429324451], [ -73.93676519393921, 40.80820620367037], ... ]} });
  • 15. // Insert Great Hill > db.coll.insert( { name : "Great Hill", type : "park", location : { type : 'Polygon', coordinates : [[ [ -73.95841598510742, 40.79724239132546], [ -73.95817995071411, 40.79691751000055], ... ]]} });
  • 16. // Find docs with geometry that intersects // a route > db.coll.find({ location : { $geoIntersects : { $geometry : { type : 'LineString', // Run coordinates coordinates : [ [ -73.95586252212524, 40.77964777966238 ], [ -73.95886659622192, 40.78091513739611 ], ... ]} }}})
  • 17. Overview of geo features ● Current 2.4 - "2dsphere" DEMO - NYC OpenStreetMaps data github.com/mongodb/mongo-snippets/tree/master/2dsphere
  • 18. Overview of geo features ● Current 2.4 - "2dsphere" Reduced shape distortion DEMO - NYC OpenStreetMaps data github.com/mongodb/mongo-snippets/tree/master/2dsphere
  • 19. Technology ● GeoJSON http://www.geojson.org ● Google S2 Geometry Library Apache License 2.0 http://code.google.com/p/s2-geometry-library image by user geek3 @ http://en. wikipedia.org/wiki/File: Sphere_wireframe_10deg_6r.svg
  • 20. S2
  • 22. ● 2d vs 2dsphere ● (Quick) overview of previous geospatial features in MongoDB ● New line/polygon indexing on spherical globe GeoJSON - lines and polygons ● Geo in aggregation ● Future Roadmap
  • 23. Overview of geo features ● Current 2.4 - aggregation support Geospatial predicates in aggregation Near sorting in aggregation, custom output fields
  • 24. > db.ny.aggregate([ // Find everything in MidTown/Hell's Kitchen { $match : { geo: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[ // Midtown/Hell's Kitchen [ -73.9984130859375, 40.78028146155187 ], [ -73.95240783691406, 40.76182096906601 ], [ -73.96888732910156, 40.73945350425846 ], [ -74.01420593261719, 40.75531957477602 ], [ -73.9984130859375, 40.78028146155187 ] ]] } } } } }, ...
  • 25. ... // Organize stuff we want { $project : { tags : 1, info : { name : "$name", lonLat : "$geo.coordinates" }} }, { $unwind : "$tags" }, // Count by tag types { $group : { _id : "$tags", total : { $sum : 1 }, locs : { $push : "$info" } }} ]); // end
  • 26. { "result" : [ { "_id" : "park", "total" : 18, "locs" : [{ "name" : "Hells Kitchen Park", "lonLat" : [ -73.9925, 40.7630556 ] }, ... { "_id" : "bar", "total" : 28, "locs" : [ { "name" : "Landmark Tavern", "lonLat" : [ -73.9963261, 40.7631922 ] }, { "name" : "Pony Bar", "lonLat" : [ -73.994236, 40.761723 ] }, ... ...
  • 27. > db.ny.aggregate([ // Find near Times Square { $geoNear : { near : { type: "Point", // Times Square coordinates: [ -73.98508787155151, 40.75905795418586 ] }, distanceField : "distance", spherical : true, // 2dsphere num : 1000 } }, ...
  • 28. ... // Organize stuff we want { $project : { tags : 1, info : { name : "$name", distance : "$distance", lonLat : "$geo.coordinates" }} }, { $unwind : "$tags" }, // Count by tag types { $group : { _id : "$tags", total : { $sum : 1 }, locs : { $push : "$info" } }} ]); // end ...
  • 29. { "result" : [ { "_id" : "park", "total" : 11, "locs" : [{ "name" : "Ramone Aponte Park", "distance" : 449.7417003854033, // m "lonLat" : [ -73.9894444, 40.7613889 ]}, ... { "_id" : "bar", "total" : 24, "locs" : [{ "name" : "The Lambs Club", "distance" : 275.0270424641914, // m "lonLat" : [ -73.9963261, 40.7631922 ]}, ... ...
  • 30. [ from Jpatokal at wikimedia.org ] https://secure.wikimedia.org/wikipedia/commons/wiki/File:World-airline-routemap-2009.png
  • 31. Future ● Further support for other predicates OGC Simple Features ● GeoJSON composite shapes ● Indexing API to allow similar enhancements for "flat plane" work ● Space open for non-default CRSes