Monday, 22 May 2017

[開發筆記] 離線地圖 Offline Map with GeoServer and Leaflet.js

現在網路地圖應用越來越多,可是很多時候會遇到沒有網路狀況,這個時候Google Map、Open Street Map、 Bind MAP 等等都是無法使用的。
但是我們又不太可能像Google它們一樣架出一個GeoServer然後有很多的圖資,這樣的情況下就需要離線地圖,
我這裡用的是把一張tiff圖檔當底圖,然後架一個geoServer提供給瀏覽器來讀取,架構如下圖
2016-01-22_142209.jpg

下載與安裝GeoServer  (Download & install GeoServer)

Download : http://geoserver.org/download/

下載好後,就跟著下面步驟安裝Following the below steps to install. 

2016-01-18_105550.jpg 
2016-01-18_105641.jpg
這裡你可以修改安裝的目錄路徑 (You can change the install location. I used to install in programs folder. )
2016-01-18_105727.jpg
2016-01-18_105754.jpg
GeoServer需要Java,所以這裡要指定Java的目錄,如果沒有安裝,請點擊URL去下載安裝。
GeoServer安裝程式會確認是否有安裝。
GeoServer need Java. If you did not have it, please down and install java.
2016-01-18_105819.jpg
你可以修改你的圖資目錄的路徑,因為有電腦有存取的權限問題。
2016-01-18_105852.jpg
User account and Password. You can change them if you want. 
2016-01-18_105921.jpg
2016-01-18_105950.jpg
I change the default port number to 8085
GeoServer 是一台網路主機,所以需要port. 我特地修改成8085以免跟其他程式有相沖

2016-01-18_110018.jpg
啟動GeoServer的方式。
It depends on how you like to use GeoServer.
如果你是用來開發測試,建議使用"Run manually" ,手動啟動
If you just install GeoServer for development, I recommend to select “Run manually”
如果你是用來當正式環境運行,建議使用"Install as a service" ,自動啟動

If you just install GeoServer for production environment, select “Install as a service”
2016-01-18_110138.jpg
2016-01-18_110211.jpg
確認沒有問題,就按install
2016-01-18_110229.jpg

2016-01-18_110320.jpg
GeoServer
啟動GeoServer
Start --> All apps --> Start GeoServer
2016-01-21_160932.jpg
A window will pop up, Please wait for that it done.This window cannot be closed
跳出一個視窗,請等他執行完畢。 這個視窗不能關閉
2016-01-21_161209.jpg
GO TO GEOSERVER ADMIN PAGE
開啟GeoServer管理頁面
2016-01-21_164722.jpg
It will redirect to GeoServer Web Admin Page and login into admin page. If you did not change defaulte account and password, it will be admin and geoserver
開啟後就登入 admin 頁面。 如果你沒有改預設帳號跟密碼, 帳號是admin 密碼是geoserver

2016-01-21_165405.jpg
Admin page:
2016-01-21_165725.jpg
Add layer
the next step is to create a layer which we want to display.
The step is : Workplace --> Stores --> Layers
下一步我們要建立一個圖層。順序是 Workplace --> Stores --> Layers
Create a Workplace
Select “Workspace” on left menu
在左選單上選 “Workspace”
2016-01-21_170004.jpg
Click “Add new workspace”
點擊 “Add new workspace”
2016-01-21_170446.jpg
Type in the Name and Namespace URL

They are just a name. I don’t know what Namespace URL use for.
輸入你要的名稱和 Namespace URL(隨你意思取)
2016-01-21_170645.jpg
Create a STORE
Select store on the left menu

Click “Add new Store”
在左選單上選"Store "
點擊 “Add new Store”
2016-01-21_183805.jpg
Click “GeoTIFF”
點擊 “GeoTIFF”
2016-01-21_183931.jpg
Fill up the Basic Store Info and then click “Save” button
Workspace : hoc
Data Source Name: singapore map
URL : file://C:\MapData\SG\SG.tif  (select a image file you want to show)

Enable “Enabled”
2016-01-22.png 
click publish
點擊"Publish"
2016-01-18_133645.jpg 
Edit Layer
2016-01-18_133831.jpg
Save it without change
直接儲存不用修改
2016-01-18_133920.jpg
VIEW LAYER 檢視圖層
Select “Layer Preview” on the left menu and click "OpenLayers"
左選單上選 “Layer Preview” and 點擊 "OpenLayers"
2016-01-22_093249.jpg
A window will pop up 
檢視視窗就出現,等圖片出來
2016-01-22_094106.jpg
LEFTLET & GEOSERVER
Download example file : https://github.com/kennethhutw/OfflineMapWithGeoSe...
下載範例檔: https://github.com/kennethhutw/OfflineMapWithGeoServerAndLeaflet
 
<!DOCTYPE html>
<html>
<head>
    <title>Leaflet Leaflet with GeoServer Example</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" />
</head>
<body>
    <div id="map" style="width: 600px; height: 400px"></div>
    <script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script>
    <script>
        var map = L.map('map').setView([1.3571318,103.8080804], 13);
        mapLink = '<a href="http://www.kenneth.net">(Kenneth)</a>';
        L.tileLayer.wms("http://localhost:8080/geoserver/hoc/wms", {
                layers: 'hoc:SG',
                format: 'image/png',
                transparent: true,
                version: '1.1.0',
                attribution: "Hu ChiaWei "+mapLink
            }).addTo(map);    
        L.marker([1.3571318,103.8080804]).addTo(map)
            .bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();
        var popup = L.popup();
        function onMapClick(e) {
            popup
                .setLatLng(e.latlng)
                .setContent("You clicked the map at " + e.latlng.toString())
                .openOn(map);
        }
        map.on('click', onMapClick);
    </script>
</body>
</html>
Result
2016-01-22_160213.jpg 

SCHOTT ZWIESEL 德國蔡司

 我換到 7-SEVEN的SCHOTT ZWIESEL 德國蔡司香檳杯了耶。
 20140708_035239.jpg 20140708_035316.jpg
最近7-SEVEN推出活動集點換SCHOTT ZWIESEL 德國蔡司無鉛水晶玻璃杯,SCHOTT ZWIESEL 德國蔡司無鉛水晶玻璃百貨公司一件要賣500起跳,所以這次集點應該算是很划算的,換得應該是VINA系列中的杯子(如果我錯了,請讓我知道)
http://shopping.pchome.com.tw/prod/CAAL8X-A82825371
有查一下PCHOME~跟7-11香檳杯同款網路賣價~六入一組~原價3300~特價2640

對於相機迷來說,透過萊卡(Leica)與蔡司(Zeiss)鏡頭看到的,是兩個截然不同的世界,萊卡鏡片讓影像顯得溫暖飽滿,似乎一切都變得更加美好, 而蔡司鏡片的銳利和鮮明,卻無情地將世界的美醜纖毫畢露地全暴露出來。無論你偏愛那一個,那是兩個存在於我們肉眼之外,屬於萊卡與蔡司所詮釋的影像世界,但是蔡司還提供另一個方式來詮釋世界,透過酒杯。 當我一開始嘗試品酒時,本來認為酒杯都是一樣,直到有次機會用不同的酒杯去品嘗同一支酒時,才發現酒杯也是影響品酒的一環,會帶給我不同的感受(或許我喝太多也不一定 ),希望能用所有蔡司所有系列的酒杯來品嘗一支酒,看看有何不同 (有人願意借我嗎)。

SCHOTT ZWIESEL WebSite
http://marken.zwiesel-kristallglas.com/shop/de/cms/shop/schott/start.html

Schott Zwiesel
1927年,德國蔡司集團旗下的Schott & Gen和超過130年的水晶玻璃生產者Zwiesel合併,創造了專業的酒杯品牌Schott Zwiesel。使用鈦鋯化合物開發出無毒、無污染的Tritan®水晶玻璃材質,不僅環保,且有著卓越的透澈度,在良好的保養之下,能夠長期保有宛若鑽 石般的晶燦和光澤感,亦可經洗杯機清洗且耐刮、耐磨。在杯身設計上也參考專業人士意見,設計出兼具美感和高度實用性的水晶玻璃杯,獲得許多星級飯店和餐飲 業者的選用。

傳統的定義是玻璃含金屬(氧化鉛)超過24%叫水晶杯,沒超過24%叫水晶玻璃杯。因為氧化鉛是有害人體的物質,所以德國蔡司以氧化鈦(Tritan)取代氧化鉛,但仍能保有水晶杯的特性(輕薄、光滑、透明)。

PURE系列
專為實用的美食品味體驗而設計,豐富的款式能滿足主人和客人的一切需求。向外擴張的杯身能放大空氣接觸面,進而幫助酒款呼吸。酒類從業人員也能透過各種杯型盡情展現酒款特色或精彩的調酒風格。
 PURE系列.jpg  
DIVA系列
您可以在優雅的Diva中感受到情感的傳遞,不僅品質出色,更結合了古典與創新的風格。細長的杯腳方便拿取,也襯托出不凡的品味。杯身設計充滿和諧感,並能完美表現酒款的複雜度。Diva系列是蔡司水晶玻璃杯品的經典杯款,據說當初杯腳的設計理念是來自於女人優雅修長的小腿,絕對是專業級品酒人仕的最愛。
DIVA系列.jpg
VINA系列  
 

簡約優雅又富含巧妙細節。2003年春天出自設計師Dieter Stang之手VINA誕生了。VINA系列表達出一個潔淨及清晰的理念,也就是集中在一個系列裡具備將酒最寬廣的香味及味道能夠提昇並呈現出來幫助您細細品味酒款的每一種香氣、口感變化和所有不容錯過的細節。
VINA系列.jpg  
CLASSICO系列
簡單優雅的設計風格讓Classico系列歷久彌新,堅韌的材質擁有高度耐光性,輕盈且更能適用強力清洗,適用於正式的晚宴中。
CLASSICO系列.jpg  
MONDIAL系列
Mondial優雅的弧度和手握時的順暢度最受人青睞,無論是紅白酒或氣泡香檳杯款的設計都相當簡潔獨特。
MONDIAL系列.jpg  
CONGRESSO系列
在更需專注於感受酒款的某些特性,或品嚐風格細膩的酒款時,同時Congresso也擁有簡單大方的造型和卓越的清澈度。
CONGRESSO系列.jpg  

2016旅行 2016.9.11 奥匈捷東歐 :匈牙利 -布達佩斯

布達佩斯(匈牙利語:Budapest,發音:'budɒpɛʃt)是匈牙利首都,也是該國主要的政治、商業、運輸中心和最大的城市,也被認為是東歐一個重要的中繼站。布達佩斯的人口在1980年代中期曾達到高峰207萬(布達佩斯都會區人口達到2,451,418人),目前僅有約170萬居民,它是歐洲聯盟第七大城市。該市是在1873年由位於多瑙河右岸(西岸)的城市布達和古布達以及左岸(東岸)城市佩斯合併而成的。此前沒有布達佩斯這個稱呼,過去人們一般將它稱為佩斯-布達(Pest-Buda)

建議:
1.兩天一夜的旅行我認為剛剛好,布達佩斯的景點也差不多可以走完 。
2.旅店最好選擇瓦采街附近Vaci Utca 交通方便到每一個景點都近。
3.注意國會大廈跟馬提亞斯教堂都要注意開放時間,尤其是國會大廈要事先預訂票。
4.布達皇宮建議搭纜車上去就好,上面很多地方可以逛,慢慢逛下來就好了。
5.溫泉建議安排早上去,一來人少 二來早起泡澡清爽,我是去塞切尼溫泉交通方便地鐵站一上來就到了。
6. 地鐵車票,就是只有一個價錢,不用擔心從那一站到那一站多少價錢。
Hello 布達佩斯~~ 來這裡應該跳一下啊
IMG_20160911_155444_BURST2.jpg
瓦采街是布達佩斯主要鬧區,可以逛街晚餐
DSC00011.JPG
鎖鏈橋真的經典優雅
DSC00026.JPG
DSC00104.JPG
纜車好多人排隊而且好熱喔,上去後是一個類似小鎮
DSC00029.JPG
皇宮的地圖,可以看出來上面是很大的
DSC00028.JPG
馬提亞斯教堂真的很美莊嚴,只是有點太乾淨了,就像是剛建好一樣
DSC00053.JPG
DSC00077.JPG
從皇宮看著國會大廈 
DSC00072.JPG
夜晚的皇宮大廈,真的很美
DSC00138.JPG

IMG_20160911_161730_HDR.jpg
IMG_20160911_162428_HDR.jpg
中央市場門口,就像是火車站一樣。
DSC00152.JPG
DSC00154.JPG
這個是車票的打卡機,第一次來真的沒注意到,是站員告知我在此打卡,基本上是不會有人管,但是最好還是乖乖的買票打卡。
IMG_20160911_121552_HDR.jpg
IMG_20160911_120203_HDR.jpg
這是車票,就是只有一個價錢,不用擔心從那一站到那一站多少價錢。
IMG_20160911_130715_HDR.jpg
塞切尼溫泉門口,我起一大早過來
IMG_20160912_064619.jpg
IMG_20160912_074613.jpg
已經有很多人在這裡泡溫泉了
IMG_20160912_073229.jpg
天阿超可愛的,他們真的太厲害怎麼弄持這樣,很想買一份來吃,可以店員告訴我還沒營業。
IMG_20160912_082346.jpg
夜晚的國家歌劇院 1984年開幕,是世界上最美的歌劇院之一
DSC00110.JPG
DSC00220.JPG
DSC00230.JPG
晚上搭city tour 遊覽布達佩斯
DSC00120.JPG

世界最美的咖啡廳 第一名:匈牙利 布達佩斯的紐約咖啡廳─Café New York

IMG_20160912_130629.jpg















IMG_20160912_141318.jpg






























IMG_20160912_124331.jpg
DSC00204.JPG
DSC00198.JPG
DSC00163.JPG
蓋雷提。帕亞德瓦爾火車站
IMG_20160912_182259.jpg
取票機
DSC00251.JPG
DSC00249.JPG
DSC00259.JPG

how-to-recursively-create-subfolder-in-each-folder-of-a-directory-in-cmd

test.cmd: @echo off setlocal for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do ( rem enter the directory pushd %%a echo...