Your SlideShare is downloading. ×
0
MongoDB: Практика
Пишем приложение по поиску POI
POI: Point Of Interest
Источник карты: Open Street Map
http://www.openstreetmap.org/
Исходные данные в формате XML
http://gis-lab.info/projects/osm_dump/
<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6">
<bounds … />
<node … />
<way … />
<relation … />
</osm>
Точка на карте – Node:
<node id="1063860399" version="6" timestamp="2012-11-
17T05:28:04Z" uid="387715" user="pheliks" cha...
PostgreSQL:
PostgreSQL:
db.node.find({_id:1063860399}).pretty()
{
"_id" : NumberLong(1063860399),
"Tags" : [
{
"k" : "amenity",
"v" : "restaurant"...
public class Node : TagsCollection
{
public long Id { get; set; }
[BsonElement("loc")]
public GeoJson2DCoordinates Locatio...
Пример запроса, который выполняется без индекса:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 7,
"nscannedObjec...
db.node.ensureIndex({loc:"2dsphere"})
db.node.find({loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates:
[[[44.6,43.0],[44.7,43.0],[44.7,43.1],[44.6,43.0]]]...
Попробуем найти рестораны:
db.node.find({$and:[{loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates:
[[[44.6,43.0],[44...
Ждите ответа в следующей серии
Продолжение следует
Коллаборативный код с хакатона:
https://github.com/gleblebedev/mongodb-krd-map
Приходите на наши встречи!
http://www.meetup.com/Krasnodar-MongoDB-User-Group
Глеб Лебедев, 2013
gleb@gleblebedev.com
Upcoming SlideShare
Loading in...5
×

MongoDB: Приложение по поиску точек на карте

196

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
196
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "MongoDB: Приложение по поиску точек на карте"

  1. 1. MongoDB: Практика Пишем приложение по поиску POI
  2. 2. POI: Point Of Interest
  3. 3. Источник карты: Open Street Map http://www.openstreetmap.org/
  4. 4. Исходные данные в формате XML http://gis-lab.info/projects/osm_dump/
  5. 5. <?xml version='1.0' encoding='UTF-8'?> <osm version="0.6"> <bounds … /> <node … /> <way … /> <relation … /> </osm>
  6. 6. Точка на карте – Node: <node id="1063860399" version="6" timestamp="2012-11- 17T05:28:04Z" uid="387715" user="pheliks" changeset="13901897" lat="43.0260993" lon="44.6502071"> <tag k="amenity" v="restaurant"/> <tag k="name" v="Троя"/> </node>
  7. 7. PostgreSQL:
  8. 8. PostgreSQL:
  9. 9. db.node.find({_id:1063860399}).pretty() { "_id" : NumberLong(1063860399), "Tags" : [ { "k" : "amenity", "v" : "restaurant" }, { "k" : "name", "v" : "Троя" } ], "loc" : [ 44.6502071, 43.0260993 ], "lat" : 43.0260993, "lon" : 44.6502071 }
  10. 10. public class Node : TagsCollection { public long Id { get; set; } [BsonElement("loc")] public GeoJson2DCoordinates Location { get; set; } [BsonElement("lat")] public double Latitude { get; set; } [BsonElement("lon")] public double Longitude { get; set; } }
  11. 11. Пример запроса, который выполняется без индекса: { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 7, "nscannedObjects" : 146811, "nscanned" : 146811, "nscannedObjectsAllPlans" : 146811, "nscannedAllPlans" : 146811, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 1, "nChunkSkips" : 0, "millis" : 547, "indexBounds" : { }, "server" : "HARVERSTER:27017" }
  12. 12. db.node.ensureIndex({loc:"2dsphere"})
  13. 13. db.node.find({loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates: [[[44.6,43.0],[44.7,43.0],[44.7,43.1],[44.6,43.0]]]}}}}) { "cursor" : "S2Cursor", "isMultiKey" : true, "n" : 14506, "nscannedObjects" : 14506, "nscanned" : 37853, "nscannedObjectsAllPlans" : 14506, "nscannedAllPlans" : 37853, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 241, "indexBounds" : { }, "nscanned" : 37853, "matchTested" : NumberLong(23347), "geoTested" : NumberLong(23347), "cellsInCover" : NumberLong(6), "server" : "HARVERSTER:27017" }
  14. 14. Попробуем найти рестораны: db.node.find({$and:[{loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates: [[[44.6,43.0],[44.7,43.0],[44.7,43.1],[44.6,43.0]]]}}}},{"Tags.v":"restaurant"}]}) { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 7, "nscannedObjects" : 146811,
  15. 15. Ждите ответа в следующей серии Продолжение следует
  16. 16. Коллаборативный код с хакатона: https://github.com/gleblebedev/mongodb-krd-map
  17. 17. Приходите на наши встречи! http://www.meetup.com/Krasnodar-MongoDB-User-Group Глеб Лебедев, 2013 gleb@gleblebedev.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×