Thursday, January 6, 2022

19-Python Basemap: Plot Peta Negeri-Negeri Di Malaysia Menggunakan Arcgis Image

 Assalamualaikum wbt dan jumpa lagi.

Post kali ini kita akan melihat lanjutan daripada post ke-18 tetapi menggunakan World Physical Map Service menggunakan EPSG Geodetic Parameter Dataset atau Coordinate System Worldwide. No EPSG untuk Malaysia adalah 4326. Untuk contoh ini saya akan menggunakan pilihan service World_Physical_Map


## start copy from here
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
from matplotlib.patches import Polygon

plt.figure(figsize = (9, 8))

## CREATE AREA MAP
minlon = 99.0
maxlon = 120.0
minlat = 0.0
maxlat = 9.0

map = Basemap(projection='mill',llcrnrlon=minlon ,llcrnrlat=minlat,
    urcrnrlon=maxlon ,urcrnrlat=maxlat, resolution = 'i', 
    epsg = 4326)

map.drawcoastlines(linewidth=0.1)
map.drawcountries(linewidth=0.1)

map.drawparallels(np.arange(-90,90,2),fontsize=10,
   labels=[1,0,0,0],color='black',linewidth=0.05)

map.drawmeridians(np.arange(-180,180,2),fontsize=10,
labels=[0,0,0,1],color='black',linewidth=0.05)

## SILA TUKARKAN SERVICE PILIHAN ANDA

map.arcgisimage(service='World_Physical_Map', epsg = 4326, xpixels = 5000, verbose= False)

## SETTING SHAPEFILE ANDA
path='D:/PROJEK-SHAPEFILE/Data-GADM/'

map.readshapefile(path+'gadm36_MYS_shp/gadm36_MYS_1', name='NAME_1', drawbounds=True)

###### PLOT AND COLOR STATES
ax = plt.subplot()
patches   = []
#
for info, shape in zip(map.NAME_1_info, map.NAME_1):
    if info['NAME_1'] == 'Sarawak':
        patches.append( Polygon(np.array(shape), True) )
#
ax.add_collection(PatchCollection(patches, facecolor='m', edgecolor='k', linewidths=0.5, zorder=2))

### PLOT TEKS NAMA NEGERI
labels = ['Sarawak']

lons = [110.0]
lats = [4.0]
x,y = map(lons, lats)
for label, xpt, ypt in zip(labels, x, y):
    plt.text(xpt, ypt, label,fontsize=12)

## PLOT TITLE IMEJ
fname="Peta Malaysia"
plt.title(fname, fontsize=18)

#################AUTO FILE NAMING######################
import inspect
frame = inspect.currentframe()
path = inspect.getfile(frame)
fname = path.split('.')[0]
plt.savefig(fname + ".png",dpi=500, bbox_inches='tight')
#######################################################
plt.show()

##end copy script here #####

Paparan Imej:

Catatan:
a) Anda mempunyai pilihan service seperti berikut :
  1. World_Physical_Map
  2. World_Shaded_Relief
  3. World_Topo_Map
  4. NatGeo_World_Map
  5. ESRI_Imagery_World_2D
  6. World_Street_Map
  7. World_Imagery
  8. ESRI_StreetMap_World_2D
  9. Ocean_Basemap
Sila tetapkan nama pilihan service di barisan :
map.arcgisimage(service='World_Physical_Map', epsg = 4326, xpixels = 5000, verbose= False)

Anda juga boleh meningkatkan ketajaman pixel pada xpixels mengikut kesesuaian.

Anda boleh mencuba untuk mendapatkan peta yang menarik menggunakan pilihan service-service tersebut. Bacaan lanjut boleh diperolehi di laman web berikut:
http://qingkaikong.blogspot.com/2016/06/nice-python-basemap-background.html

Selamat mencuba!


No comments:

Post a Comment

23-Python : Plotting Temperature Histogram

  Assalamualaikum wbt dan jumpa lagi. Post kali ini kita akan cuba untuk membuat analisa taburan suhu purata setiap data yang telah dibelakk...