Ganapatih

Data processing example in python


In [3]:
from pymongo import Connection
import xml.etree.ElementTree as etree

In [4]:
# read the data (osm/xml)
with open("/home/banteng/ganapatih/kelud.osm") as f:
    data = etree.parse(f)

In [186]:
# mongo start
c = Connection()
db = c["locs"]
#> db.loc.ensureIndex({"pos": "2d"})
#> db.loc.ensureIndex({timestamp: 1})

Contoh Data


In [196]:
# try query the data
db.loc.find_one()


Out[196]:
{u'_id': ObjectId('5300a140dde36857804c1ef7'),
 u'nama': u'Bayu Adi Styawan',
 u'pos': [-7.6056621, 111.9988426],
 u'timestamp': datetime.datetime(2013, 11, 23, 7, 46, 5)}

Validity Check

Mencari Pengguna Terdekat

  1. Mencari pengguna terdekat dengan si pelapor, cek jika benar, tentukan wilayah dalam radius 10km sebagai kawasan bencana

In [259]:
# I. Mencari pengguna terdekat dengan pelapor
from bson.son import SON
[i for i in  db.loc.find({"pos": SON([("$near", [-7.946449, 112.2567981]), ("$maxDistance", 10/111.12)])}).limit(2)][1]


Out[259]:
{u'_id': ObjectId('5300a231dde36857804d3f58'),
 u'nama': u'Supaplex',
 u'pos': [-7.9464874, 112.2568585],
 u'timestamp': datetime.datetime(2014, 2, 15, 13, 34, 31)}

In [233]:
Image(filename="/home/banteng/Desktop/nearest.png")


Out[233]:

Penentuan radius 10km sebagai wilayah bencana

Setelah ditetapkan radius 10km sebagai kawasan bencana, sistem akan mencari pengguna lain dalam radius tersebut, dan apps akan mengirim alert


In [266]:
db.loc.find({"pos": {"$within": {"$center": [[-7.946449, 112.2567981], 10/111.12]}}}).count()


Out[266]:
10696

Terlihat ada 10696 pengguna dalam radius 10km dari si pelapor tadi. Masing-masing selanjutnya akan dikirim alert...

Gambar berikut map plot dari 100 pengguna dalam radius 10km dari si pelapor ...


In [289]:
Image(filename="/home/banteng/Desktop/all_near.png")


Out[289]:

In [ ]: