Monday, December 22, 2014

ArcGIS Server, Optimizing Map Services part 2, Registering Data

Melanjutkan postingan yang lalu, sekarang saya akan membahas bagaimana cara meregistrasikan data spasial yang digunakan dalam sebuah Map Service.

Ada dua cara registrasi data spasial agar bisa dikonsumsi dan di-publish dalam bentuk Map Service di ArcGIS Server.

1. Upload Data to the Server

Fitur ini tersedia di ArcGIS Server versi 10 ke atas dan menjadi metode registrasi data secara default untuk ArcGIS Server 10 ke atas. Pada metode ini seluruh data di dalam MXD Project yang akan di-publish sebagai map service diupload ke dalam ArcGIS Server site. Prosesnya bisa dilakukan di ArcMap atau ArcGIS Server Manager. Dari menu file, klik Share As>Service.


Metode ini paling simpel tapi mempunyai beberapa kelemahan. Yang pertama, karena seluruh data dicopy ke Server, kita akan bermasalah dengan kapasitas storage server apabila services yang di-publish jumlah dan volume datanya besar. Selain itu proses upload bisa jadi cukup lama dan menguras bandwith dan memory baik server maupun client (bisa menyebabkan crash pada akhirnya). Data yang di-upload pun menjadi data mati, dalam artian jika kita meng-update data, perubahan tidak akan nampak pada Map Service karena data di server independen dan tidak tersinkronisasi dengan data di luar Server. Metode ini hanya layak digunakan apabila kita menggunakan cloud service untuk meng-hosting ArcGIS Server dimana kita tidak mempunyai pilihan lain selain meng-upload data ke Cloud.

2. Registering Data Sources. 

Metode kedua ini mempunyai pendekatan berbeda dengan metode upload. Daripada data di-upload ke server, akan lebih baik jika ArcGIS Server Site diberi akses ke dalam sebuah folder di dalam sebuah machine/network storage/server. Metode ini memperbaiki kelemahan data yang tidak tersinkronisasi, dimana kita dapat melakukan perubahan/update data di dalam data source (bisa folder, file/personal geodatabase, atau SDE geodatabase) dan perubahan tersebut akan langsung muncul di Map Service. Selain itu Server Site bisa langsung mengakses data ke Data Source sehingga kita tidak perlu khawatir dengan proses upload yang memakan waktu dan menguras memory.

2.1 Registering Folder, Personal/File Geodatabase

Data spasial yang tersimpan di dalam sebuah folder atau file/personal geodatabase dapat diregistrasikan ke dalam sebuah server site sehingga Map Service yang dibuat akan mengakses data ke folder teregister tersebut. Hal penting yang harus dilakukan dalam metode ini adalah lokasi penyimpanan data harus dapat diakses oleh setiap machine/server/storage yang terlibat di dalam server site. Untuk itu, folder tersebut harus di-share kepada Windows Account dari ArcGIS Server site. Setelah di-share, registrasi bisa dilakukan di ArcGIS Server site di menu Site>Data Store>Register Folder. Jangan lupa klik Validate All.



Untuk proses publishing service sama dengan metode upload data dimana data di dalam folder dipanggil di ArcMap, kemudian dilakukan simbolisasi, simpan MXD lalu publish As Service.

2.2  Registering SDE Geodatabase

Registering folder dalam beberapa hal memang cukup efektif untuk berbagai kepentingan publishing Map Services, tetapi metode ini bukan tanpa kelemahan. Yang paling utama, karena proses sharing folder dilakukan di OS account level, maka akses ke data pun masih terbatas karena setiap client yang mengakses harus berada di dalam satu domain/local network agar bisa mengakses data di level OS authentication. Untuk client di level aplikasi webGIS dan jaringan publik/internet tentu tidak bisa mengakses data, karena OS-nya tidak terdaftar di dalam domain/network dari server. Oleh karena itu, untuk kepentingan publishing Map Services yang bersifat publik/internet akan lebih baik jika data yang di-publish disimpan di dalam sebuah SDE geodatabase dalam sebuah DBMS yang diinstal di Server. DBMS yang lazim digunakan antara lain PostgreSQL, Microsoft SQL Server dan Oracle. Dengan menggunakan DBMS maka koneksi dan otontifikasi bisa dilakukan di level Database User yang memungkinkan client di internet dapat mengakses data sesuai dengan privileges-nya. Proses registrasinya sama dengan registrasi folder, hanya yang digunakan adalah register Database.




Wednesday, December 17, 2014

ArcGIS Server, Optimizing Map Services part 1

Map services, baik yang menggunakan ArcGIS server, Geoserver, Map Server, Mapguide, dan lain-lain memerlukan memory dan processing power agar dapat berfungsi sebagaimana peruntukannya. Namun demikian ketersediaan memory (RAM) dan processing power (CPU processor) di Server kita pada umumnya terbatas, sehingga kita perlu memikirkan strategi agar Map Services yang kita publish dapat melayani kebutuhan user secara efektif dan efisien (bahasa sederhananya, tidak lemot).

Untuk penggunaan ArcGIS Server sebagai Map Services engine, ada tiga teknik atau fasilitas yang dapat digunakan untuk mengoptimalisasi ketersediaan Server Resources (RAM dan CPU) dengan goals dari Map Services yang kita bangun sehingga Map Services yang dipublish dapat berfungsi sebagaimana mestinya dan tidak lemot.

1. Pooling

Pooling pada dasarnya adalah pengaturan pembatasan waktu untuk sebuah request dari client ke GIS Server untuk melaksanakan perintah tertentu terhadap Map Services. Request ini akan dilaksanakan oleh GIS Server dalam sebuah "instance". Instance dapat diatur untuk melayani satu koneksi client untuk setiap request/query, atau lebih. Ketika sebuah request masuk ke server, server akan melihat ke instance yang tersedia dan kemudian menempatkan request tersebut ke instance untuk kemudian diproses/eksekusi lalu hasilnya dikirimkan ke client. Setelah request dipenuhi, instance akan kembali berstatus "free" untuk melayani request selanjutnya yang datang. Jika request yang masuk dalam waktu yang bersamaan ada banyak, dan instance yang sedang berjalan masih "busy" memproses sebuah request, server akan menciptakan instance baru guna menampung request tersebut. Permasalahannya adalah apabila request yang masuk jumlahnya bejibun dan dan instance yang ada sudah terpakai semua, maka yang terjadi adalah request itu harus menunggu sampai ada proses di salah satu instance selesai. Hal inilah yang sering kita kenal dengan istilah "LEMOT".

Untuk mencegah kelemotan ini berlanjut dan membahayakan umur hardware server, kita perlu mengatur bagaimana instance memproses request dalam skema "pooling". Instance perlu diatur karena instance berkaitan langsung dengan penggunaan RAM dan CPU di dalam server.

Pooling diatur ketika kita mempublish semua Map Services baru atau meng-edit Map Services Eksisting.


Dalam Konfigurasi pooling, ada dua komponen utama, yaitu jumlah instance per machine dan Service Timeouts.

Instance per machine adalah jumlah minimum dan maksimum instance yang dialokasikan ke sebuah map service. Dalam gambar diatas, minimum instance di set ke 1 dan maksimum instance ke angka 2. Jika kita mempunyai dua server/machine yang bergabung dalam sebuah ArcGIS Server site (clustering configuration), maka instance minimum berarti 2 dan instance maksimum adalah 4 (karena diitung per machine). Aturan untuk pengaturan jumlah instance ini adalah, jika sebuah map services jarang diakses, maka kita cukup berikan angka 0 untuk minimum instance guna menghindari alokasi instance ke Map service yang tidak perlu. Jangan khawatir, Server secara otomatis akan mengalokasikan sebuah instance ke Map service ini apabila nanti ada request ke Map Service. Adapun untuk maksimum instance, apabila request ke Map Service hanya operasi sederhana seperti zoom dan pan, maka setingnya pun tidak usah terlalu banyak, cukup 1 atau 2 instance. Sebagaimana ditulis diawal, satu instance dapat digunakan oleh beberapa client, sehingga untuk request sederhana zoom dan pan, client yang antri tidak akan menunggu lama untuk terbebasnya sebuah instance sehingga cukup aman untuk diberikan satu atau dua instance.

Service Timeouts adalah konfigurasi waktu maksimal sebuah client untuk memperoleh dan menggunakan instance. ada tiga komponen, waktu penggunaan sebuah service, waktu tunggu untuk memperoleh service dan alokasi waktu tunggu sebuah client dalam menggunakan instance. Untuk map service yang digunakan secara sederhana (zoom dan pan) jangan berikan waktu tunggu untuk memperoleh service terlalu lama, cukup 10-15 detik agar instance bisa secepatnya free dan dimanfaatkan request/client yang mengantri. Untuk waktu penggunaan service akan tergantung pada jenis request, kalau request sederhana zoom dan pan berikan waktu yang sedikit, sedangkan untuk request berat berikan waktu lebih lama. Hal ini untuk mengantisipasi agar request tidak dibatalkan oleh server karena melebihi batas waktu timeouts. demikian pula untuk Idle Instance time, bergantung pada jenis request yang dikenakan pada map service,

2. Isolation

Isolation adalah pengaturan bagaimana instance bekerja dalam sebuah proses. Ada dua jenis isolation, Low isolation dan High Isolation. Low isolation berarti dalam satu proses dapat memuat lebih dari satu instance, sedangkan high isolation adalah sebaliknya. Untuk konfigurasi high isolation, kelebihannya adalah kecil kemungkinan terjadinya failure dalam pemenuhan request karena setiap instance diberikan proses yang terpisah, sedangkan untuk low isolation, ketika satu proses bermasalah, seluruh instance yang bernaung dibawah proses tersebut akan mengalami failure dan down. Namun demikian high isolation memerlukan lebih banyak konsumsi RAM karena proses yang terjadi lebih banyak.


Recycling setting mengatur untuk pe-nonaktif-an Map services guna membersihkan memory dan menjamin performa dan stabilitas services. Adapun health settings adalah setingan untuk mengecek koneksi data di Map services ke instance untuk memastikan mereka masih terkoneksi.

3. Caching

Caching adalah proses pembuatan gambar peta temporer yang disimpan dalam storage server yang dapat diakses oleh client secara berulang. Adanya caching memungkinkan seluruh request peta tidak masuk ke dalam database, sehingga meringankan kinerja database dan client bisa lebih cepat memperoleh informasi yang diminta. Namun demikian, caching mengharuskan adanya ruang ekstra storage untuk menyimpan cache. Selain itu caching juga kurang efektif untuk map services yang datanya sering diupdate karena cache sifatnya tetap dan tidak tersinkronisasi dengan data, sehingga jika ada update, proses caching harus diulang dan biasanya memakan waktu lama dan memberatkan kinerja server.


Pembuatan cache idealnya dilakukan di ArcCatalog (dekstop) daripada di ArcGIS Manager (Browser web) karena biasanya dekstop client lebih powerful dan mampu menangani operasi berat dibanding eksekusi via web client.



Demikian sedikit tips tentang optimalisasi Map Services agar tidak mudah lemot dan bisa memberdayakan secara optimal hardware yang tersedia.

Tuesday, December 9, 2014

Vector Georeferencing / Spatial Adjusment, Consider the transformation method before your head explode!

Georeferencing, sederhananya adalah proses mentransformasikan koordinat lokal (kartesian) ke koordinat bumi (geodetik/kartesian).  Georeferencing bisa dilakukan baik untuk data format raster maupun vektor. Georeferencing raster contohnya antara lain transformasi koordinat peta hasil scan ke peta yang sudah tergeoreferensi. Koreksi geometrik citra satelit (termasuk orthorektifikasi) termasuk juga dalam kategori raster georeferencing. Sedangkan georeferencing vektor kalau di dalam terminologi ArcGIS dikenal dengan istilah "spatial Adjustment".

Orang sering mengatakan vector georeferencing adalah proses georeferencing yang sangat menyakitkan karena seringkali hasilnya malah tidak karuan, peta yang dihasilkan terdeformasi kemana-mana dan tidak persis berimpit dengan data referensi. Well, sebenarnya tidak jika anda memahami karakteristik error dari data yang akan digeoreferensi. Error pada data vektor yang tidak terdefinisi koordinatnya (menggunakan koordinat lokal, atau dari peta dasar yang berbeda) sebenarnya dapat disederhanakan menjadi tiga kategori

1. Perbedaan skala, perbedaan sudut, dan pergeseran posisi tapi dimensi data (aspect ratio) sama
2. Perbedaan skala, perbedaan sudut, dan pergeseran posisi dengan dimensi data berbeda (skew)
3. Perbedaan dimensi ke segala arah.

Nah dengan memahami kesalahan dari data yang anda miliki, anda dapat memilih strategi transformasi yang tepat untuk vector georeferencing sehingga proses transformasi sesuai dengan jenis kesalahan dan hasil yang diperoleh lebih akurat.

Untuk implementasi di ArcGIS, proses vector georeferencing disediakan lima metode transformasi, yaitu affine, similarity, projective, rubber sheet, dan edge snap. Kita bahas empat yang pertama.

1. Similarity Transform

Similarity transform digunakan untuk mentransformasikan data yang mempunyai perbedaan skala, sudut dan posisi, tapi dimensi luas (aspect ratio)-nya sama.

Rumusnya seperti di bawah ini

x’ = Ax + By + Cy’ = -Bx + Ay + F
where
A = s * cos t
B = s * sin t
C = translation in x direction
F = translation in y direction 
and

s = scale change (same in x and y directions)
t = rotation angle, measured counterclockwise from the x-axis

Contoh kasusnya sebagai berikut.

Saya punya dua layer peta yang mempunyai dimensi sama, tapi posisinya tidak berimpit. Layer warna merah adalah data referensi, dan layer warna hijau adalah data yang akan ditransform. Untuk kasus seperti ini kita dapat menggunakan transformasi similarity di dalam spatial adjustment dimana proses transformasi tidak akan mengubah dimensi. 


Selanjutkan kita buat links antara kedua data, untuk similarity transform minimal titik ikat adalah dua. 


Hasilnya seperti di bawah ini. 



2. Affine Transform

Affine transform digunakan untuk mentransformasikan data yang mempunyai perbedaan skala, sudut dan posisi, dan dimensi luas (aspect ratio)-nya berbeda (menceng/skew). 
Rumusnya :
x’ = Ax + By + C
y’ = Dx + Ey + F 
where x and y are coordinates of the input layer and x’ and y’ are the transformed coordinates. A, B, C, D, E, and F are determined by comparing the location of source and destination control points.

Contoh kasusnya sebagai berikut.


Affine transform memerlukan minimal tiga titik ikat. 


Hasilnya seperti di bawah.


3. Projective Transform
Projective transform digunakan untuk data yang memiliki kesalahan/perbedaan dimensi ke segala arah. Kesalahan projective biasanya ditemui di peta hasil interpretasi foto udara yang belum direktifikasi. Misalnya peta kertas transparansi/kalkir hasil interpretasi foto udara cetak belum terkoreksi, yang lalu discan dan didigitasi ulang di dalam GIS. 
Rumusnya seperti di bawah ini
x’ = (Ax + By + C) / (Gx + Hy + 1)
y’ = (Dx + Ey + F) / (Gx + Hy + 1) 
Contoh kasusnya sebagai berikut.
Transformasi ini minimal memerlukan empat titik ikat untuk mengidentifikasi pergeseran di setiap arah.
Hasilnya seperti ini
4. Rubber Sheet
Rubber sheet merupakan transformasi paling menyakitkan dan kalau bisa dihindari karena untuk transformasi ini diasumsikan perbedaan geometri antara data target dan data referensi adalah seperti baju yang belum diseterika. Kusut dan terlipat dimana mana, sehingga memerlukan titik ikat yang banyak dan tersebar merata, Jumlah titik ikat yang tidak proporsional dan tersebar merata mungkin akan menyebabkan hasil transformasi semakin kacau dan tidak karuan, Jadi itulah, sebenarnya asal kita paham karakteristik data yang akan ditransform, proses spatial adjusment seharusnya tidak begitu sulit (setidaknya itu yang saya pahami sebelum menulis postingan ini) Last tip, untuk transformasi data yang jumlah featuresnya banyak, setelah proses adjusting sebaiknya jangan di-save edit, karena load memory di RAM akan menjadi besar dan ArcGIS bisa hang. Sebaiknya setelah ditransform data dicopy dalam kondisi editing mode ke layer lain.

Saturday, November 22, 2014

Importance of Geoid Offset In Orthorectification

Orthorektifikasi melibatkan citra satelit, DEM dan data GPS sebagai titik ikat. Dilihat dari karakteristik elevasinya, DEM biasanya menggunakan tinggi orthometrik, sedangkan GPS dan RPC coefficient dari citra menggunakan tinggi ellipsoid. Proses orthorektifikasi secara langsung tanpa mempertimbangkan perbedaan elevasi antara tinggi ellipsoid dan tinggi orthometrik (geoid) akan mengakibatkan kesalahan dalam orthorektfikasi (walaupun GCP dan DEM-nya akurat/presisi). Contoh perbedaan Orthorektifikasi dengan koreksi geoid dan tanpa koreksi geoid dapat dilihat di gambar di bawah (Orthorektifikasi dilakukan di ENVI 5.1 menggunakan DEM TERRASAR-X Resolusi 8 meter tanpa GCP, verifikasi akurasi kualitatif menggunakan RBI skala 25000).


Citra Orb-View 3 Panchromatic ( 1 meter) Level BASIC ENHANCED (RPC file Attached) 

 Ortho tanpa koreksi Geoid

Ortho dengan koreksi Geoid


Dari gambar diatas dapat dilihat bahwa koreksi geoid akan meningkatkan akurasi hasil orthorektifikasi. Hasil ortho tanpa koreksi geoid masih menunjukkan pergeseran 2-3 piksel. 

Koreksi geoid dapat dilakukan di kebanyakan software GIS dan Remote Sensing. Untuk ArcGIS parameter geoid offset dapat diakses baik di Image Analysis Toolbar Options, Create Ortho Raster tool di ArcToolbox, maupun dari tab symbology (untuk dataset yang mendukung). Contohnya seperti gambar di bawah. 




Sedangkan di software ENVI, Geoid offset dapat diatur dari Parameter Orthorektifikasi,


ArcGIS telah menyediakan sebuah raster dataset undulasi geoid menggunakan model gravitasi EGM1996 di Program files-nya, sehingga kita tidak perlu mencari nilai undulasi geoid dalam melakukan orthorektifikasi, cukup centang saja parameter "geoid" dalam proses ortho. Untuk model gravitasi yang lebih baru seperti EGM2008, kita harus mengkoreksi undulasi geoidnya secara manual. Prosedurnya dapat dilihat di SINI dan di SINI

Untuk ENVI (dan mungkin software penginderaan jauh lain), konsepnya agak sedikit berbeda dengan ArcGIS, dimana undulasi tidak dihitung secara spasial berdasarkan raster EGM96/08 tapi hanya menggunakan perkiraan undulasi (offset). Dalam hal ini undulasi geoid di seluruh liputan citra dianggap sama (sebenarnya kurang applicable untuk wilayah luas). Geoid Offset dapat dicari tahu menggunakan berbagai aplikasi online yang tersedia di internet. Untuk wilayah indonesia, kita dapat menggunakan referensi undulasi dari SRGI2013 yang menggunakan EGM2008 dalam sebuah aplikasi web yang dikembangkan BIG (http://srgi.big.go.id/peta/geoid.jsp). Yang harus anda lakukan hanya menunjuk sebuah titik di peta kemudian lihat angka N yang muncul, itu adalah geoid offsetnya. 


Semoga bermanfaat :D


UPDATE 4/12/2014

Kalkulasi Undulasi dapat dilakukan via software All Trans EGM2008, DOwnload HERE.

Power Of Phyton Scripting In ArcGIS ( Useful Codes)

Some Useful Phyton Codes For Batch Geoprocessing

Batch Clip Geoprocessing Tool

import arcpy
import os

# The workspace environment needs to be set before ListFeatureClasses
# to identify which workspace the list will be based on

arcpy.env.workspace = "c:/data"
out_workspace = "c:/data/results/"
clip_features = "c:/data/testarea/boundary.shp"

# Loop through a list of feature classes in the workspace

for fc in arcpy.ListFeatureClasses():
    # Set the output name to be the same as the input name, and 
    #    locate in the 'out_workspace' workspace
    #
    output = os.path.join(out_workspace, fc)

    # Clip each input feature class in the list
    #
    arcpy.Clip_analysis(fc, clip_features, output, 0.1)


Batch Save Layer In MXD


# import Phyton Geoprocessing Module
import arcpy

# set up MXD location
mxd = arcpy.mapping.MapDocument("E:\PII_Aceh2014\PII_Aceh2014\PETA INFRASTRUKTUR INDONESIA\ALBUM PETA\A3\Kabupaten\ACEHTAMIANG_2014.mxd")

# Listing Layers in MXD

for lyr in arcpy.mapping.ListLayers(mxd):

# Layer Saving

lyr.saveAcopy(lyr.name + ".lyr")



Multiuser Geodatabase Management chapter 2 (Multiuser Geodatabase Editing Behavior)

Editing workflows pada multiuser/SDE geodatabase pada dasarnya ada dua jenis, yaitu NonVersioned dan Versioned editing. Non versioned editing merupakan worflow editing dimana perubahan atas data langsung disimpan di business table/atribut feature class. Workflow ini mirip mekanisme transaksi database pada umumnya. Perubahan pada data menggunakan skema non versioned langsung dapat dilihat oleh semua user yang mempunyai privileges untuk mengakses data tersebut. Sedangkan Versioned editing adalah workflow editing terisolasi, dimana seluruh perubahan yang dilakukan oleh seorang user tidak langsung disimpan ke dalam data, tetapi disimpan dalam sebuah delta table untuk direview sebelum data disimpan ke business table. Selain itu ada juga jenis Versioned editing yang memungkinkan untuk perubahan langsung disimpan di business table/atribut, workflow ini disebut workflow hybrid.

Versioned/Non versioned editing hanya bisa dilakukan di level feature class dan feature dataset yang berisi data vektor (tidak berlaku untuk data raster).

1. Workflow Non Versioned

NonVersioned editing memungkinkan untuk data yang diedit oleh berbagai user langsung disimpan di business table/atribut feature class, dan hasil perubahan langsung dapat dilihat oleh user lain baik sebelum dilakukan maupun sesudah dilakukan commit/save edit.

dalam keterkaitannya dengan DBMS yang dipakai, ada sedikit perbedaan dalam cara penampilan data di skema NonVersioned. Untuk DBMS Microsoft SQL Server metode yang dipakai adalah "read uncomitted", artinya segala perubahan terhadap data langsung dapat dilihat oleh user lain, walaupun perubahan belum disimpan/save edit/commit. Sedangkan untuk Oracle, PostgreSQL, informix, DB2, metode yang dipakai adalah "read comitted", artinya segala perubahan terhadap data tidak bisa langsung dilihat oleh user lain sampai si editor melakukan commit/save edit/stop editing.

Dalam skema NonVersioned, seorang user tidak dapat meng-edit feature yang sedang diedit oleh user lain (locked), user kedua akan menunggu (ditunjukkan dengan ikon hourglass di pointer ArcMap) sampai editor pertama menyelesaikan editingnya (save edit). Workflow seperti ini akan menyebabkan rawan konflik terhadap data. Contoh misalnya dalam waktu yang hampir bersamaan, seorang editor A memindahkan data titik bandara dari satu tempat ke tempat lain, dan editor B memindahkan lokasi bandara tersebut ke titik yang berbeda dari editor A. Karena editor A telah memulai editing lebih dulu dari B, maka B akan menunggu A menyelesaikan editing baru si B bisa menyimpan hasil editannya. Karena si B memindahkan lokasi bandara ke posisi yang berbeda dengan si A, maka hasil editan A akan di "overwrite" editan B sehingga A akan melihat posisi editannya berubah ke posisi editan B. Ini adalah sisi jelek dari Non Versioned, karena editing ada kemungkinan menjadi konflik dan tidak beraturan/tidak terkontrol. Strategi untuk mencegah hal tersebut diantara dengan cara pembagian area kerja.

Prosedur Editing Non Versioned sebagai berikut :

1. Dari Editor Toolbar, klik Options, Buka Versioning Tab, Uncheck Versioned editing check box seperti gambar di bawah. Checkbox automatically save changes after each edit ditujukan untuk mengatur apakah setelah diedit data langsung disimpan ke dalam database atau tidak.


2. Start Editing


2. Workflow Versioned. 

Workflow versioned berbeda dengan Non Versioned, dimana pada workflow versioned, setiap user yang meng-edit data diharuskan mengatur dan membuat "version" untuk hasil editannya, yang kemudian version-version tersebut akan di-review oleh database administrator (akun sde) sebelum perubahannya disetujui dan dimasukkan ke dalam business table/atribut feature class. Untuk memungkinkan editing dalam mode versioned, editing toolbar di ArcMap harus diatur kembali ke mude default dengan cara mengaktifkan kembali (check) pilihan "Edit a version of the database with ability to redo and undo".

Untuk me-register sebuah feature class/feature dataset agar bisa dilakukan editing mode versioned, tahapannya adalah sebagai berikut.

1. Dari catalog window atau arccatalog, klik kanan feature dataset/class, kemudian pilih manage lalu pilih register as versioned. Pengaturan register as versioned hanya bisa dilakukan oleh akun "data owner" atau "database administrator".



3. Workflow Hybrid

Workflow versioned hybrid dapat dieksekusi dengan cara ketika register as versioned, centang box "register with the options to move edit to the base"




4. Lebih Jauh Tentang Version

Sejatinya apapun workflow yang dipakai, Editing SDE geodatabase selalu menggunakan sebuah version. Version bisa ditahan untuk dievaluasi sebelum dipublish (versioned) atau langsung dipublish di data spasial langsung (non versioned).  Version merupakan media evaluator terhadap hasil editing. Hasil editing selalu ditampilkan dalam sebuah version. Version DEFAULT merupakan version awal yang digunakan dalam editing data, apapun jenis workflownya. Version DEFAULT nanti diturunkan menjadi version turunan dan workflow versioned. Setiap editor memiliki satu Version. Version DEFAULT dimiliki dan hanya dapat diubah oleh Database Administrator (akun sde/dbo).

Contoh Tabel Version



name = nama version
owner = pemilik version
version_id = unique number assigned to version owner
status = representasi level version
state = seting permission
parent name = nama version induk
parent owner = nama pemilik version induk


Version dibuat dalam skema tree child parent, artinya setiap version turunan pasti mempunyai version induk/asal.

Status version terdiri dari 3 nilai, yaitu 0 (private version), 1 (public version) dan 2 (protected version). Private version merupakan version awal yang hanya bisa diakses oleh geodatabase administrator. Public version merupakan version yang bisa diakses dan diedit oleh semua user yang mempunyai privileges. Protected version merupakan version yang dapat dilihat oleh semua user yang mempunyai privileges, tetapi hanya bisa diedit oleh pemilik version.

Bentuk child parent tree dari version direpresentasikan oleh kolom parent owner dan parent ID, dimana setiap version pasti mempunyai parent version dan parent ID.

Skenario Version based Editing ada 3 Jenis

1. All editors directly edit the DEFAULT version
di skenario ini seluruh editor dapat mengedit version DEFAULT pada waktu yang sama. Setelah disimpan seluruh user akan dapat melihat secara langsung hasil perubahan. skenario ini rawan locks dan conflict editing karena ada perlombaan editing (siapa cepat dia dapat, tapi siapa menyimpan belakangan dia menang)

2. Editors edit in separate version from DEFAULT version.
Skenario ini memungkinkan setiap editor untuk mempunyai version masing-masing dalam proses editing. Seluruh version yang dihasilkan akan direview oleh database administrator untuk kemudian ditentukan mana yang akan disimpan di business table. skenario ini tidak rawan locks dan conflict. DEFAULT version juga aman dari intentional change.

3. Add a Surrogate of Default as QA Tier
Skenario ini memasukkan sebuah version Quality Assurance di bawah DEFAULT Version. Skenario ini merupakan win win solution atau hybrid dari skenario 1 dan 2, dimana skenario ini memungkinkan seluruh user meng-edit version yang sama, tetapi DEFAULT version tetap aman dari perubahan yang rawan kesalahan. Hasil dari QA version dimasukkan ke DEFAULT version setelah dilakukan conflict management.

Untuk melihat sebuah koneksi DBMS sudah mempunyai version apa belum dapat dilihat di Geodatabase Connection Properties.


Dalam kondisi seperti gambar di atas, jika anda langsung melakukan editing data, berarti anda menggunakan skenario 1.

Untuk menjalankan skenario 1 dan 2, anda harus membuat version baru.

1. Right click nama koneksi, pilih Administration > Administer Geodatabase. Contoh hasil seperti gambar di bawah.


Di atas dapat dilihat baru ada satu version, yaitu DEFAULT. Anda dapat mengubah instance default version ke protected agar DEFAULT tidak diubah secara serampangan.

Version turunan selalu dihasilkan dari Version DEFAULT, Untuk membuat version turunan klik kanan nama version > New Version (setiap user yang dapat mengakses Default version dapat membuat sebuah version baru).


Anda bisa memberi nama, memberi deskripsi, dan status version, apakah public, private atau protected.



Proses Editing Menggunakan Versioning

Editing berbasis versioning dalam sesi editing ArcMap dapat dilakukan menggunakan dua cara

1. Tab List By Source di Table Of Content ArcMap. Disini version yang digunakan pertama kali adalah version DEFAULT sesuai dengan setingan Geodatabase. Kita bisa mengganti ke version lain dengan cara Right Click Version > Change Version.




2. Menggunakan Versioning Toolbar, Versioning toolbar memberikan tool untuk mengatur versioning, mulai dari membuat, mengganti, menghapus, dan memindahkan version


Saturday, November 15, 2014

Multiuser Geodatabase Management, Theoretical Practices, ( only for Advanced ArcGIS user, :p )

Manajemen multiuser geodatabase dalam sebuah sistem pekerjaan yang melibatkan data geospasial di lebih dari satu pengguna idealnya mengikuti workflow seperti gambar di bawah.

Sumber gambar : ESRI



1. Create 

Pembuatan geodabatase dalam lingkungan multiuser idealnya menggunakan SDE Geodatabase (bukan file atau personal geodatabase). Hal ini dikarenakan SDE geodatabase sudah mendukung akses dari lebih dari satu pengguna. SDE geodatabase tidak menggunakan format penyimpanan seperti file atau personal geodatabase tapi menggunakan RDBMS (relational database management system). Adanya RDBMS memungkinkan untuk dilakukan manajemen akses dan pengelolaan data, seperti misalnya siapa saja yang bisa mengakses data, bagaimana strategi pengamanan basis data, bagaimana metode input dan updating data, dll. DBMS yang sudah mendukung geodatabase antara lain Oracle, Microsoft SQL Server, Postgre SQL, dan ALTIBASE. 

Hal penting yang harus dipertimbangkan dalam tahap ini antara lain
- Pemilihan DBMS (komersial vs Open Source, Storage capacity, Database Features, Tablespace and multigeodatabase support, jumlah pengguna per instance, security)
- Dukungan client (desktop based ? web based ? )

Tahapan dalam proses Create antara lain
1. Instalasi ArcGIS dan DBMS
2. Koneksi ArcGIS sebagai Database Owner ke DBMS
3. Pembuatan Enterprise/SDE geodatabase di DBMS menggunakan ArcToolbox (create Enterprise Geodatabase Tool)

2. Connect 

Koneksi database ditujukan untuk berbagai tujuan, antara lain administrasi database dan penyimpanan/manipulasi data, Koneksi ke database bisa dilakukan menggunakan dua cara.

1. Direct Connection, Cara ini merupakan cara koneksi langsung ke server, dimana proses-proses yang dilakukan terhadap database dilakukan di client (arcMap, ArcCatalog). Direct Connection ideal untuk client yang kemampuan hardware-nya mendukung pengelolaan database (large size and high speed processor/Memory).
2. Application Server Connection, koneksi tidak langsung ke server. Proses-proses dilakukan di Server. Ideal untuk client yang kemampuan hardware-nya terbatas. Application server connection menimbulkan berbagai proses tambahan di server sehingga memerlukan server dengan hardware mumpuni. Untuk itu, manajemen database oleh database administrator menggunakan application server connection idealnya tidak dilakukan pada waktu - waktu database banyak digunakan. 

Identifikasi perbedaan direct dan application connection dapat dilihat di kolom Instance ketika melakukan koneksi dari client (arccatalog/arcmap). Jika kita memasukkan port number di instance berarti itu application server connection, sedangkan jika kita hanya memasukkan domain berarti itu direct connection. 

Tahap koneksi juga perlu mempertimbangkan instalasi library tambahan (dll files) yang harus dimasukkan ke lokasi instalasi software baik disisi client maupun server (DBMS). Antara lain file seperti ST_Geometry.dll untuk PostgreSQL dan SQL Server. 

3. Load Data

Tahap ini merupakan tahapan input data ke dalam geodatabase dan dilakukan oleh geodatabase administrator atau user/role yang ditunjuk untuk itu. 

Pengelola geodatabase dapat dibagi menjadi 4
1. database admin (akun sys, sa, postgres)
2. geodatabase admin user (akun sde)
3. data owner
4. data user

Data owner (akun pemilik data yang diupload ke geodatabase ) bertanggung jawab untuk 1. Mengelola permissions, 2. mengelola fields, 3. mengelola indeks, dan 4. mengelola version. Penting untuk dipertimbangkan bahwa akun data owner idealnya merupakan headless account (akun yang tidak hanya dimiliki oleh satu orang, sehingga manajemen database tidak menyulitkan apabila si orang tersebut berhalangan). Koneksi database sendiri dapat dilakukan melalui dua cara, Operation system authorization dan Database Authorization, OS authorization menggunakan akun windows untuk koneksi, sedangkan database auth diatur di DBMS atau client software (PgAdmin, SQL Server Management Studio, ArcGIS). OS auth lebih secure sedangkan Database auth lebih praktis. Headless Account idealnya menggunakan Database Authorization. 

Tahapan Pembuatan Akun Data Owner di ArcGIS
1. Buka Tool Create Database User (ArcToolBox)
2. Masukkan parameter koneksi, nama user dan password (OS or Database Auth), dan role (apabila sudah diseting)

Loading data bisa dilakukan melalui 4 cara (ArcGIS)
1. Conversion Tools (multi format melalui import export tool)
2. Simple Data Loader (Load data ke eksisting dataset, khusus untuk geodatabase/shapefile/CAD/Coverage/XML Schema with or without data)
3. Object Loader (copy paster feature melalui sesi editing di ArcMap)
4. Append Tool di ArcToolbox (Mirip simple data loader, kelebihannya bisa diintegrasikan dengan data exsisting yang sudah ada di featureclass/table)

Best Practices untuk loading/unloading data adalah dengan cara mengintegrasikan fitur Truncate Table dan Append Tool (melalui model builder atau phyton script atau manual) daripada delete data. Kelebihannya adalah konten dari feature class akan dihapus tanpa menghapus feature class itu sendiri sehingga tidak perlu mengatur ulang hak akses data untuk feature class yang bersangkutan. 

Load data secara otomatis bisa dilakukan menggunakan tiga cara, Batch execution, model builder, atau phyon script. Phyton script dan model builder lebih preferable karena tidak perlu mengatur file input dan output seperti dalam batch execution (digantikan fungsi "listing" dan "iterate/loop"). 

Storage hasil load data juga dapat dikelola melalui fitur configuration Keyword dan DBTUNE (Explained later, there are some stuffs that I still dont understand)

Migrasi data dari Older version geodatabase prior to 10.1 to 10.1 and later geodatabase. (explained later because I am using PostgreSQL and these topics mainly about SQL Server)


4. Permissions

Tahap ini mengatur bagaimana konfigurasi hak akses bagi pengguna basis data. Di bawah Data Owner, terdapat Data User sebagai pengguna geodatabase. Tanggungjawabnya adalah
1. Melihat peta dan data
2. Membuat peta
3. Melakukan analisis
4. membuat dan mengelola data spasial

Data user dibagi dua, pembaca peta (read access) dan editor data (read/write access). Sebagaimana Data Owner, data user dapat mengakses database melalui OS auth atau database auth. 

Kumpulan data user dengan tugas sama dapat digabungkan dalam sebuah Role, sehingga lebih mudah dalam mengatur permissions. Pemasukan dan pengeluaran user ke dalam role melalui protokol "Grant dan "Revoke"

Creating Role di ArcToolbox menggunakan Create Role Tool. (parameter yang diatur antara lain connection, nama role baru atau role eksisting yang mau diedit, Grant or Revoke, nama user yang masuk atau keluar) 

Creating User di ArcToolbox menggunakan Create Database User tool (keikutsertaan dalam role juga dapat diatur disini)

Privileges digunakan untuk mengatur hak akses user terhadap sebuah dataset/feature class. Privileges diatur di right click Dataset>Manage>Privileges. kemudian Add User, lalu set privileges-nya, privileges meliputi hak untuk melakukan SELECT (Read), INSERT (write), UPDATE (write) dan DELETE (write). 

Jika sebuah peta dari SDE Geodatabase dalam sebuah MXD atau Connection file di-share (dalam bentuk Map Packages atau consolidation Folder) maka pasword dan akun akan otomatis tersimpan di dalam MXD tersebut, sehingga orang lain dapat mengakses data tanpa harus mengetahui akun dan password dari data user/owner. Untuk mencegah ini, ketika koneksi dilakukan, kolom save password harus diuncheck, atau koneksi dilakukan menggunakan OS auth. 


5. Performance

Proses penyimpanan, pemanggilan data, editing, manipulasi dan query data dalam ukuran besar akan membebani server. Tahap performance mengatur agar kita bisa mengelola data se efektif dan se efisien mungkin.

Khusus untuk aspek query dan storage, kita dapat mengurangi beban server dengan membuat database view dan query layer. 

Keberadaan database view dan query layer berangkat dari pemahaman bahwa untuk data dengan tabel atribut yang kemungkinan berukuran besar (seperti data sensus) idealnya dipisah antara data spasial dan tabel atribut. Proses join nanti dilakukan melalui pembuatan database view (disimpan di server/database) atau query layer (disimpan di client). Keluaran database view dan query layer sama, yaitu berupa feature class yang terdiri dari data spasial dan atribut (sama ketika kita melakukan join tabel untuk data shapefil/personal/file geodatabase). 

Pembuatan Database View 
1. dari Connected geodatabase, right click>New>View. 
2. Masukkan nama View dan View Definition
3. View Definition merupakan serangkaian SQL syntax untuk memanggil data spasial dan atribut dari berbagai tabel yang diinginkan. Contohnya seperti di bawah ini.


 SELECT VotingPrecincts.OBJECTID,
 VotingPrecincts.PRECINCTID,
 VotingPrecincts.NAME,
 VotingPrecincts.COUNTY,
 VotingPrecincts.Township,
 VotingPrecincts.SHAPE,
 USSenateResults.WinningParty,
 USSenateResults.TotalBallots,
 USSenateResults.Candidate1,
 USSenateResults.Party1,
 USSenateResults.NumVotes1,
 USSenateResults.PercentVote1,
 USSenateResults.Candidate2,
 USSenateResults.Party2,
 USSenateResults.NumVotes2,
 USSenateResults.PercentVote2,
 USSenateResults.Candidate3,
 USSenateResults.Party3,
 USSenateResults.NumVotes3,
 USSenateResults.PercentVote3,
 USSenateResults.Candidate4,
 USSenateResults.Party4,
 USSenateResults.NumVotes4,
 USSenateResults.PercentVote4,
 USSenateResults.Candidate5,
 USSenateResults.Party5,
 USSenateResults.NumVotes5,
 USSenateResults.PercentVote5,
 USSenateResults.Candidate6,
 USSenateResults.Party6,
 USSenateResults.NumVotes6,
 USSenateResults.PercentVote6
FROM VotingPrecincts
LEFT JOIN USSenateResults
ON VotingPrecincts.NAME = USSenateResults.NAME

VotingPrecincts merupakan feature class dari Batas Admin, dan USSenateResults merupakan tabel hasil pemilu.

Database View dapat diakses oleh Baik Data Owner maupun Data User, untuk Data User hanya dapat mengakses atribut yang dimasukkan ke ViewDefinition, Data Owner dapat mengakses seluruh atribut yang di-join di dalam View.

Pembuatan Query Layer
1. Dari ArcMap klik Menu File>Add Data>Add Query Layer.
2. Masukkan nama koneksi, nama query layer yang diinginkan, masukkan SQL Query Statement. Jangan lupa validate agar tidak ada error.
3. Bentuk SQL Statement untuk query layer agak berbeda dengan database view, dimana selain nama field dan nama feature class, harus dimasukkan juga nama database dan nama data owner di dalam statement. Contoh seperti ini

 SELECT test.juki_user.CENSUSBLOCK.OBJECTID,
 test.juki_user.CENSUSBLOCK.STCOFIPS,
 test.juki_user.CENSUSBLOCK.TRACT,
 test.juki_user.CENSUSBLOCK.STFID,
 test.juki_user.CENSUSBLOCK.BLOCK,
 test.juki_user.CENSUSBLOCK.Shape,
 test.juki_user.CENSUSBLOCKSSTATS.TOTPOP,
 test.juki_user.CENSUSBLOCKSSTATS.POPDENS
FROM test.juki_user.CENSUSBLOCK
LEFT JOIN test.juki_user.CENSUSBLOCKSSTATS
ON test.juki_user.CENSUSBLOCK.STFID = test.juki_user.CENSUSBLOCKSSTATS.STFID

"test" adalah nama database, "juki_owner" adalah nama data owner, CenSUSBLOCK adalah data spasial blok sensus, dan CENSUSBLOCKSSTATS adalah tabel atribut hasil sensus.

Selain View, Indexing dan statistics scheduled calculation juga diperlukan agar dalam proses query lebih optimal. Indexing dilakukan pada field yang sering digunakan sebagai dasar untuk melakukan query.

Tahapan Indexing.dan Update Statistics
1. Dari Layer Properties>Indexes>Add
2. Beri nama index dan masukkan field yang akan menjadi index. Klik OK
3. Proses Update index dapat dilakukan menggunakan Rebuild Indexes Tool di ArcToolbox
4. Update Statistics dapat dilakukan di RightClick Dataset>Analyze.

Proses Rebuild Index dan Update Statistics dapat diatur berkala (Scheduled) menggunakan Phyton Script dan Fitur Scheduled Tasks Windows.

Script Phyton-nya seperti di bawah ini dan dapat dijalankan secara berkala (via Phyton window ArcGIS, PhytonWIN, atau Phyon IDLE).

# Name: GDBMaintenance.py
# Description: Rebuilds indexes and statistics 
# on geodatabase feature classes
# using an existing .sde file.

# Author: Esri

# Import system modules
import arcpy, os
import sys, traceback

# set the workspace environment
arcpy.env.workspace = r"C:\Users\Lenovo\AppData\Roaming\Esri\Desktop10.3\ArcCatalog\Postgres_SuperUser.sde"

#Gather all the FeatureClasses and Tables from the Workspace
datasets = arcpy.ListTables() + arcpy.ListFeatureClasses()

#Save geodatabase path to use for concatonating feature dataset names
path = arcpy.env.workspace

#Determine if any were found
for fd in arcpy.arcpy.ListDatasets("","Feature"):
    arcpy.env.workspace = path + "\\" + fd
    #Gather the FeatureClasses from the Current Dataset
    datasets += arcpy.ListFeatureClasses()

arcpy.env.workspace = path

#Rebuild and analyze all datasets
arcpy.RebuildIndexes_management(arcpy.env.workspace,"NO_SYSTEM",datasets,"ALL")
arcpy.AnalyzeDatasets_management(arcpy.env.workspace,"NO_SYSTEM",datasets,"ANALYZE_BASE","ANALYZE_DELTA","ANALYZE_ARCHIVE") 

print "Processing complete"

Untuk Mode Scheduled langkahnya sebagai berikut
1. Run Scheduled Task Windows
2. Menu Action>Create Basic Task
3. Beri nama Task, klik Next
4. Pilih Task misalnya Weekly, kemudian masukkan tanggal mulai dan recur time. klik Next
5. Pilih Start A Program , Next, Browse ke Phyton Script diatas. Jangan tambahkan argument lain. Finish.


5. Management

Ketika geodabase mulai dimanfaatkan dan user mulai mengisi dan mengelola data, adalah penting untuk mengatur agar tidak terjadi konflik ketika data diedit secara bersamaan. Untuk itu ada fitur "Locks" . Locks terjadi untuk SDE geodatabase yang disetting agar bisa digunakan dalam kondisi "Unversioned". Lock ada dua jenis, Feature Lock dan Schema Lock. Feature lock terjadi ketika ada dua user mencoba meng-edit feature yang sama pada waktu yang sama. Feature Lock pada user kedua akan tetap berlangsung sampai user pertama melakukan "commit" (save edit atau stop editing). Schema Lock terjadi ketika seorang user ingin mengubah struktur tabel (seperti menambah field) dari sebuah dataset yang sedang diedit user lain, dimana user kedua akan mendapat error message yang menyebut bahwa data sedang diedit.

Menghapus lock secara paksa hanya dapat dilakukan oleh Geodatabase administrator (akun sde). Caranya:
1. Dari Nama Koneksi, right click>Administration>Administer Geodatabase
2. View Connections Tab
3. View Locks Tab
4. Identifikasi user yang melakukan locking, kemudian klik kanan nama user tersebut>Disconnect




Note :
Mohon maaf kalau bahasanya mungkin membingungkan, notes ini saya tujukan yang utama untuk saya sendiri sebagai pengingat apa yang sudah saya pelajari. tapi ilmu tidak akan bermanfaat kalau tidak dibagi ke orang lain, oleh karena itu saya share disini. Andaikan ada yang berminat mempelajari dan ada bingung - bingung, silahkan komen, saya akan respon secepatnya. 



Friday, November 14, 2014

Download Data DEM resolusi tinggi dari Portal INA-SDI

Tanpa banyak basa basi, here are the steps

1. Buka ArcMap, kemudian Munculkan window catalog, lihat di bagian bawah di bagian GIS Server. Klik Add ArcGIS Server.


2.  Pilih Use GIS Services, kemudian masukkan URL seperti gambar di bawah.



3. Setelah Connect tampilan akan seperti di bawah, browse Folder DEM, ada beberapa DEM dalam bentuk Image Service yang tersedia. Untuk mendownload, cukup drag and drop layer DEM ke View ArcMap. Download bisa dilakukan dengan cara klik kanan nama layer kemudian klik Export Data.  








4. Last Note, jangan senang dulu, BIG telah membatasi ukuran data yang bisa didownload dalam setiap sesi download, jadi jangan serakah, ambil data seperlunya saja, kalau butuh wilayah yang luas ya harus tekun mengunduh tile per tile. Bersyukur saja karena pemerintah telah mengusahakan data kualitas tinggi secara gratis. 

Friday, November 7, 2014

Power Of Phyton Scripting In ArcGIS (Example 2, Phyton As Batch Geoprocessor)

Pekerjaan GIS sebagian besar adalah pekerjaan berulang. Dalam artian, prosesnya selalu berkisar di dalam kerangka sistem (input - proses - output). Pekerjaan perulangan ini sering memakan waktu yang tidak sedikit, terlebih jika melibatkan data dalam jumlah banyak. Oleh karena itu cara - cara untuk mempersingkat pemrosesan selalu dicari oleh banyak pengguna GIS. Alhasil di dalam sebuah software GIS fungsi "batch processing" atau pemrosesan banyak data dalam sekali eksekusi merupakan hal yang esensial. Di dalam ArcGIS, fungsi batch dapat dilakukan setidaknya melalui empat cara. Pertama, batch grid geoprocessor yang dieksekusi dari ArcToolbox, kedua, Model Builder, ketiga, ArcObject Scripting, dan keempat Phyton Scripting.

Dari aspek efisiensi kerja, scripting (ArcObject maupun Phyton) jelas lebih efisien daripada Batching toolbox dan pembuatan model. Alasannya, yang pertama reusable (batch geoprocessor nature-nya tidak reusable, kecuali anda menyimpan log geoprocessing untuk digunakan di session berikutnya). Yang kedua, pembuatannya relatif cepat (model builder, biarpun hanya menggambar model, terkadang memakan waktu dan proses looping/iterasi-nya tidak praktis, untuk melakukan fungsi tertentu perlu dua atau lebih model terpisah,  batch grid geoprocessor pun demikian, harus menyusun tabel, memasukkan input satu demi satu, menentukan output satu demi satu, dll).

Scripting jelas lebih baik karena ada fungsi pemanggilan data di level workspace (folder atau feature dataset) dan tahapan proses bisa dirangkai dalam satu kode (bahkan tanpa harus mengatur scratch workspace seperti di model builder). Saya akan contohkan penggunaan phyton sebagai batch geoprocessor yang simple tapi powerful.

Contoh 1.  Clipping Raster In A Workspace 

Baris kodenya sebagai berikut:


 import arcpy  
 arcpy.env.workspace = "C:/Tutorial/Phyton"  
 desc = arcpy.Describe ("C:/Tutorial/Phyton/Elevasi.tif")  
 rasExtent = desc.extent  
 rasList = arcpy.listRasters()  
 for name in rasList: arcpy.Clip_management(name, str(rasExtent), name + '_potong')  


- baris pertama merupakan kode awal yang berfungsi memanggil module geoprocessing arcgis di phyon
- baris kedua merupakan kode pengaturan direktori kerja dimana data yang akan diproses disimpan
- baris ketiga adalah perintah mendeskripsikan karakteristik dari data tertentu (seperti kita melihat tab source di layer properties)
- baris keempat adalah sebuah variable dengan nama rasExtent yang berisi perintah mengambil informasi extent dari data di path baris ketiga
- baris kelima adalah sebuah variable dengan nama rasList yang berisi perintah untuk memanggil semua data raster di workspace (melalui perintah listrasters)
- baris keenam adalah perintah iterasi/looping/batch processing melalui tag "for" dan "in" untuk memotong data raster di workspace (perintah Clip.management) sesuai dengan variable rasExtent. Syntax"name" merupakan wildcard untuk nama seluruh file di dalam workspace. Syntax"name+'_potong' " merupakan syntax penamaan hasil output proses yang mana nama output ditambahi "_potong" di belakangnya.

Contoh 2. Batch Conversion from JSON to Features (shapefile/geodatabase feature class)


 import arcpy  
 import os  
 arcpy.env.workspace = 'C:/Users/Lenovo/Downloads/Programs'  
 list_json = arcpy.ListFiles()  
 for name in list_json:arcpy.JSONToFeatures_conversion(name, (name+'_convert'))  

- baris pertama dan kedua adalah kode pemanggil module arcgis phyton
- baris ketiga adalah pengaturan direktori data
- baris keempat adalah perintah pemanggila file JSON melalui parameter ListFiles
- baris kelima adalah perintah iterasi/loop untuk mengkonversi seluruh data di workspace ke features, dengan syntax"name" sebagai wildcard.


Dari dua contoh diatas, apa yang bisa kita simpulkan?

Ya, Batch geoprocessing umumnya hanya ada tiga proses, pertama dimana lokasi kumpulan data yang akan diproses, kedua, perintah pemanggilan/listing, dan ketiga perintah iterasi proses/loop melalui parameter "for" dan "in". Parameter "name" merupakan wildcard yang dipakai di dua contoh diatas untuk mewakili nama file.

Jadi simpel bukan? anda bisa coba dan kembangkan kodenya untuk tasks batch geoprocessing yang lain, :D


Useful Links

1. Phyton for ArcGIS (http://resources.arcgis.com/en/help/main/10.2/index.html#/What_is_Python/002z00000001000000/)
2. Tentang listing dataset (http://resources.arcgis.com/en/help/main/10.2/index.html#/ListDatasets/03q30000001z000000/
3)
3. Tentang Phyton geoprocessing syntax (http://resources.arcgis.com/en/help/main/10.2/index.html#/What_is_ArcPy/000v000000v7000000/)

Wednesday, November 5, 2014

Extracting Original Data from ArcGIS Server REST Dynamic Map Services Using Quantum GIS

Para pengguna ArcGIS Server tentu sudah sangat paham dengan yang namanya REST Map Services. REST (representation state transfer) Map services merupakan format distribusi data spasial via Web yang digunakan ESRI untuk mendukung diseminasi data spasial via web. Map services menggunakan REST protocol dapat digenerate dan dihosting menggunakan perangkat lunak ArcGIS server. Bentuk umum REST mirip dengan OGC WMS, dimana client akan me-request data spasial kepada server yang akan di-return oleh server dalam bentuk gambar peta dan beberapa atribut yang diperlukan. Layanan REST dapat diakses dengan memasukkan URL tertentu disertai serangkaian tag query untuk memanggil data. Katalog REST URL dapat diakses dari REST Service directory. Contoh REST Service directory yang dapat diakses publik milik Kementerian/Lembaga/Instansi antara lain :

1. Kementerian PU
2. BIG
3. INA-SDI
4. BNPB
5. Kementerian Pertanian
6. Kementerian Kehutanan
7. Kementerian Perhubungan,,
8. dan masih banyak lagi instansi pemerintah yang sudah membangun layanan data spasialnya (link cari sendiri yah).

Satu hal yang membedakan REST dan WMS adalah, REST mendukung beberapa jenis output, selain output image, REST juga mendukung output KMZ, JSON dan AMF. Sebelum postingan ini dibuat, saya termasuk orang yang meyakini bahwa output REST secara umum hanya images, sehingga kita tidak dapat mengakses data asli dari peta tersebut (kecuali ada fasilitas feature access dan geodata services dari si penyedia layanan). Tapi begitu saya menyadari ada format KMZ dan JSON sebagai salah satu output format default, suddenly the world turned upside down. Yeah in those two formats, we can get the original hosted geospatial data. Format JSON dalam hal ini lebih baik dari KMZ karena JSON mampu menyimpan tabel atribut sesuai data asli (tidak seperti KML/KMZ yang data atributnya dikonversi menjadi HTML page).

Untuk contoh saya menggunakan Quantum GIS 2.6 Brighton yang sudah mendukung pemanggilan protokol Javascript Object Notation (JSON) agar hasil request bisa diparsing langsung sebagai data spasial. Selain itu, query dari REST directory langsung juga bisa. Here are the steps :

1. Get REST data URL from REST Services Directory, misal saya ambil dari layanan berikut : http://geodata.epa.gov/arcgis/rest/services/OAR/USEPA_NEI_2005/MapServer/

2. Open QGIS 2.6

3. Add Vector Layer, pilih Protocol Mode, kemudian masukkan URL di step 1 dan ditambah baris kode berikut :

http://geodata.epa.gov/arcgis/rest/services/OAR/USEPA_NEI_2005/MapServer/1/query?where=objectid+%3D+objectid&outfields=*&f=json 



4. QGIS will load and extract the desired data (with attributes too)


5. Save as Shapefile or any format you desire




KNOWN LIMITATION


Query dari REST services umumnya dibatasi sampai 999 records per query Sehingga kalau data yang diekstrak recordsnya lebih dari 1000 maka anda harus melakukan iterasi atau query berulang menggunakan OBJECTID sebagai filter, sampai seluruh data selesai di-download. agak rempong sih memang, tapi bersyukur sajalah wahai fakir data. 


Semoga bermanfaat :D

UPDATE!!!!!

untuk kelanjutan diskusi tentang known limitation diatas, silahkan lihat link INI


UPDATE 6 NOVEMBER 2014

1. Untuk cara mudah mengekstrak dan mengeksport data dari REST Map Services, A good guy has created a set of phyton code to do the task, grab it HERE .
Cara penggunaannya cukup mudah, buka file exportshp.py menggunakan text editor, kemudian ganti parameter URL ke parameter Map Services yang anda inginkan, kemudian RUN script di Phyton IDLE, PhytonWin atau phyton console yang lain. Unfortunately this method only working for ArcGIS 10.1 and later


2. Collaborating with my friend Marhensa Aditya Hadi, we have created two script to do the downloading and conversion semi automatically (working for ArcGIS server 9 sampai 10.2).

a. The first file is a microsoft excel file (written by Marhensa) that generate download links from map services by 1000 records. Yang harus anda lakukan cukup mengisikan parameter URL dari Map Services di kolom Map Services URL, Layer ID dari layer data yang akan diambil, dan nama Layer output. Links will be generated automatically once you drag down the cell. The File Is HERE. Save the Generated Links into TXT file, and import it into Download Manager Software, let the download manager handle the downloading job.

b. The second file is a phyton script that I write to do the batch conversion from downloaded JSON's to Shapefile. Yang harus anda seting cukup lokasi folder dari file JSON hasil download. Run the script from ArcGIS Phyton Window, IDLE or other Phyton console that support import ArcPy. Sayang konversi JSON ke shapefile hanya bisa dilakukan di ArcGIS versi 10.1 ke atas. The file is HERE. (Script ini akan menampilkan peta hasil konversi secara otomatis di ArcMap jika kode dijalankan di ArcGIS Phyton Window, terkadang proses ini akan memakan memory, untuk mencegahnya, tambahkan baris kode ini "arcpy.env.addOutputsToMap = False" di kode phyton). 

UPDATE 4 JULI 2015

In case JSON Format Messed up or didnt converted correctly, you could use KML/KMZ format instead. But as we all know, KMZ format using html/xml to store data attributes so it could displayed correctly in Web. This is something that we (GIS Users) sometimes doesnt want because we needs it kept stored as attribute table. Conversion between KML to other GIS format is straighforwardly easy. there are numerous softwares and tools that could do that, but most of them couldnt parse the html popup data to attribute table in correct manner. As far I know, only Global Mapper and Safe FME that could do it almost precisely, so just use them and KML if JSON format didnt works

UPDATE 27 Oktober 2015

Just found another similar tool in GITHUB. Just track this link https://github.com/tannerjt/AGStoShapefile and follow the instructions there.

 UPDATE 27 Desember 2015

Found two more tools


1. https://github.com/Schwanksta/python-arcgis-rest-query
2. http://neagis.com/2013/08/19/using-arcgis-com-to-extract-data-from-map-services/

 UPDATE 25 Februari 2016

Found another tool, this tim in a form of geoprocessing toolbox which can you run from ArcGIS Desktop
http://epro.maps.arcgis.com/home/item.html?id=16e5cc64178941839eca62837f168ec9

UPDATE 5 Agustus 2017

Additional Query Syntax for ArcGIS Server 10.4 or later

geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&returnZ=false&returnM=false&returnDistinctValues=false&returnTrueCurves=false&f=pjson

UPDATE 5 Februari 2018

Found another tool, check this GITHUB Repo :
https://gist.github.com/TheBryanMac/da76aea0b736aa3da99a80408f6db42f#file-mapservice2shapefileiterate-py (save it to py file, and run from arcmap phyton windows or your preferred phyton shell/CLI)


another robust tool

https://github.com/openaddresses/pyesridump

install using python 3, pip, and just run the esri2gejson command from CLI

Sunday, November 2, 2014

SDE Geodatabase Archiving

SDE geodatabase mempunyai fitur pengarsipan yang dapat digunakan untuk mengarsipkan dan membackup data dari waktu ke waktu. Here are the steps (testing dilakukan menggunakan DBMS Microsoft SQL server dan PostgreSQL)

1. SDE geodatabase harus dalam kondisi versioned dan Archive enabled (Proses enabling archive hanya dapat dilakukan oleh user yang mempunyai role minimal database administrator)


2. Lakukan multiuser/multiclient editing sampai waktu tertentu (harian, mingguan, bulanan dst)

3. Pada waktu akan dilakukan pengarsipan, lakukan disabling archive (lihat gambar diatas), akan muncul pilihan untuk menghapus delta table/archive feature class atau tidak (lihat gambar di bawah), pilih No, atau No to All. DBMS akan membuat delta table/archive feature class menjadi normal feature class dengan tambahan nama _h, _h1 _h2 dst.




4. Rename data archive tersebut, atau pindahkan ke storage yg aman, Tanggal pengarsipan dapat dilihat di data atribut dari feature class hasil archiving.


5. Enable kembali archiving untuk data asli.



ArcGIS 10.2 dan PostgreSQL

Berikut ini cara koneksi arcgis ke postgreSQL agar kita bisa membuat SDE geodatabase di DBMS PostgreSQL

1. tentu saja install arcgis dan postgreSQL-nya (you can find how to do it somewhere over the internet)

2. Cari ST_geometry.dll di lokasi instalasi arcgis. The default location for ArcGIS for Desktop on 64-bit Windows operating systems is C:\Program Files(x86)\ArcGIS\Desktop<release#>\DatabaseSupport\PostgreSQL\Windows64; on 32-bit Windows operating systems, it is C:\Program Files\ArcGIS\Desktop<release#>\DatabaseSupport\PostgreSQL\Windows64.

3. Copy file tersebut ke Postgre lib directory, contoh : C:\Program Files\PostgreSQL\9.0\lib

4. Agar bisa melakukan koneksi dari client, anda memerlukan beberapa file, untuk O.S windows dan client arcgis desktop, lib yg diperlukan adalah libeay32.dll, libiconv-2.dll, libintl-8.dll, libpq.dll, and ssleay32.dll, sedangkan untuk client arcgis server 64 bit, lib yg dibutuhkan adalah : libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll. Anda bisa download dari link INI

5. paste file di step 4 ke :
  • For ArcGIS for Desktop, paste the 32-bit files into the C:\Program Files (x86)\ArcGIS\Desktop<release#>\bin directory (64-bit operating systems) or C:\Program Files\ArcGIS\Desktop<release#>\bin directory (32-bit operating systems).
  • For ArcGIS for Server, paste the 64-bit files into the C:\Program Files\ArcGIS\Server\bin directory.
6. Untuk melakukan koneksi dan pembuatan geodatabase, look at this post di bagian pembuatan geodatabase.


Good luck and happy testing, if you have any confusion just throw your words in the comments box, I will respond once I read it.