Land Price Map

There is a transition in land tax in Indonesia from tax department to local district. Land prices in Indonesia called NJOP which mean selling point of tax payer of his/her building. There were many problems with the accuracy of NJOP. The value usually below the real value based on the selling transaction. When NJOP is handled by local government, the situation still the same since the local government human resources is not sufficient.

In order to fix this situation, the government tries to make a relation with MAPPI, the organization of price estimator in Indonesia, to get the near exact value of NJOP. The nominal may be do not accurate for NJOP but for whole region, the comparison value may be more accuracy. For example is land price in Bekasi City.

We have the prediction NJOP for every region in bekasi city. After we create the map, we try to make a presentation about NJOP comparison for every region in sub-district. Right click on the shapefile that we already have and come to Symbology in layer properties.

There are many choices for the quantities, for example graduated colors. After you choose it, you have to select the value. I already have land prices, so I chose it. Click Apply, you will get the land price map below.

Don’t worry, the land price in Bekasi is still low .. but the yellow area near the Bantar Gebang .. final garbage location :).

Global Variable in Matlab

I still learn Matlab code, and always finding some problems related to script creation. This time I want to share about what in Matlab called “global variable”. This kind of variable at the first time did not attractive to me because I did not find the usefulness of it. Now I understand the important of understanding the global variable.

I have created some algorithms such as genetic algorithms for my dissertation. When I try to create the function having many variables, I always been annoyed with an error “undefined variable …” and I revised the code with that variable included. But the declaration seems strange to me, like this.

So, I try to solve that problem by searching in the internet. I found that I have to use global variable that used everytime when some function called the variable. Explanation in web officially from mathworks is here. For everyone who like video in youtube, this problem is explained clearly here. Now I try to fix my function using global variables, and I do not have to delcare many variables in my function.

Let’s we try some simple function. We have to create main function and other function to calculate something from main function. For example we name the main function “energy” that called other function to calculate the internal energy “calc”. Type in the command window >> edit calc to create calc.m function. The message will be opened:

Just click “Yes” because it only informed that calc.m does not exist. But becarefull if the message does not shows to us. It means the name of our function has been used in Matlab, so we have to change to other names.

Now in the same way, create new m-file for main function with the name e.g “main”. Make sure your m-file name is not Matlab built-in functions.

Now try to run the m-file by clicking the run icon (green triangle). There is an error message:

You have to include the variable c in your calc function or you have to declare that variable in your main file as global variable. Add c as our global variable in the main function. Revise your main and calc file to include global variable c:

And try to run again, you have to get the result without error message (don’t forget to save your m-file everytime you edit it). No need to include c in calc variable function anymore 🙂.

  • E =
  • 1.8000e+018
  • ans =
  • 1.8000e+018

NOTE: future of Matlab said that … Ok, I paste the warning:

Warning: The value of local variables may have been changed to match the
globals.  Future versions of MATLAB will require that you
declare
a variable to be global before you use that variable.

So, we have to declare global c first before declare c=300000000;

Raster Analysis to Produce a Larger Extent in Arcgis

If you have a problem like this (picture below when you create a new map, for example distance from specifik line or polygon), you are new in ArcGis 😀 like me.

It’s ok, back to euclidean distance toolbox there are environment button that you have to fill.

You have to fill the processing extent to other map that cover the rectangle of it e.g Bekasi city. Thanks to someone that give the solution in the link here.

Do not stop here, you also have to fill in raster analysis form filling Bekasi city as analysis of mask in order to get the exact match like the result below.

Map Digitalization Using ArcGIS

In the last post we have learned how to create digitalize map from scanned map of open space. Now we are going to try creating a digitalize map of flood zone in bekasi city, Indonesia. Fortunately some blogger has upload the scanned flood zone, such as link here. Many sources for downloading Bekasi city shapefile e.g here. Officially you can buy thematic map on bakosurtanal site.

Of course you should have Bekasi City shapefile that have already been digitized. The bekasi city map can be download here. Start your ArcGIS with new project and open bekasi city shapefile. You have to match the shapefile to flood zone. The pdf file have to be converted first into image. If you do not have the conversion tool to image you can use online version e.g link here.

Add shapefile from menu/icon and chose the image to be matched with the bekasi city region shapefile. Some image may be contain band_1, band_2, and band_3, but others may just one image. You have to activate georeferencing menu toolbar.

Choose at least two point from image that match the shapefile. Arcgis will automatically match the two maps. And now we start to draw the flood region. Use zoom to layer for helping you finding point to match.

I think the map we have just drawn is very important, especially for someone who want to buy or build house in Bekasi city. No one want water in his/her house 😀. I have lived in the location shown below for 2 years and now move to another place, of course without terrible flood.

Menentukan Satu Titik Apakah di Dalam Beberapa Region

Jika pada tulisan yang lalu untuk satu region dengan instruksi inpoly dapat diketahui apakah titik tersebut di dalam atau di luar region, ternyata mengalami error ketika region yang diambil dari shapefile lebih dari satu dengan dibatasi oleh beberapa koordinat kosong “NaN”.

Salah satu fungsi Matlab yang bisa mengatasi masalah ini adalah fungsi inpolygon. Fungsi ini berbeda dengan fungsi inpoly yang hanya satu region dan harus diunduh dulu karena tidak tersedia di Matlab. Pada fungsi bawaan Matlab, Inpolygon, region tidak dinyatakan dalam satu variabel melainkan menjadi dua sumbu yaitu sumbu x yang dinyatakan dengan xv dan sumbu y yang dinyatakan dengan yv, seperti dari sumber tulisan ini.

Jika polygon yang anda miliki di ekspor dalam format kolom (baris menyatakan point) maka harus di convert dengan fungsi transpose. Saya memiliki region jalan dan danau kota bekasi dengan format baris, maka saya harus konversi menjadi format kolom kemudian memisahkan menjadi dua (xv dan yv).

  • >> xv=transpose(y(:,1));
  • >> yv=transpose(y(:,2));

Dua kode di atas adalah membuat variabel x dan y dari region. Berikutnya kita akan mengecek apakah suatu titik, misalnya rumah sakit di kab bekasi apakah terletak di jalan, sungai atau danau? .. (pertanyaan yg aneh .. he he). Kita impor lokasi rumah sakit dulu:

  • >> data2=impor(‘xxxxxxx.shp’);
  • >> y2=transpose([data2.X;data2.Y]);
  • >> tes=transpose(y2);
  • >> inpolygon(tes(1,:),tes(2,:),xv,yv)
  • ans =
  • 0 0 0 0 0 0 0 0 0 0 0 0

Variabel yang akan diuji ditranspose dan diberi nama tes, kemudian dicek dengan fungsi inpolygon. Hasilnya bener kan .. tidak ada rumah sakit yang berada di jalan, sungai atau danau. Kayak kurang kerjaan aja ya. Tapi itu berguna untuk program penataan ruang (pabrik, geografi, dll). Mengapa bangsa eropa maju, ya mungkin karena “They think everyting”. O iya, untuk melihat region di Matlab dengan toolbox “mapview“, masukan koordinatnya. Penggunaan secara detail dapat dilihat di tulisan sebelumnya.

Membuat Shapefile Kecamatan dari Kabupaten (Clipping)

Salah satu keterampilan terpenting dari pengguna GIS adalah kemampuan membuat satu peta dari data peta yang tersedia. Misalnya kita diminta membuat peta kecamatan bekasi selatan dari peta kota bekasi maka kita harus sanggup membuatnya, bisa dengan ArcGIS, ArcView atau aplikasi GIS lainnya. Di sini kita coba dengan ArcGIS.

Langkah pertama adalah siapkan shapefile kota bekasi, dilanjutkan dengan membuat satu project baru atau “menumpang” dari project yang ada. Proses yang dilakukan adalah clipping kota bekasi dengan pengguntingan pada kecamatan bekasi selatan.

Setelah peta kota bekasi dibuka, buka data dengan klik kanan di table of content pilih open attribut table. Sorot kecamatan yang akan diclip. Berikutnya adalah masuk ke menu clip yang berada di menu geoprocessing.

Isi baik input features dan clip features dengan shapefile yang sama. Tentu saja jangan lupa men-select di table kecamatan bekasi selatan, kalo tidak ya akan menghasilkan sama dengan shapefile kota bekasi (tidak ada yang digunting). Jika sudah tekan OK, tunggu hingga selesai dan pastikan tidak ada warning pertanda ada yang salah. Semoga bermanfaat.

 

Mengidentifikasi Pola Citra dengan Jaringan Syaraf Tiruan

Sebelum membahas identifikasi perlu diketahui ada dua jenis pengecekan suatu citra yaitu identitikasi (identification) dan pencocokan (verification). Pada sistem pencocokan prinsipnya sama dengan mengecek password, misalnya mengecek tanda tangan, sistem akan membandingkan identitas orang yang malakukan tanda tangan dengan citra tanda tangannya. Mirip ketika mau log-in, kita memasukan user id dan kemudian password, tetapi di sini passwordnya diganti dengan sidik jari, tanda tangan, retina, dll. Tetapi sistem identifikasi sedikit lebih rumit karena sistem tidak diberitahu identitas yang melakukan biometrik. Sistem harus mengetahui siapa pemilik citra yang ditangkap sistem. Jadi ketika kita ingin memasuki gedung yang diberi pengaman sistem identifikasi, pengguna hanya memberikan sidik jari, retina, tanda tangan, dan biometrik lainnya yang biasanya non-destruktif (kalo kesetrum mungkin sedang sial aja .. he he).

Untuk identifikasi tanda tangan dibutuhkan pengolahan citra sebelum masuk ke sistem identifikasi. Untuk belajar sebaiknya kita coba sistem yang sederhana misalnya membedakan angka 1,2, dan 3 saja dan tanpa pengolahan citra, alias kita beri tahu langsung vektornya. Gambar berikut ini menunjukan angka 1, 2, dan 3 di pixel berukuran 5×3.

Angka satu di sini menunjukan adanya pola sementara nol tidak. Data tersebut data utama yang akan ditraining dengan Jaringan Syaraf Tiruan (JST). Tentu saja jika hanya data itu yang diberikan, hasilnya kurang bagus karena sistem membutuhkan data lain untuk menjaga masukan yang agak menyimpang misalnya gambar di bawah untuk angka 1.

Untuk angka-angka yang lain, coba buat sendiri deviasinya. Kalo tanda tangan, untuk training user diminta melakukan beberapa tanda tangan, karena kebetulan hampir tidak mungkin melakukan tanda tangan beberapa kali hasilnya sama persis.

Langkah pertama adalah membuat vektor tanda tangan, caranya adalah mengkonversi matriks tanda tangan menjadi vektor dengan fungsi reshape di Matlab. Buka command window, kita coba untuk angka satu terlebih dahulu.

  • >> satu=[0 1 0;0 1 0;0 1 0;0 1 0;0 1 0]
  • satu =
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • >> satu=reshape(satu,1,15)
  • satu =
  • Columns 1 through 12
  • 0 0 0 0 0 1 1 1 1 1 0 0
  • Columns 13 through 15
  • 0 0 0

Perhatikan fungsi reshape di atas, matriks 5×3 diubah menjadi 1×15 dimana 15 dari perkalian 3×5 (masukan angka 3, kali dan angka 5 di calculator iphone 6 Anda, nanti keluar deh angka 15 .. he he). Lakukan untuk tiga deviasi dari angka satu di gambar atas. Lakukan juga hal yang sama untuk angka 2 dan angka 3. Bagaimana jika tanpa deviasi? Ya bisa saja, tapi yang namanya belajar/training membedakan monyet dengan bukan monyet aja ga bisa kan trainingnya dengan gambar monyet saja, harus dengan gambar yang lain, bisa dengan foto teman anda, atau foto anda juga boleh. Ok, kita beri label saja monyet, eh angka satu, dua, dan tiga berturut-turut 1,2,3 walau boleh saja 0, 10, 20. Tetapi supaya gampang mengenali yang pertama saja. Supaya cepat, ok 2 dan 3 untuk training tidak perlu deviasi. Angka satu dengan tiga deviasi. Secara prinsipnya adalah gambar berikut:

Kolom terakhir merupakan label/target, sementara vector1 sampai 3 berukuran 1×15. Buka lagi command window, lakukan cara yang sama dengan variabel satu di atas, beri nama saja berikutnya dengan satua, satub, satuc, dua, dan tiga.

  • >> satua=reshape(satua,1,15);
  • >> satub=reshape(satub,1,15);
  • >> satuc=[0 0 1;0 0 1;0 1 0;0 1 0;0 1 0];
  • >> dua=[1 1 1;0 0 1;1 1 1;1 0 0;1 1 1];
  • >> tiga=[1 1 1;0 0 1;0 1 1;0 0 1;1 1 1];
  • >> satua=reshape(satua,1,15);
  • >> satub=reshape(satub,1,15);
  • >> satuc=reshape(satuc,1,15);
  • >> dua=reshape(dua,1,15);
  • >> tiga=reshape(tiga,1,15);
  • >> datalatih=[satu;satua;satub;satuc;dua;tiga];
  • >> target=[1;1;1;1;2;3];

Latih dengan toolbox JST di Matlab dimana data pelatihannya datalatih dan targetnya target. Format di nntool sedikit berbeda dengan data di atas dimana kolom jadi baris dan baris jadi kolom. Gunakan newdatalatih dan newtarget di toolboxnya.

  • >> newdatalatih=transpose(datalatih);
  • >> newtarget=transpose(target);

Oke, kita cek hasilnya yuukk. O iya, kalo masih bingung utak-atik toolbox JST (nntool) bisa dibuka di link sebelumnya, gampang kok. Kita uji dengan angka satu, dua dan tiga.

  • >> tessatu=transpose(satu);
  • >> sim(network1,tessatu)
  • ans =
  • 1.0000
  • >> tesdua=transpose(dua);
  • >> sim(network1,tesdua)
  • ans =
  • 2.0000
  • >> testiga=transpose(tiga);
  • >> sim(network1,testiga)
  • ans =
  • 1.5786
  • >> tessatua=transpose(satua);
  • >> sim(network1,tessatua)
  • ans =
  • 1.0000

Gimana .. ada yang ngaco ga? … ternyata, A D A. Angka tiga dites kok keluarnya 1,58 (saya beri warna merah). Makanya ngajarin bedain monyet atau bukan jangan hanya data monyet saja yang dilatih. Ok, selamat berpusing-pusing ria yang dapat skripsi atau tesis tentang identifikasi tanda tangan ya (jadi inget kerjaan saya dulu) ..

Jika Anda bisa membuat pengolahan citra di bawah ini berarti sudah siap nih untuk sistem identifikasi pola .. Gambar di bawah ini hasil keluaran angka dua (lihat bagian putihnya, karena angka 1 berwarna putih dan angka nol berwarna hitam).

Oiya, kalo bisa gunakan Matlab 7 sepertinya lebih ampuh. Bukan Cuma tanda tangan, bisa juga mengenali grafik lho, lihat di sini.