TopoJSON ⚔ GeoJSON
Herkese merhaba 🌐
Bu yazıda iki güçlü web tabanlı coğrafi veri formatı olan GeoJSON ve TopoJSON’a değineceğim.
1.GeoJSON
GeoJSON, 2016 yılında oluşturulan açık kaynaklı popüler bir coğrafi veri formatıdır.
GeoJSON formatı OGC Simple Feature standartları temel alınarak tasarlanmıştır ve noktaları, çizgileri, poligonları bir FeatureCollection içinde ayrı ayrı ögeler olarak depolar. Bu nedenle, örneğin herhangi bir poligon veri kümesinde, iki poligon arasında bir kenar oluşturan her çizgi tekrarlanmış olur ve her öge için ayrı ayrı saklanır.
Birçok haritalama kütüphanesi ve GIS yazılımı tarafından desteklenmektedir. Okunması ve yazılması kolay olan basit, metin tabanlı bir formattır ve farklı veri formatlarına kolayca dönüştürülebilir.
1-TopoJSON
TopoJSON, Web için topolojiyi kodlayan ilk coğrafi veri formatıdır.
Masaüstü CBS yazılımı için topoloji, coverage ve geodatabase dosya formatları ile kodlanır ancak shapefile’larda kodlanmaz. Topolojik veri formatlarının shapefile ve GeoJSON gibi “spagetti model” veri formatlarına göre avantajları :
- Geometri ögelerinin sınırlarının düzenlenmesi ögeler arasında boşluklara veya çakışmalara neden olmaz yani yukarıda GeoJSON için bahsettiğim iki poligon arasındaki çizginin tekrarlanması durumu ortadan kaldırılır dolayısıyla veri bütünlüğü korunabilir.
- Ögeler arasındaki ilişkileri kullanarak mekansal analiz yapmak daha kolaydır.
- Örtüşen köşeler ve kenarlar ortadan kaldırıldığı için dosya boyutu önemli ölçüde azalır.
Bu son madde özellikle Açık Web üzerinde vektör verilerin haritalanmasında Geojson’dan daha kompakt olmasını sağlar. Bant genişlikleri ve işlemciler sürekli olarak gelişirken, veri kümelerinin boyutları da büyümekte ve özellikle mobil ağlarda çok büyük veri kümelerini tarayıcıya yüklemek önemli performans düşüşüne sebebiyet vermektedir.
D3'ün yaratıcısı Mike Bostock tarafından oluşturulan TopoJSON formatı, yinelenen verileri ortadan kaldırır. Tüm köşeleri her öge için koordinat dizileri olarak saklamak yerine, ayrı bir öznitelik dizisi, koordinatların bulunduğu ve “arc” adı verilen bir dizi ve koordinatları EPSG:4326/WGS 84 koordinat referans sistemi içinde jeoreferanslamak için matematiksel bir dönüşüm saklar.
// Example1
// TopoJSON olarak depolanan tek bir poligon
{"type":"Topology",
"arcs":[[[7927,2297],[-56,-11],[-47,-19],[-55,-9],[-86,-5],[-83,4],[-93,-1],[-57,-15],[-57,-40],[-82,-50],[-128,-76],[-44,-56],[-11,-283],[52,-43],[128,-7],[98,-145],[14,-250],[-67,-102],[-144,-124],[-105,-223],[-61,-173],[-60,-135],[-61,-112],[-112,-5],[-73,-1],[-100,-26],[-40,-46],[-14,-45],[-24,-20],[-31,-55],[-63,-59],[-94,-42],[-111,-15],[-160,-34],[-147,-46],[-123,-28],[-57,71],[-38,24],[-118,64],[-101,21],[-99,-53],[-121,17],[-80,-27],[-61,-11],[-93,11],[-125,71],[-51,74],[-37,60],[-74,95],[-71,79],[-24,40],[-32,69],[-9,57],[10,84],[37,50],[23,26],[-8,75],[-57,56],[-23,38],[-5,32],[-38,48],[-56,56],[-6,70],[11,92],[24,37],[17,27],[9,39],[41,50],[59,64],[44,51],[30,71],[11,95],[56,50],[5,36],[75,10],[59,20],[49,19],[29,62],[19,30],[37,29],[76,9],[22,4],[55,66],[53,20],[52,23],[34,37],[45,26],[45,-8],[33,-41],[90,-7],[52,-8],[21,22],[-15,63],[-35,51],[-18,59],[-39,51],[-80,79],[-66,75],[1,32],[8,38],[-3,55],[9,43],[17,23],[27,8],[84,40],[23,93],[12,46],[7,8],[24,21],[33,41],[50,21],[259,236],[512,220],[100,-18],[178,24],[95,30],[76,62],[24,42],[59,50],[28,45],[42,106],[92,45],[109,31],[63,37],[64,62],[60,14],[114,-9],[63,-10],[96,-21],[68,-39],[46,-32],[92,-31],[113,-43],[17,-19],[53,-71],[53,-18],[49,-14],[-25,-129],[-3,-31],[1,-73],[2,-97],[-7,-39],[-27,-67],[-16,-31],[-34,-41],[-73,-81],[-16,-13],[-48,-128],[-38,-107],[-18,-84],[-3,-61],[6,-100],[5,-51],[43,-85],[13,-22],[-3,-30],[-32,-57],[-33,-24]],[[3465,3062],[32,60]],[[3497,3122],[-2,36],[-7,51]],[[3488,3209],[20,38],[12,44],[90,21]],[[3610,3312],[20,17],[98,108],[61,47]],[[3789,3484],[38,48]],[[3827,3532],[159,80]],[[3986,3612],[88,88],[121,109]],[[4195,3809],[189,104],[60,34],[47,37]],[[4491,3984],[24,38],[59,72],[9,50],[85,80]]],
"transform": {
"scale": [0.00010524544003051266, 0.00008940986939097037],
"translate": [28.598315000302623, 36.85135399857647]
}, "objects": {
"dist_4326": {
"type": "GeometryCollection",
"geometries": [{
"arcs": [
[0]
],
"type": "Polygon",
"properties": {
"id": null,
"dis_name": "a1"
}
}]
}
}
}
// Örnek 2
// GeoJSON olarak depolanan Örnek1 ile aynı poligon
{"type":"FeatureCollection",
"features":[
{"type":"Feature",
"properties":{
"id":null,
"dis_name":"a1"},
"geometry":{
"type":"Polygon",
"coordinates":[[[29.432595603424495,37.05672846856753],[29.42670185878279,37.055744960004226],[29.421755323101355,37.0540461724858],[29.415966823899677,37.05324148366128],[29.406915716057053,37.05279443431433],[29.39818034453452,37.05315207379189],[29.38839251861168,37.0530626639225],[29.382393528529942,37.05172151588164],[29.376394538448203,37.048145121105996],[29.367764412365702,37.04367462763645],[29.354292996041796,37.036879477562735],[29.349662196680452,37.03187252487684],[29.348504496840118,37.0065695318392],[29.353977259721702,37.00272490745538],[29.36744867604561,37.00209903836965],[29.3777627291686,36.98913460730795],[29.379236165329026,36.966782139960216],[29.37218472084698,36.957662333282336],[29.35702937748259,36.94657550947785],[29.345978606279385,36.92663710860367],[29.339558634437523,36.91116920119903],[29.333243908035694,36.899098868831246],[29.326823936193833,36.88908496345946],[29.315036446910415,36.88863791411251],[29.307353529788188,36.88854850424311],[29.296828985785137,36.88622384763895],[29.292619168183915,36.88211099364697],[29.291145732023487,36.87808754952437],[29.288619841462754,36.87629935213655],[29.28535723282181,36.87138180932005],[29.278726770099887,36.86610662702598],[29.26883369873702,36.86235141251156],[29.25715145489363,36.86101026447069],[29.24031218448875,36.8579703289114],[29.224841104804266,36.853857474919415],[29.21189591568051,36.85135399857647],[29.205896925598772,36.85770209930323],[29.201897598877615,36.85984793616861],[29.189478636954014,36.865570167809636],[29.17884884751093,36.86744777506684],[29.16842954894791,36.86270905198912],[29.15569485070422,36.86422901976877],[29.14727521550178,36.861814953295216],[29.140855243659917,36.860831444731915],[29.13106741773708,36.861814953295216],[29.117911737733266,36.86816305402197],[29.112544220291706,36.874779384356906],[29.108650139010578,36.880143976520365],[29.10086197644832,36.88863791411251],[29.093389550206155,36.89570129379439],[29.09086365964542,36.89927768857003],[29.087495805564448,36.90544696955801],[29.08654859660417,36.91054333211329],[29.087601051004476,36.91805376114213],[29.091495132285605,36.92252425461168],[29.09391577740631,36.92484891121585],[29.093073813886065,36.93155465142017],[29.087074823804326,36.93656160410607],[29.08465417868362,36.939959179142924],[29.08412795148347,36.94282029496343],[29.08012862476231,36.9471119686942],[29.074234880120603,36.9521189213801],[29.07360340748042,36.95837761223746],[29.074761107320754,36.96660332022143],[29.077286997881487,36.9699114853889],[29.079076170362004,36.972325551862454],[29.08002337932228,36.9758125367687],[29.08433844236353,36.98028303023825],[29.09054792332533,36.98600526187927],[29.095178722686672,36.990565165218214],[29.09833608588759,36.99691326594497],[29.099493785727926,37.00540720353711],[29.105387530369633,37.00987769700666],[29.105913757569787,37.01309645230474],[29.113807165572073,37.01399055099865],[29.120016646533873,37.01577874838647],[29.125173673095368,37.017477535904895],[29.128225790856256,37.02302094780713],[29.130225454216834,37.02570324388886],[29.134119535497963,37.028296130101204],[29.142118188940284,37.02910081892572],[29.144433588620952,37.02945845840328],[29.15022208782263,37.035359509783085],[29.155800096144247,37.03714770717091],[29.161272859025836,37.0392041341669],[29.164851203986874,37.04251229933436],[29.169587248788247,37.04483695593853],[29.17432329358962,37.0441216769834],[29.177796393110626,37.04045587233837],[29.18726848271337,37.03983000325264],[29.19274124559496,37.039114724297505],[29.1949513998356,37.04108174142411],[29.193372718235143,37.04671456319574],[29.189689127834075,37.05127446653468],[29.187794709913526,37.05654964882875],[29.183690137752336,37.061109552167686],[29.175270502549893,37.068172931849574],[29.16832430350788,37.0748786720539],[29.16842954894791,37.07773978787441],[29.169271512468153,37.081137362911264],[29.168955776148064,37.08605490572777],[29.169902985108337,37.08989953011158],[29.171692157588858,37.09195595710757],[29.17453378446968,37.0926712360627],[29.183374401432243,37.09624763083834],[29.185795046552943,37.1045627486917],[29.18705799183331,37.10867560268368],[29.187794709913526,37.10939088163881],[29.19032060047426,37.11126848889602],[29.193793699995265,37.114934293541054],[29.19905597199679,37.11681190079826],[29.226314540964694,37.13791262997453],[29.280200206260314,37.157582801240544],[29.290724750263365,37.155973423591504],[29.3094584385888,37.15811926045689],[29.319456755391695,37.16080155653862],[29.327455408834016,37.16634496844086],[29.329981299394746,37.17010018295528],[29.336190780356546,37.17457067642483],[29.3391376526774,37.17859412054742],[29.343557961158684,37.18807156670287],[29.35324054164149,37.19209501082546],[29.364712294604818,37.19486671677658],[29.37134275732674,37.19817488194405],[29.37807846548869,37.203718293846286],[29.38439319189052,37.20497003201776],[29.396391172054003,37.20416534319324],[29.40302163477592,37.203271244499334],[29.413125197018854,37.20139363724212],[29.420281886940927,37.197906652335874],[29.425123177182332,37.19504553651536],[29.43480575766514,37.19227383056424],[29.446698492388585,37.18842920618043],[29.448487664869106,37.186730418662],[29.454065673190723,37.18038231793524],[29.45964368151234,37.1787729402862],[29.464800708073835,37.17752120211473],[29.462169572073073,37.1659873289633],[29.46185383575298,37.16321562301218],[29.46195908119301,37.15668870254663],[29.462169572073073,37.14801594521571],[29.461432853992857,37.144528960309465],[29.458591227112034,37.13853849906027],[29.456907300071546,37.13576679310915],[29.453328955110507,37.13210098846412],[29.44564603798828,37.12485878904345],[29.443962110947794,37.123696460741364],[29.438910329826328,37.112251997459325],[29.434911003105167,37.10268514143449],[29.433016585184617,37.095174712405644],[29.432700848864528,37.089720710372795],[29.43333232150471,37.0807797234337],[29.433858548704862,37.076219820094764],[29.438384102626173,37.06861998119653],[29.439752293346572,37.06665296406993],[29.43943655702648,37.0639706679882],[29.436068702945505,37.058874305432916],[29.432595603424495,37.05672846856753]]]
}
}
]
}
Örnek1' de görüldüğü gibi , poligon ögesiyle ile ilgili tanımlayıcı veriler ‘“geometries’’ dizisi içindeki bir “Polygon’’ nesnesinde saklanırken, koordinatlar ‘’arcs’’ adında ayrı bir dizide saklanır . Her bir ondalık değerin bilgisayarın belleğinde 8 bitlik bir karakter olarak saklanması gerektiğinden, örnek2 de olduğu gibi float değerler yerine integer saklanması, satır tekrarlarının ortadan kaldırılmasıyla elde edilen azalmaya ek olarak dosya boyutunu daha da küçültür. “transform” coğrafi bir koordinata dönüştürmek için her bir tamsayıya uygulanan matematiksel bir fonksiyondur.
Her bir örneği ayrı bir dosya olarak kaydedecek olursanız, GeoJSON dosyasının boyutunun 6.12 KB , TopoJSON’ ın ise sadece 1.96 KB olduğunu göreceksiniz. Aynı veri kullanıldığı halde aralarındaki böyle bir farkın göz ardı edilemeyecek kadar önemli olduğunu düşünüyorum.
TopoJSON kullanmanın dezavantajı ise büyük masaüstü CBS yazılımları tarafından yeterince desteklenmemesidir, bu da haliyle verileri TopoJSON’a dönüştürmeyi biraz zorlaştırır. Fakat bu sorunu da geojson.io veya MapShaper gibi web uygulamalarını kullanarak kolayca çözebilirsiniz.
Okuduğunuz için teşekkür ederim. Keyifle kalın.🌞