Friday, February 2, 2018

Python untuk Analisis Geospatial Bagian 4: Menggunakan Library Shapely untuk Analisis Sederhana

Pada bahasan ini saya akan membahas bagaimana jika kita ingin mengetahui atau analisis dari peta batas administrasi, dimana kit aingin mengetahui tetangga dari sebuah Kabupaten dari sebuah peta batas administrasi kabupaten. Dalam contoh bahasan saya menggunakan peta batas admnistrasi Propinsi Jawa Barat dalam bentuk polygon yang dapat di download disini.

Gambar diatas merupakan tampilan dari peta batas administrasi kabupaten yang ada di Propinsi Jawa Barat. Selanjutnya dengan menggunakan Python dan beberapa tekhnik yang sudah dipelajari sebelumnya kita akan mencoba membuat kode program untuk membaca tetangga dari setiap kabupaten dari peta tersebut.

Kemudian dengan menggunakan IDLE kita buat kode program python dengan nama baca_tetang_kabupaten.py seperti dibawah ini:

import ogr
import shapely.wkt

def main():
    shapefile = ogr.Open("D:\Master\Peta\BIG2016\export\Batas_Kab_Jawa_Barat.shp")
    layer = shapefile.GetLayer(0)

    kabupatens = {}

    for i in range(layer.GetFeatureCount()):
        feature = layer.GetFeature(i)
        kabupaten = feature.GetField("KABUPATEN")
        outline = shapely.wkt.loads(feature.GetGeometryRef().ExportToWkt())

        kabupatens[kabupaten] = outline

    print "Dalam file Batas_Kab_Jawa_Barat.shp terdapat %d kabupaten" % len(kabupatens)
    for kabupaten in sorted(kabupatens.keys()):
        outline = kabupatens[kabupaten]

        for kabupaten_lain in sorted(kabupatens.keys()):
            if kabupaten == kabupaten_lain: continue

            outline_lain = kabupatens[kabupaten_lain]

            if outline.touches(outline_lain):
                print"%s batas-batas %s" % (kabupaten, kabupaten_lain)
    
if __name__ == "__main__":
    main()

Dalam kode program tersebut, pertama kita membaca jumlah seluruh objek Kabupaten dan selanjutnya mengecek objek-objek kabupaten yang bersebtuhan dengan sebuah objek kabupaten yang dicari. Dilakukan untuk setiap objek kabupaten.
Setelah kita run kode program tersebut sehingga menghasilkan output seperti dibawah ini:


Hasil dari kode program tersebut adalah menampilkan setiap border atau tetangga dari setiap kabupaten dalam peta propinsi Jawa Barat. Tetangga kabupaten tersebut merupakan kabupaten yang bersentuhan langsung dengan objek suatu kabupaten. 



Monday, January 29, 2018

Python untuk Analisis Geospatial Bagian 3: Menggunakan Library Shapely untuk Membaca File WKT

File WKT (Well Know Text) merupakan teks markup language untuk merefresentasikan geometri objek vektor  dari sebuah peta, sistem referensi geometri (sstem kordinat) dan transformasi antar siste kordinat.

Dengan menggunakan library shapely, dari data WKT kita dapat mendapatkan data:

  • menghitung nilai tengah dari nilai geometri
  • mengitung batas dari geometri, yang menunjukan batas utara, selatan, timur dan barat dari sudut sebuah polygon.
  • menghitung intersection diantara dua geometri.
  • menghitung perbedaan diantara dua geometri.
  • dan menghitung luasan dari area dengan catatan file shp menggunakan sistem proyeksi (meter) bukan dalam format derajat.

Kali ini kita lanjutkan penggunaan library shapefile untuk membaca file WKT dari peta DesaIndonesia.shp. Langkahnya masih menggunakan IDLE python dan buat file baru dengan nama baca_shp_wkt.py kemudian ketikan kode program sebagai berikut:

import ogr
import shapely.wkt

shapefile = ogr.Open("D:\Master\Peta\DesaIndonesia.shp")
layer = shapefile.GetLayer(0)
feature = layer.GetFeature(0)
geometry =feature.GetGeometryRef()
wkt = geometry.ExportToWkt()
outline = shapely.wkt.loads(wkt)
X = outline.centroid.x
Y = outline.centroid.y
B = outline.bounds

print "X : ", X , "Y : ", Y
print "Boundary: ", B

Maka akan dihasilkan output sebagai berikut:


Penjelasan:

feature = layer.GetFeature(0)

Digunakan untuk mendapatkan feature nomor 0dan disimpan ke variable feature.

geometry =feature.GetGeometryRef()

Sintax tersebut digunakan untuk mendapatkan referensi geometri.

wkt = geometry.ExportToWkt()

Sintax untuk melakukan ekport ke file WKT dan disimpan di variabel wkt.

outline = shapely.wkt.loads(wkt)

Sintax untuk meload file wkt ke variabel outline.

X = outline.centroid.x
Y = outline.centroid.y
B = outline.bounds

Sintax untuk menyimpan nilai tengah x ke variabel X, nilaing tengah y ke variabel Y dan menyimpan nilai boundari dari feature ke 0 ke variabel B. Data boundary yang ditampilkan adalah nilai minimum longitud dan latitud serta nilai maksimum longitud dan latitud (berati, min_x, min_y, max_x, max_y).

print "X : ", X , "Y : ", Y
print "Boundary: ", B


Sintax untuk menampilkan nilai variabel ke layar.

<<Sebelumnya  Selanjutnya>>







Python untuk Analisis Geospatial Bagian 2: Menggunakan Library OGR untuk Membaca Data SHP

Setelah dalam bahasan sebelumnya mengenai persiapan Python dan library untuk mengakses data spasial dilakukan pada tulisan

"Python untuk Analisis Geospatial Bagian 1: Install Library GDAL dan Shapely di Windows"


Langkah selanjunya adalah menggunakan library GDAL/OGR dan Shapely untuk mengakses data spatial. Sebelum kita melanjutkan ke contoh program dengan python, pertama kita harus mengenal mengenal data spasial yang akan kita olah disini.

"Mengenal Data Spasial"


Tools yang akan kita gunakan dalam contoh dibawah nanti adalah IDLE sebagai text editor bawan dari instalan Python. Langkah-langkah yang akan kita lakukan sebagai berikut:

  • Persiapan data saya menggunakan data administrasi BIG yang dapat didownload disini.
  • Buka aplikasi IDLE dari start menu
  • Kemudian di IDLE buka menu File-> New File dan ketikan kode perintah:
import ogr

shapefile = ogr.Open("D:\Master\Peta\DesaIndonesia.shp")
layer = shapefile.GetLayer(0)
for i in range(layer.GetFeatureCount()):
    feature = layer.GetFeature(i)
    feature_name = feature.GetField("KECAMATAN")
    geometry = feature.GetGeometryRef()
    geometry_type = geometry.GetGeometryName()
    print i, feature_name, geometry_type


  • Kemudian pilih menu Run -> Run Module atau dengan shortcut F5, untuk melakukan eksekusi program, jika berhasil maka di wondows baru ditapilkan seperti gambar dibawah.

  • Penjelasan kode program diatas adalah
import ogr

Sintak tersebut untuk mengimport librarry OGR yang merupakan library dari OSGEO yang dibuat untuk menulis dan membaca data vektor.

shapefile = ogr.Open("D:\Master\Peta\DesaIndonesia.shp")

Sintax diatas untuk membuka file DesaIndonesia.shp menggunakan library OGR.

layer = shapefile.GetLayer(0)

Sintax ini digunakan untuk menyimpan variable shapefile dalam sebuah datasource di libarry OGR, dimana datasource OGR dapat membaca beberapa informasi layer. Namun dalam contoh hanya terdapat 1 layer, dan kita mengakses 1 layer.

for i in range(layer.GetFeatureCount()):
    feature = layer.GetFeature(i)

Sintax tersebut digunakan untuk melakukan iterasi terhadap feature yang terdapat dalam shapefile, dan iterasi dilakukan untuk semua feature di file tersebut.

feature_name = feature.GetField("KECAMATAN")

Sintax tersebut untuk mendapatkan string dari field / kolom / atribut  "KECAMATAN", dimana dalam file DesaIndonesia.shp tersebut terdapat kolom yang bernama KECAMATAN, dan ingat cara menulisnya harus sama anatara penggunaan huruf besar dan kecil karena penamaan tersebut bersifat case sensitive.

geometry = feature.GetGeometryRef()

Sintax tersebut digunakan untuk mendapatkan referensi geometri.

geometry_type = geometry.GetGeometryName()

Sintax tersebut digunakan untuk mendapatkan jenis geometry dari DesaIndonesia.shp.

print i, feature_name, geometry_type

Sintax tersebut untuk mencetak nilai i (urutan dari 0 sampai data terakhir), nama kecamatan dan jenis geometri dari file DesaIndonesia.shp.

Demikianlah tulisan ini untuk melanjutkan klik

<<Sebelumnya     Selanjutnya>>    





Friday, January 26, 2018

Python untuk Analisis Geospatial Bagian 1: Install Library GDAL dan Shapely di Windows


Bagi yang sedang belajar Python untuk analisis geospasial akan berkaitan dengan beberapa library yang bisa digunakan untuk mengolah data spasial seperti GDAL untuk data raster, OGR untuk data vektor dan shapely untuk analisis operasi data spasial.

Pada bagian awal tulisan Python untuk Analisis Geospatial, akan membahas persiapan Python dan beberapa library yang akan digunakan untuk analisis geospatial. Dalam hal ini akan dijabarkan langkah-langkah dalam menginstal Python, GDAL/OGR library, Shapely library dan library lain-lainya yang dperlukan.

Dalam bagian pertama tulisan ini akan dijebarkan persiapan analisis geospatial dengan menggunakan python. Dalam uraian dibawah akan dijelaskan langkah-langkah dalam menginstall di Windows aplikasi Python, GDAL dan Shapely.

1. Install Python 2.7.14

link Python 2.7.14

2. Install GDAL

untuk menginstall gdal python gunakan perintah

Python -m pip install <lokasi file>\<file.whl>

link GDAL windows Python 2.7

3. Install Shapely

untuk menginstall shapely python gunakan perintah

Python -m pip install <lokasi file>\<file.whl>


Link Shapely Python 2.7 32 Bit

Demikian semoga bermanfaat. @wawanhn.

Sumber: 
https://pythongisandstuff.wordpress.com/2016/04/13/installing-gdal-ogr-for-python-on-windows/
https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely

Membuat File exe dari Kode Python

Pada saat kita menulis source code python untuk aplikasi teretentu file python disimpan dengan ektensi .py. Untuk menjalankan kode program tersebut menggunakan command prompt atau menggunakan IDLE.


Pada saat ini saya akan mencoba mengkonversi souce code python tersebut menjadi file executable sehingga bisa langsung dijalankan dengan melakukan klik dua kali file exe tersebut. 

Tuesday, January 16, 2018

Deploying Flask Python di Pythonanywhere

Ada beberapa webhosting yang dapat digunakan untuk deploying aplikais web dengan menggunakan bahasa Python, salah satu yang terkenal adalah menggunakan website pythonanywhere.

Berikut saya share bagaimana cara mendeploy web berbasis python Flask dengan menggunakan webhosting pythonanywhere.


  • Menuju menu Console dan pilih Bash. Kemudian buat virtual environment untuk Flask applicatioan: dengan perintah mkvirtualenv <nm_vitrtualenv> atau virtualenv <nm_vitrtualenv>

          $ mkvirtualenv --python=/usr/bin/python3.4 deploy  <enter>


  • Kemudian install aplikasi web Flask

  • Kemudian menuju menu Files, dan tambahkan folder deploy

  • Sebelumnya buat file "myflask.py" dengan isi 
          from flask import Flask

      app = Flask(__name__)

      @app.route('/')
      def index():
  return '<h1>Deployed!</h1>'
      if __name__ == '__main__':
  app.run()
  • Dalam folder deploy yang sudang dibuat sebelumnya upload file myflask.py
  • Kemudian pindah ke menu Web, dan jika belum ada aplikasi web (pertama kali), klik button a new web app 

  • kemudian pilih manual configuration dan selanjutnya pilih Python 3.4, kemudian klik next

  • Selanjutnya kita mencoba melihat hasil deploy aplikasi Flask kita. misal saya buat dalam tahap sebelumnya wawanhn.pythonanywhere.com maka dihasilkan seperti dibawah ini. Tampilan dibawah karena kita belum set path dari virtual enviroment kita

  • Selanjutnya ada perubahan pada file /var/www/wawanhn_pythonanywhere_com_wsgi.py pada bagian Code: lakukan perubahan pada file tersebut dengan mengaktifkan perintah untuk aplikasi Flask dan setelah selesai klik save.

Demikian tulisan sederhana ini selamat mencoba...


Tuesday, December 6, 2016

Membuat Skrip Kirim Email dengan Python



Bagi yang sedang utak-atik bahasa pemrograman Python, berikut saya share kode program untuk mengirim email dengan kode program sederhana. Untuk menulis kode program tersebut dapat menggunakan berbagai editor ataupun menggunakan shell atau cmd maupun ipython. Berikut kode programnya:

#menggunakan python 2.7.5
#mengirim data ke gmail melalui python
#hanya untuk gmail, bukan ymail atau yg lainnya
#harus terkoneksi internet

import smtplib
from email.mime.text import MIMEText
from email.MIMEMultipart import MIMEMultipart

pengirim = 'xxxxx@gmail.com' #masukkan email pengirim

penerima = ('yyyygmail.com') #bisa satu penerima atau lebih
msg = MIMEText('isi dari email')
msg ['Subject'] = 'Mengirim email via python'
msg ['From'] = pengirim
msg ['To'] = penerima

msg = MIMEMultipart()

msg.attach(MIMEText(file('test.txt').read()))  #buatlah file (satu folder) yg akan dikirim dgn program seperti [kita.txt]

try:
    pwd = 'password' #isikan password gmail mu??
    s = smtplib.SMTP_SSL()
    s.connect('smtp.gmail.com', 465)
    s.login(pengirim, pwd)
    s.sendmail(pengirim, penerima, msg.as_string())
    s.quit()
    print 'Berhasil mengirim e-mail'#pesan ketika berhasil mengirim

except Exception:
    print 'Koneksi gagal, silahkan coba lagi!'#pesan ketika tidak terkoneksi 

semoga bermanfaat. @wawanhn

referensi: http://python113.blogspot.co.id/2014/04/mengirim-email-gmail-via-python.html