Introduce
I am implementing the function of using Google Map API to draw maps in the project, in which there are a number of requests from customers that need to be done, so I am writing this article to share how to do those requests. Summarize the request of the Guest as follows
- Create a map with a mini map to change the view instead of the default button, when moving the main map, the mini map will also move.
- Create maps with markers, replace marker icons
- Hide Google logo, footer of Google Map
Mini map is a small map part of the Google Map map that we often use, it looks like the following figure:
Create Map from Google Map API
First we need to write the following HTML code
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 | <span class="token operator"><</span> <span class="token operator">!</span> <span class="token constant">DOCTYPE</span> html <span class="token operator">></span> <span class="token operator"><</span> html <span class="token operator">></span> <span class="token operator"><</span> head <span class="token operator">></span> <span class="token operator"><</span> title <span class="token operator">></span> Mini Google Map <span class="token operator"><</span> <span class="token operator">/</span> title <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">!</span> <span class="token operator">--</span> Include Google Map <span class="token constant">API</span> <span class="token operator">--</span> <span class="token operator">></span> <span class="token operator"><</span> script src <span class="token operator">=</span> <span class="token string">"https://maps.googleapis.com/maps/api/js?key=AIzaSyBIwzALxUPNbatRBj3Xi1Uhp0fFzwWNBkE&callback=initMap"</span> defer <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> head <span class="token operator">></span> <span class="token operator"><</span> body <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">!</span> <span class="token operator">--</span> Element tạo map chính <span class="token operator">--</span> <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token string">"map"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token comment">// Function initMap được gọi sau khi tải xong Google Map API, nó sẽ tạo một bản đồ mới</span> <span class="token keyword">function</span> <span class="token function">initMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> Map</span> <span class="token punctuation">(</span> document <span class="token punctuation">.</span> <span class="token function">getElementById</span> <span class="token punctuation">(</span> <span class="token string">"map"</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> center <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token operator">-</span> <span class="token number">33.91721</span> <span class="token punctuation">,</span> <span class="token number">151.2263</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// xác định vị trí trung tâm của map</span> zoom <span class="token operator">:</span> <span class="token number">8</span> <span class="token punctuation">,</span> <span class="token comment">// set zoom default là 8 (maximum là 20)</span> mapTypeControl <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> <span class="token comment">// Ẩn button thay đổi mapType mặc định </span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> <span class="token operator"><</span> style <span class="token operator">></span> #map <span class="token punctuation">{</span> height <span class="token operator">:</span> <span class="token number">100</span> <span class="token operator">%</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> html <span class="token punctuation">,</span> body <span class="token punctuation">{</span> height <span class="token operator">:</span> <span class="token number">100</span> <span class="token operator">%</span> <span class="token punctuation">;</span> margin <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">;</span> padding <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">;</span> position <span class="token operator">:</span> relative <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> style <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> body <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> html <span class="token operator">></span> |
Create markers
Next we need to create a list of markers by creating a fakeMarkers array, then running a loop to create the marker and info window as follows:
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <span class="token operator"><</span> script <span class="token operator">></span> <span class="token operator">...</span> <span class="token keyword">function</span> <span class="token function">initMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> Map</span> <span class="token punctuation">(</span> document <span class="token punctuation">.</span> <span class="token function">getElementById</span> <span class="token punctuation">(</span> <span class="token string">"map"</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> center <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token operator">-</span> <span class="token number">33.91721</span> <span class="token punctuation">,</span> <span class="token number">151.2263</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// xác định vị trí trung tâm của map</span> zoom <span class="token operator">:</span> <span class="token number">8</span> <span class="token punctuation">,</span> <span class="token comment">// set zoom default là 8 (maximum là 20)</span> mapTypeControl <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> <span class="token comment">// Ẩn button thay đổi mapType mặc định </span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> fakeMarkers <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91721</span> <span class="token punctuation">,</span> <span class="token number">151.2263</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 1'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91662347903106</span> <span class="token punctuation">,</span> <span class="token number">151.22879464019775</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 2'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.916365282092855</span> <span class="token punctuation">,</span> <span class="token number">151.22937399734496</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 3'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91665018901448</span> <span class="token punctuation">,</span> <span class="token number">151.2282474695587</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 4'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.919543720969806</span> <span class="token punctuation">,</span> <span class="token number">151.23112279762267</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 5'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91608037421864</span> <span class="token punctuation">,</span> <span class="token number">151.23288232673644</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 6'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91851096391805</span> <span class="token punctuation">,</span> <span class="token number">151.2344058214569</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 7'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91818154739766</span> <span class="token punctuation">,</span> <span class="token number">151.2346203981781</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 8'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> position <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> LatLng</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">33.91727341958453</span> <span class="token punctuation">,</span> <span class="token number">151.23348314155578</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> title <span class="token operator">:</span> <span class="token string">'Info Window 9'</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token comment">// Tạo mảng markers và mảng infoWindow</span> <span class="token keyword">const</span> markers <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> infoWindow <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token comment">// Duyệt vòng lặp fakeMarkers</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">;</span> i <span class="token operator"><</span> fakeMarkers <span class="token punctuation">.</span> length <span class="token punctuation">;</span> i <span class="token operator">++</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> markers <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> Marker</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> <span class="token comment">// Tạo item markeer</span> position <span class="token operator">:</span> fakeMarkers <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token punctuation">.</span> position <span class="token punctuation">,</span> icon <span class="token operator">:</span> <span class="token string">'https://developers.google.com/maps/documentation/javascript/examples/full/images/info-i_maps.png'</span> <span class="token punctuation">,</span> <span class="token comment">// Thay icon marker default</span> map <span class="token operator">:</span> map <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Tạo HTML cho content info window </span> <span class="token keyword">const</span> dom <span class="token operator">=</span> document <span class="token punctuation">.</span> <span class="token function">createElement</span> <span class="token punctuation">(</span> <span class="token string">'div'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> dom <span class="token punctuation">.</span> className <span class="token operator">=</span> <span class="token string">'gmap-info-window'</span> <span class="token punctuation">;</span> dom <span class="token punctuation">.</span> innerHTML <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string"><div class="gmap-info-title"></span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> fakeMarkers <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token punctuation">.</span> title <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string"></div></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">;</span> <span class="token comment">// Tạo các info </span> infoWindow <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">window <span class="token punctuation">.</span> google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> InfoWindow</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> content <span class="token operator">:</span> dom <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Thêm event khi click vào marker sẽ hiển thị lên info window tương ứng marker đó</span> markers <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">addListener</span> <span class="token punctuation">(</span> <span class="token string">"click"</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> infoWindow <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">open</span> <span class="token punctuation">(</span> map <span class="token punctuation">,</span> markers <span class="token punctuation">[</span> i <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> <span class="token operator">...</span> |
Create mini map
To create a mini map, I will create a new map anchored in an HTML element with id = “mini-map” with the minimap’s typeMap will be satellite type (the main map is in a roadmap by default). Next will add an event when clicking on the minimap will change the main map to satellite and on the mini map will change the typeMap to roadmap , specifically the code as follows:
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 | <span class="token operator"><</span> <span class="token operator">!</span> <span class="token operator">--</span> Element tạo mini map <span class="token operator">--</span> <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token string">"mini-map"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token comment">// JS tạo mini map mà thêm event</span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token operator">...</span> <span class="token comment">// Tạo mini map</span> <span class="token keyword">const</span> mapMini <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google <span class="token punctuation">.</span> maps <span class="token punctuation">.</span> Map</span> <span class="token punctuation">(</span> document <span class="token punctuation">.</span> <span class="token function">getElementById</span> <span class="token punctuation">(</span> <span class="token string">"mini-map"</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> zoomControl <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> mapTypeControl <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> fullscreenControl <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> draggable <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> zoom <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> mapTypeId <span class="token operator">:</span> <span class="token string">'satellite'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Đặt giá trị center của mini map lấy center của map lớn</span> mapMini <span class="token punctuation">.</span> <span class="token function">setCenter</span> <span class="token punctuation">(</span> map <span class="token punctuation">.</span> <span class="token function">getCenter</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Thêm event khi click mini map thì đổi mapType của 2 map cho nhau</span> mapMini <span class="token punctuation">.</span> <span class="token function">addListener</span> <span class="token punctuation">(</span> <span class="token string">'click'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> miniType <span class="token operator">=</span> mapMini <span class="token punctuation">.</span> <span class="token function">getMapTypeId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> newMiniType <span class="token operator">=</span> miniType <span class="token operator">===</span> <span class="token string">'satellite'</span> <span class="token operator">?</span> <span class="token string">'roadmap'</span> <span class="token operator">:</span> <span class="token string">'satellite'</span> <span class="token punctuation">;</span> map <span class="token punctuation">.</span> <span class="token function">setMapTypeId</span> <span class="token punctuation">(</span> miniType <span class="token punctuation">)</span> <span class="token punctuation">;</span> mapMini <span class="token punctuation">.</span> <span class="token function">setMapTypeId</span> <span class="token punctuation">(</span> newMiniType <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Đặt lại giá trị center của mini map khi map lớn thay đổi vị trí</span> map <span class="token punctuation">.</span> <span class="token function">addListener</span> <span class="token punctuation">(</span> <span class="token string">'center_changed'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> mapMini <span class="token punctuation">.</span> <span class="token function">setCenter</span> <span class="token punctuation">(</span> map <span class="token punctuation">.</span> <span class="token function">getCenter</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
The result will be as shown below
Add CSS hidden footer and Google logo
To hide, we need to override the default CSS of Google Map, the code is as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token operator">...</span> <span class="token operator"><</span> style <span class="token operator">></span> a <span class="token punctuation">[</span> href <span class="token operator">^=</span> <span class="token string">"http://maps.google.com/maps"</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> a <span class="token punctuation">[</span> href <span class="token operator">^=</span> <span class="token string">"https://maps.google.com/maps"</span> <span class="token punctuation">]</span> <span class="token punctuation">{</span> display <span class="token operator">:</span> none <span class="token operator">!</span> important <span class="token punctuation">}</span> <span class="token punctuation">.</span> gmnoprint a <span class="token punctuation">,</span> <span class="token punctuation">.</span> gmnoprint span <span class="token punctuation">,</span> <span class="token punctuation">.</span> gm <span class="token operator">-</span> style <span class="token operator">-</span> cc <span class="token punctuation">{</span> display <span class="token operator">:</span> none <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">.</span> gmnoprint div <span class="token punctuation">{</span> background <span class="token operator">:</span> none <span class="token operator">!</span> important <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> style <span class="token operator">></span> |
You can see the results in the following link
Conclude
Hopefully the article can help you learn about Google Map API, if you have any questions or suggestions, please write them below the comment, thanks!