Arsip Tag: GIBS

NASA VIIRS_Black_Marble

Bagi Anda yang mengikuti postingan di FB SIFSuskaGIS, Anda dapat mengunduh citra ubin VIIRS Black Marble dan menghasilkan sebuah gambar utuh dengan perintah montage dari ImageMagick.

Namun, yang menjadi kendala adalah gambar tersebut hanyalah sebuah PNG yang tidak memiliki referensi koordinat, jadi jika dibuka di ArcGIS ataupun QGIS (atau GlobalMapper atau MapInfo), tidak akan align dengan peta lainnya, karena koordinatnya tidak ada.

Nah, kita dapat lagi melihat informasi dari Server GIBS nya NASA,

Nasa GIBS Server WMTS Capabilities

  <Layer>
     <ows:Title xml:lang="en">Black Marble (VIIRS, SNPP)</ows:Title>
     <ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
        <ows:LowerCorner>-180 -90</ows:LowerCorner>
        <ows:UpperCorner>180 90</ows:UpperCorner>
    </ows:WGS84BoundingBox>
     <ows:Identifier>VIIRS_Black_Marble</ows:Identifier>
     <Style isDefault="true">
         <ows:Title xml:lang="en">default</ows:Title>
         <ows:Identifier>default</ows:Identifier>


     </Style>
     <Format>image/png</Format>
     <Dimension>
         <ows:Identifier>Time</ows:Identifier>
         <ows:UOM>ISO8601</ows:UOM>
         <Default>2016-01-01</Default>
         <Current>false</Current>
         <Value>2012-01-01/2012-01-01/P1Y</Value>
         <Value>2016-01-01/2016-01-01/P1Y</Value>
     </Dimension>
     <TileMatrixSetLink>
         <TileMatrixSet>500m</TileMatrixSet>
     </TileMatrixSetLink>
     <ResourceURL format="image/png" resourceType="tile" template="https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/VIIRS_Black_Marble/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png"/>
  </Layer>

Yang perlu diperhatikan adalah BoundingBox nya.

Apa itu BoundingBox

Bounding box atau Extents adalah batas peta. Biasanya formatnya adalah

xmin ymin xmax ymax

yang artinya koordinat paling kiri bawah dan paling kanan atas dari gambar.

 <ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
    <ows:LowerCorner>-180 -90</ows:LowerCorner> XMIN YMIN
    <ows:UpperCorner>180 90</ows:UpperCorner> XMAX YMAX
</ows:WGS84BoundingBox>

Nah, jika kita tahu koordinat BoundingBox, kita dapat membuatkan WORLDFILE nya,

Apa itu World File

World File adalah file teks yang isinya cuma 6 baris, yang berisi informasi bagaimana sebuah citra itu tempatnya di dunia nyata. Atau kira-kira ini gambar peta apa, berikut dengan koordinatnya.

World File biasanya mengikuti format penamaan gambar kita. Misalnya Anda punya gambar peta DODOLKAMPRET.jpg, maka nama file worldnya adalah DODOLKAMPRET.jgw ataupun boleh juga DODOLKAMPRET.wld

Jika Anda memberinama CEBONG.jgw atau CEBONG.wld tidak akan mau.

Aturan penulisan World File

world file berisi 7 baris sebenarnya (baris terakhir kosong).

Baris 1 berisi resolusi sumbu x.

Resolusi adalah jarak per pixel.

Nah karena kita tahu tadi peta kita koordinatnya adalah

xmin = -180

xmax = 180

(coba liat lagi boundingbox nya om)

maka bentangan jarak adalah xmax – xmin , yaitu 180 dikurang -180, hasilnya adalah 360. lho kok bisa, bukan nya 180 dikurang 180 adalah nol? liat lagi baik baik roki gerung.

Namun, yang ditulis dibaris 1 adalah resolusinya, yaitu jarak bentang ini dibagi dengan width nya gambar. Nah, sebagai contoh, gambar z4.png beresolusi 10240×5120 pixels. Nah width nya adalah 10240 pixel.

resolusi sumbu x atau longitude nya adalah 360/10240

yaitu 0.03515625

Niat amat ngitungnya pake python …?

kalau pakai calc.exe, berhubung gw di Indonesia, windows saya pake koma sebagai pemisah desimalnya, makanya lebih enak pake python atau javascript kalau ngitung ini.

Kembali ke baris 1

kita sudah dapat angka 0.03515625 adalah resolusi horizontal atau resolusi x atau resolusi longitude gambar kita.

Ini adalah isi baris pertama world file kita.

Baris kedua dan ketiga isinya nol kalau gambar kita lurus

baris kedua dan ketiga isinya kemiringan sumbu x dan sumbu y nya. Berhubung gambar kita lurus saja, makanya diisi nol.

Baris keempat adalah minus resolusi sumbu Y

Nah, cara ngitungnya mirip dengan menghitung resolusi X tadi, cuma sekarang kita hitung resolusi vertikal gambar kita.

-1 * (ymax - ymin)/height

ymax kita adalah 90, ymin adalah minus 90, maka ymax kurang ymin adalah 180.

height atau tinggi pixel gambar kita adalah 5120.

-180/5120
-0.03515625

Baris ke lima adalah koordinat x gambar paling kiri atas.

nah, dari boundingbox, kita tahu koordinat paling atas adalah xmin

xmin kita adalah -180

Baris ke enam adalah koordinat y gambar paling kiri atas

kiri atas artinya adalah ymax. (ingat bahwa koordinat latitude itu ke atas bertambah, ke bawah berkurang. Makanya yang paling atas adalah YMAX nya, bukan YMIN ya

ymax kita adalah 90

Nah dari informasi 4 buah tadi, kita sudah bisa membuat sendiri world file yaitu

0.03515625
0
0
-0.03515625
-180
90

Sekarang simpan file teks tersebut dengan nama sesuai nama gambar kita.

Berhubung peta kita namanya z4.png, maka world file nya adalah z4.pgw

z4.wld juga boleh sebenarnya

kalau kita punya file japanisgir.JPG, maka file world nya adalah JGW

kalau GeoTIFF .tif maka world filenya adalah dot TFW atau boleh juga semua nya *.wld

Sekarang buka gambar kita dengan QGIS atau ArcGIS

Tambahkan sebuah SHP, misalnya pada kali ini saya masukkan admin00.shp, yaitu batas administrasi negara per tahun 2000.

Wow, keren kan … gambar kita pas dibawah peta kita. Presisi sekali.

756 Layer WMTS Landsat NASA

Bagi Anda yang mengerti WebGIS, tentu tahu tempe dengan Leaflet JS. Nah, sekarang sudah saya buatkan sedikit snippet untuk mengambil semua 756 Layer (bahkan sebahagian besar update tiap hari dan bisa diakses historynya). Silahkan lihat contekannya dari file Ms. Excel berikut:

Untuk tiap-tiap layer tersebut sudah saya bantu dikit JavaScript nya, sehingga nanti tinggal di tempel setelah deklarasi variabel map nya leaflet

```

var Agricultural_Lands_Croplands_2000 = L.tileLayer('https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/Agricultural_Lands_Croplands_2000/default/GoogleMapsCompatible_Level7/{z}/{y}/{x}.png'
,{attribution: '< a href="\'https :/ /gibs.earthdata.nasa.gov/colormaps/v1.3/Agricultural_Lands_Croplands_2000.xml\'">NASA'
,maxZoom:7
}).addTo(map);

```
var Agricultural_Lands_Pastures_2000 = L.tileLayer('https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/Agricultural_Lands_Pastures_2000/default/GoogleMapsCompatible_Level7/{z}/{y}/{x}.png'
,{attribution: '< a href="\'https: / /gibs.earthdata.nasa.gov/colormaps/v1.3/Agricultural_Lands_Pastures_2000.xml\'">NASA'
,maxZoom:7
});

Waduh …WordPress merusak kode saya …

Tapi, seharusnya kalau Anda sudah semester 5 ke atas sudah tempe banget dengan kode di atas.

Silahkan Anda coba satu persatu, masukin jadi tile layer Anda di Leaflet.

Caranya bisa dengan nama layer ditambahkan titik addTo(map)

contoh:

Agricultural_Lands_Pastures_2000.addTo(map)

Tentu ini diasumsikan anda membuat nama variabel map di Leaflet Anda sebagai map.

Namun, kalau ingin membuat pakai radio button, nanti pengguna bisa memilih milih basemap, boleh berikut contekannya:

    var baseMaps = {
"Croplands (Global Agricultural Lands, 2000)":Agricultural_Lands_Croplands_2000

//...
//tambahkan lagi semua layernya ciat ciat, dengan format: koma nama layer HTML nya, lalu titik dua, lalu namavariabel javascriptnya
//...

, "Tulisan" : namaVariableTileLayerNya
};

L.control.layers(baseMaps,checkboxedLayers).addTo(map);        

Jika ingin pake cebok, sehingga ngga bau, pengguna bisa centang ceklis nya, bisa menggunakan variabel checkboxedLayers … dua-dua nya (baseMaps dan checkboxedLayers) mesti ada dulu …

Silahkan pamerkan ke teman Anda … dijamin lebih bingung daripada Anda bingung baca ampe sini … hehehehehe

BTW, ngga pake skrinsyot berarti PALESU ™

Berikut skrinsot saya ….

Eh … BTW eniwey baswey, setelah melihat zoom nya hanya ampe segitu, dan dibandingkan satelit mata-mata DG, mungkin Anda terbersit pikiran … kok jelek banget hasil kerjaan NASA ya? Ya ngga lah .. kan resolusi yang dikasih ke kita … dan itu juga diambil dari satelit yang jauh orbitnya … bukan satelit mata-mata