Pendahuluan

Didalam sebuah aplikasi yang berkaitan dengan alamat dan lokasi, ada kalanya kita membutuhkan koordinat dari sebuah lokasi.

Koordinat ini maksudnya adalah :

  • letak latitude - yaitu posisi garis lintang, membentang dari barat ke timur, membentuk garis-garis mendatar yang paralel dari khatulistiwa sampai ke kutub. Garis lintang 0 derajat membagi bumi menjadi 2 bagian sama besar utara dan selatan. Indonesia merupakan negara yang terletak di garis lintang 0 derajat khatulistiwa.

  • letak longitude - atau garis bujur, membentang dari utara ke selatan. Membagi bumi memanjang dari kutub utara ke kutub selatan. Titik bujur 0 derajat berada di Greenwich, Inggris.

Kedua koordinat diatas digunakan sebagai garis khayal yang membantu ilmuwan dan peneliti untuk menentukan :

  • lokasi khayal sebuah posisi di bumi secara matematika.
  • iklim
  • penentuan zona waktu dan penanggalan.
  • navigasi, explorasi dalam pertambangan.
  • dll

Pembahasan mengenai latitude dan longitude bisa dicari di mesin pencarian dan website, misalnya di sini.

Perhitungan lokasi tersebut menggunakan konsep derajat, menit dan detik. Seperti perhitungan di alat ukur busur derajat.


Lintang - Bujur dalam aplikasi ?

Posisi Lintang (Latitude) dan Bujur (Longitude) merupakan posisi khayal untuk sebuah posisi di bumi yang disepakati oleh ilmuwan Geodesi.

Penentuan lokasi seperti ini memudahkan karena memakai perhitungan matematika terhadap data bumi yang sama, sehingga mudah diterjemahkan dan ditranslasikan ke posisi aslinya di bumi.

Kemudahan ini tentunya memudahkan juga di sisi aplikasi IT. Data bumi yang ada bisa dengan mudah di tentukan posisinya dengan garis bujur dan lintang ini.

Misalkan dalam menyimpan data koordinat penjemputan transportasi online, atau lokasi/peta penambangan, atau lokasi/peta tracking kendaraan yang dikelola oleh perusahaan.

Kalau menggunakan nama daerah, nama jalan, atau nama gedung, maka akan sangat banyak nama yang sama. Tanpa garis lintang dan bujur ini, untuk mendapatkan lokasi yang persis, maka kita harus menyimpan semua data lengkapnya, misalnya nama jalan, nomor rumah, nama kompleks, nomor RT/RW, nama kelurahan, nama kecamatan, nama kota, nama provinsi, nama negara, dsb.

Kemudian akan meload data negaranya, lalu provinsi, dst sampai didapatkan lokasi persis dari titik tersebut.

Dengan garis lintang dan bujur, cukup sekali translasi dilakukan untuk mendapatkan garis lintang dan bujurnya, kemudian data tersebut kita simpan sebagai data lintang dan bujur.

Selanjutnya data inilah yang kita gunakan sebagai patokan untuk melakukan loading peta / posisi tadi.

Salah satu provider penyedia translasi data dari data alamat jalan, nama gedung, alamat rumah adalah Google Maps API.


Google Maps API ?

Iya, sehari-hari pasti kita memakai Google Maps ini di ponsel kita.

Mau jalan ke puncak, pulang kampung, wisata, atau daerah yang kita tidak tahu jalannya lewat mana, kebanyakan kita akan memakai Google maps.

Dari Google Maps, kita akan mendapatkan informasi rute perjalanan, kemacetan, jarak tempuh, dll.

Itu dari sisi pengguna.

Dari sisi Development aplikasi yaitu Software Engineer yang ingin memasukkan informasi peta dalam aplikasinya bisa juga melakukan pemanggilan Google Maps API.

Dari aplikasi akan memanggil API (Application Programming Interface) yang disediakan oleh Google untuk mendapatkan data lokasi.

Sehingga dari tampilan aplikasi bisa kelihatan lebih keren dan semirip dengan aplikasi Google Maps.

Banyak pilihan data lokasi yang disediakan oleh Google Maps, seperti data rute, data tempat, data jarak, geocoding, dll, seperti ditulis di official web nya.

Artikel ini membahas mengenai Google Geocoding API saja, salah satu Google API yang cukup mudah yaitu :

  • Google Geocoding API –> API untuk mengubah alamat menjadi informasi garis lintang dan bujur, atau sebaliknya.

Dengan Google Map Geocoding ini, tujuan kita bukan untuk menampilkan peta lokasi, akan tetapi lebih kepada menyimpan data lintang dan bujur dari sebuah alamat.

Hal ini biasanya dibutuhkan misalnya untuk menyimpan history dari transaksi perjalanan, atau untuk meload data tersebut nantinya di aplikasi lain, dsb.

Jadi fokusnya bukan untuk menampilkan data peta, tetapi lebih kepada konversi data alamat ke data lintang dan bujur.


Google Maps Geocoding Client

Tentu saja dalam mendapatkan data Google Map Geocoding dari alamat ke data lintang bujur, kita harus connect ke server Google Map.

Untuk bisa connect ke server Google Map, kita harus melakukan 2 hal ini :

  • membuat account Google Cloud dan mengaktifkan Billing.
  • mengaktifkan Geocoding API dari fitur Google Map Cloud, dan akan mendapatkan free tier $200 perbulannya.
  • generate API Key dari menu Google Maps –> Credential
  • mengimport/menginstall Google Maps Client.
  • melakukan query dengan data alamat yang kita kirimkan.

Dalam kasus ini kita coba dengan menggunakan Java Google Maps Client.

Dengan menggunakan maven, kita bisa import library nya sbb :

<dependency>
  <groupId>com.google.maps</groupId>
  <artifactId>google-maps-services</artifactId>
  <version>2.0.0</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
</dependency>

Kemudian kita bisa memasukkan data API key kita menggunakan API Key yang telah kita buat sebelumnya.

Misalkan saya mencari lokasi lintang dan bujur dari Monas, Jakarta.

Maka codenya adalah sbb :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.huzefril.geocoding;

import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.maps.GeoApiContext;
import com.google.maps.GeocodingApi;
import com.google.maps.errors.ApiException;
import com.google.maps.model.GeocodingResult;

public class Geocoding {

	public static void main(String[] args) {
		GeoApiContext context = new GeoApiContext.Builder().apiKey("AIzaxxxxxxxxx....").build();
		GeocodingResult[] results = null;
		try {
			results = GeocodingApi.geocode(context, "Monas Jakarta").await();
		} catch (ApiException | InterruptedException | IOException e) {
			e.printStackTrace();
		} finally {
			context.shutdown();
		}

		if (results != null && results.length > 0) {
			Gson gson = new GsonBuilder().setPrettyPrinting().create();
			System.out.println(gson.toJson(results[0].addressComponents));
      System.out.println(gson.toJson(results[0].geometry.location));
		}
	}
}

Pada line 15, kita memasukkan API Key yang kita buat sebelumnya.

Sehingga ketika query ke Google API Map, API Key ini disertakan sebagai otorisasi dalam mendapatkan data.


setelah dieksekusi, maka hasilnya :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[
  {
    "longName": "Gambir",
    "shortName": "Gambir",
    "types": [
      "ADMINISTRATIVE_AREA_LEVEL_3",
      "POLITICAL"
    ]
  },
  {
    "longName": "Gambir",
    "shortName": "Gambir",
    "types": [
      "ADMINISTRATIVE_AREA_LEVEL_4",
      "POLITICAL"
    ]
  },
  {
    "longName": "Central Jakarta City",
    "shortName": "Central Jakarta City",
    "types": [
      "ADMINISTRATIVE_AREA_LEVEL_2",
      "POLITICAL"
    ]
  },
  {
    "longName": "Jakarta",
    "shortName": "Jakarta",
    "types": [
      "ADMINISTRATIVE_AREA_LEVEL_1",
      "POLITICAL"
    ]
  },
  {
    "longName": "Indonesia",
    "shortName": "ID",
    "types": [
      "COUNTRY",
      "POLITICAL"
    ]
  }
]
{
  "lat": -6.1753924,
  "lng": 106.8271528
}

Terlihat kita bisa mendapatkan latitude dan longitudenya di baris ke 44 dan 45.

Dengan memanggil hasil dari call API Google Maps : results[0].geometry.location