Bagaimana saya mengkombinasikan IBM Software/ Tools dengan ArcGis (Esri)?

cahyati sangaji (cahya)
6 min readJul 6, 2020

--

Cahyati Supriyati Sangaji (My Note)

Pengalaman ini berawal dari persiapan usecase untuk event Esri Indonesia User Conference pada Agustus 2019. Ide dasarnya adalah bagaimana perangkat Internet of Things (IoT) dapat berkomunikasi dengan ArcGis (Esri).

Ilustrasi-1: Esri Indonesia User Conference 2019 name tag

Tujuan usecase saat itu adalah “indoor mapping” untuk management asset, yang tentu saja juga berkombinasi dengan tool dari Autodesk. Dari perangkat IoT bertugas memberikan hasil koordinat dan nilai sensor secara realtime. Dari usecase ini juga menggunakan custom mobile application yang bertugas memberikan nilai real koordinat dari smartphone kepada perangkat IoT. Saya disini akan fokus menyampaikan pengalaman disisi saya sebagai solution specialist IBM Software IoT.

Komponen IoT yang di gunakan adalah sensor GPS dari smartphone yang mengirimkan datanya langsung ke Node-Red pada Raspberry Pi3 yang juga merupakan komponen IoT. Sensor suhu dan kelembaban DHT11 yang diambil nilai suhunya dari sensor yang terhubung ke komponan Arduino, yang nantinya hasil pengolahan pada arduino diteruskan ke Raspberry Pi3.

Node-Red disini bisa menggunakan Node-Red dari IBM Cloud atau juga bisa di instal langsung di Raspberry Pi3.

Ilustrasi-2 : Bagan Sistem Internet of Things dengan ArcGis

Bagaimana sistem berjalan?

Sistem berawal dari pengiriman data secara realtime dari sensor suhu yang di proses di Aruino yang diteruskan ke Raspberry Pi3. Nilai tersebut di proses oleh python code pada Raspberry Pi3 dengan alur komunikasi menggunakan Node-Red. Kemudian proses pada Node-Red akan dijalankan setelah mendapatkan inputan dari mobile app berupa data koordinat dari GPS smartphone. Dari proses tersebut kita mendapatkan file json yang berisikan format GoeJson yang contohnya seperti berikut :

{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}

Setelah file GoeJson telah di buat, kemudian di lanjutkan dengan proses import ke ArcGis Desktop lalu di publish ke ArcGis Online. Tapi dari eksplore ini kita belum berhasil menemukan hasil yang benar dan cara komunikasi dengan ArcGis tidak efektif. Setelah diteliti di akhir, nilai latitude dan Longitude belum tepat serta tidak bisa melakukan visualisasi secara realtime. Hal ini di sebabkan karena proses import data file GeoJson harus dilakukan tiap ada perubahan atau ada update input dari proses IoT yang telah di sampaikan sebelumnya. Tapi dari pengalaman ini catatan pentingnya adalah :

Salah satu cara berkomunikasi dengan ArcGis menggunakan GeoJson dan CSV

Selain itu juga saya mendapatkan pengetahuan :

ArcGis bisa berkomunikasi lewat API

Eksplore Selanjutnya

Setelah pengalaman sebelumnya, saya melanjutkan eksplore selanjutnya dengan dasar pengetahuan ArcGis dapat memproses data dengan format GeoJson dan juga dapat berkomunikasi lewat API. Saya menggunakan ESP8266 sebagai komponen IoT, karena device ini dapat berkomunikasi via WiFi. Dapat di lihat pada ilustrasi-3 bagaimana bagan alur dari sistem yang ingin coba dilakukan.

Ilustrasi-3 : Rancangan bagan sistem

Proses ini menggunakan data dummy untuk nilai koordinat dengan format GeoJson. Namun untuk percobaan ini mengalamain kendala dari panjang karakter yang dapat berhasil terkirim ke IBM Watson IoT Platform. Sehingga pengiriman payload di bagi menjadi dua payload. Langkah pertama yang di lakukan adalah pastikan library ESP6288 dan PubSubClinet sudah ter-install di Arduino IDE, Kemudian buat service Watson IoT Platform.

Contoh sintax progam dari ESP6288 sepeti dibawah ini:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "<ssid>";
const char* password = "<pass ssid>";
#define ORG "<org>"
#define DEVICE_TYPE "<device_type>"
#define DEVICE_ID "<device_id>"
#define TOKEN "<token>"
char server[] = ORG ".messaging.internetofthings.ibmcloud.com";
char topic[] = "iot-2/evt/status/fmt/json";
char authMethod[] = "use-token-auth";
char token[] = TOKEN;
char clientId[] = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID;
WiFiClient wifiClient;
PubSubClient client(server, 1883, NULL, wifiClient);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println();
Serial.print("Connecting to "); Serial.print(ssid);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Wifi connected, IP address: "); Serial.println(WiFi.localIP());
}
int counter = 0;
void loop() {
// put your main code here, to run repeatedly:
if(!client.connected())
{
Serial.print("Reconnecting client to ");
Serial.println(server);
while(!client.connect(clientId, authMethod, token))
{
Serial.print(".");
delay(500);
}
}
float lat;
lat = -6.219801;
float longi;
longi = 106.825541;

// put your main code here, to run repeatedly:
String payload = "{\"type\":\"";
payload += "FeatureCollection";
payload += """\"";
payload += ",\"features\":""";
payload += "[{";
payload += """\"";
payload += "type\":\"";
payload += "Feature";
payload += """\"";
payload += ",\"geometry\":""";
payload += "{";
payload += """\"";
payload += "type\":\"";
payload += "Point";
payload += """\"";
String payload1 = ",\"coordinates\":""";
payload1 += "[";
payload1 += lat,6;
payload1 += ",";
payload1 += longi,6;
payload1 += "]";
payload1 += "}";
payload1 += ",\"properties\":""";
payload1 += "{";
payload1 += """\"";
payload1 += "prop0\":\"";
payload1 += "value0";
payload1 += """\"";
payload1 += "}";
payload1 += "}]";
payload1 += "}";
Serial.print("Sending payload: ");
Serial.println(payload+payload1);
if(client.publish(topic, (char*) payload.c_str()) && client.publish(topic, (char*) payload1.c_str()))
{
Serial.println("Publish ok");
}
else
{
Serial.println("Publish failed");
}
delay(5000);
}

Jika dilihat pada hasil pada Ilustrasi-4, ESP berhasil terhubung dengan SSID dan IBM Watson IoT Platform. Kemudian dapat di lihat juga pada serial Arduino IDE sebenarnya data yang dikirimkan sudah sesuai dengan format GeoJson (Ilustrasi-5).

Ilustrasi -4 : ESP6288 terhubung ke SSID dan IBM Watson IoT Platform
Ilustrasi-5: Data dengan hasil format GeoJson pada serial Arduino IDE

Namun data yang terkirim ke IBM Watson IoT Platform ternyata di terima tiap payload. Sehingga hasil yang diterima oleh IBM Watson IoT format json masih belum tepat.

Illustrasi-6: Hasil data dari ESP6288 ke IBM Watson IoT Platform

Karena terkendala dari panjang karakter yang dapat diterima Watson IoT Platform pada percobaan ini. Tentu saya rasa akan cukup sulit untuk dilanjutkan dan harus mencari solusi lain.

Bagaimana Akhirnya

Berawal dari project tentang “A Visual Approach to determine Strategic Locations for Masks and Medical Devices Distribution for COVID-19 treatment based on confirmed cases on May 28,2020 at red zone areas to measure “new normal” readiness”, saya menemukan salah satu jembatan untuk dapat terhubung dengan ArcGis.

Di project itu saya memproses data menggunakan Python code yang berasal dari data real persebaran kasus dari Covid19. Data ini butuh di olah terlebih dahulu agar format dan aturan tabel sesuai dengan ArcGis. Di percobaan ini dengan dasar pengetahuan ArcGis dapat menggunakan data dengan format CSV, saya mencari cara agar dapat menghasilkan data dengan format CSV.

Data pada project saya kumpulkan dan akses lewat GitHub menggunakan python code pada Jupyter Notebook dengan format CSV. Percobaan ini di uji menggunakan ArcGis Online dan dapan menghasilkan titik koordinat yang tepat. Dari sini di dapatkan kesimpulan tentang aturan base tabel yang dapat berhasil di baca oleh ArcGis, yaitu dari tabel real kita harus menambahkan kolom FID. kolom FID ini rownya berisikan angka unik yang tidak boleh sama dengan isi dari row yang lain. Lalu field dari table tidak oleh menggunakan spasi jika dalam satu field terdapat lebih dari satu kata.

Ilustrasi-7: Hasil ArcGis Online via Web Service dari Vannia Alfiani (Solution Specialist Esri)

Pencerahan ini membuat saya melanjutkan cara mencari tau bagaimana semua data dapat di akses dengan mudah oleh ArcGis. Selanjutnya walaupun dengan link row dari GitHub dapat di akses oleh ArcGis online, ini belum berjalan pada ArgGis Dekstop. Tujuan data sebaiknya dapat di akses oleh ArcGis Dekstop adalah agar dapat melakukan pengembangan dari visualisasi dari usecase yang ingin dibuat.

Ilustrasi-8: Hasil Spatial Join ArcGis dari Vannia Alfiani (Solution Specialist Esri)

Dari pengalaman yang pernah di lakukan data di ArcGis akan dilakukan proses spatial join. Maka didapatkan solusi untuk ArcGis dapat mengakses data adalah menggunakan database. Dari sini saya mendapatkan jawaban bagaimana kita dapat memberikan data kepada ArcGis untuk dapat divisualisasikan.

Ilustrasi-9: Database ArcGis Support

Database yang compatible dengan ArcGis adalah ALTIBASE, Dameng, DB2, Oracle, PostgreSQL, SAP HANA, SQL Server dan Teradata.

Jadi, dari kasus ini IBM dapat terhubung dengan ArcGis menggunakan jalur komunikasi menggunakan IBM DB2 dan SAP HANA.

Dari kelanjutan project ini, saya menggunakan PostgreSQL karena juga akan dikombunikasikan denga tool/software lain dan jalur penghubung antara semuanya menggunakan PostgreSQL. Saya akan bagi pengalaman saya pada artikel catatan saya “Prepare data for ArcGis” yang berisikan bagaimana saya memberikan data yang sesuai dengan ArcGis.

Saya sangat senang jika ada yang memiliki pengalaman yang sama dan memiliki solusi dari permasalahan yang saya hadapi, tentu saja juga bersedia membagi pengalamannya kepada saya.

Terimakasih untuk yang telah bersedia membaca catatan saya.

Reference :

https://geojson.org/

--

--

No responses yet