隨著地圖應用的普及化,開放地理空間協會(OGC, Open Geospatial Consortium)及 開源地理空間基金會(OSGeo, Open Source Geospatial Foundation)相繼製訂很多公開地圖存取標準,例如: OGC-1999-網路地圖服務 (WMS, Web Map Service) OGC-2004-網路圖徵服務(WFS, Web Feature Service) 0SGeo-2006-圖磚服務 (TMS, Tile Map Service) OGC-2010-網路圖磚服務 (WMTS, Web Map Tile Service) 台灣地區目前提供免費地圖服務的主要有如下兩機構,2019.7.截止地圖列表如後。 可利用JOSM或QGIS免費地圖軟體純觀看,及利用OpenLayers或Leaflet免費JavaScript套件內嵌於網頁呈現。 A.國土測繪中心提供的台灣WMS地圖清單: (共計46種地圖) http://wms.nlsc.gov.tw/wms?SERVICE=WMS&REQUEST=GetCapabilities - 6種 縣市界 (CITY) 鄉鎮區界 (TOWN) 村里界 (Village) 段籍圖 (LANDSECT) 地政事務所轄區圖 (LandOffice) 各級學校範圍圖 (SCHOOL) - 2種 1/5000基本地形圖 (B5000) 1/5000圖幅框 (MB5000) - 9種 坡向圖 (MOI_ASPECT) 等高線圖(2003-2005) (MOI_CONTOUR) 等高線圖(2010-2015) (MOI_CONTOUR_2) 陰影圖 (MOI_HILLSHADE) 渲染圖 (MOI_SHADERMAP) 坡度圖-30%坡(2003-2005) (MOI_SLOPEP_GT30) 坡度圖-30%坡(2010-2015) (MOI_SLOPEP_GT30_2) 坡度圖-7級(2003-2005) (MOI_SLOPEP_LV7) 坡度圖-7級(2010-2015) (MOI_SLOPEP_LV7_2) - 10種 國土利用調查成果圖 (LUIMAP) 國土利用調查-1類農業 (LUIMAP01) 國土利用調查-2類森林 (LUIMAP02) 國土利用調查-3類交通 (LUIMAP03) 國土利用調查-4類水利 (LUIMAP04) 國土利用調查-5類建築 (LUIMAP05) 國土利用調查-6類公共 (LUIMAP06) 國土利用調查-7類遊憩 (LUIMAP07) 國土利用調查-8類礦鹽 (LUIMAP08) 國土利用調查-9類其他 (LUIMAP09) - 2種 正射影像圖(通用) (PHOTO2) 正射影像(混合) (PHOTO_MIX) - 17 種 臺灣通用電子地圖 (EMAP) 臺灣通用電子地圖(灰階) (EMAP01) 臺灣通用電子地圖透明 (EMAP2) 臺灣通用電子地圖(套疊等高線) (EMAP5) 臺灣通用電子地圖(套疊等高線)opendata, 最大比例尺一萬八千分之一 (EMAP5_OPENDATA) 臺灣通用電子地圖(不含等高線) (EMAP6) 臺灣通用電子地圖(不含等高線)opendata, 最大比例尺一萬八千分之一 (EMAP6_OPENDATA) taiwane-map(transparent) (EMAP7) taiwane-map(en) (EMAP8) 臺灣通用電子地圖(無鐵公路) (EMAP9) 臺灣通用電子地圖透明(無門牌) (EMAP12) 臺灣通用電子地圖(無門牌) (EMAP15) 臺灣通用電子地圖(不含等高線及門牌) (EMAP16) 臺灣通用電子地圖(高dpi字) (EMAP96) taiwan e-map(new) (EMAP97) 臺灣通用電子地圖(新) (EMAP98) 臺灣通用電子地圖(無文字) (EMAPX99) B.中研院提供的台灣WMTS地圖清單: (共計48種地圖) http://gis.sinica.edu.tw/tileserver/wmts 1897-日治臺灣假製二十萬分一圖-1:200,000 (JM200K_1897) 1899-日治臺灣全圖-1:400,000 (JM400K_1899) 1901-日治行政區-廳(1900年代) (Admin_1901a) 1901-日治行政區-堡里(1900年代) (Admin_1901b) 1901-日治行政區-街庄(1900年代) (Admin_1901c) 1904-日治臺灣堡圖(明治版)-1:20,000 (JM20K_1904) 1905-日治臺灣圖-1:100,000 (JM100K_1905) 1914-日治官有林野圖(臺東廳) (Map_LSB1_Taitung) 1914-日治官有林野圖(花蓮港廳) (Map_LSB1_Hualien) 1916-日治蕃地地形圖-1:50,000 (JM50K_1916) 1920-日治地形圖(總督府土木局)-1:50,000 (JM50K_1920) 1921-日治地形圖-1:25,000 (JM25K_1921) 1921-日治臺灣堡圖(大正版)-1:20,000 (JM20K_1921) 1924-日治地形圖(陸地測量部)-1:50,000 (JM50K_1924) 1924-日治地形圖(陸地測量部)-1:50,000 (JM50K_1924_new) 1930-日治行政區-州廳(1930年代) (Admin_1930a) 1930-日治行政區-郡市(1930年代) (Admin_1930b) 1930-日治行政區-街庄(1930年代) (Admin_1930c) 1932-二十萬分一帝國圖(臺灣部分) (JM200K_1932) 1934-日治臺灣全圖(第三版)-1:300,000 (JM300K_1934) 1936-五十萬分一輿地圖(臺灣部分)-1:500,000 (JM500K_1936) 1939-日治臺灣全圖(第五版)-1:300,000 (JM300K_1939) 1942-日治二萬五千分之一地形圖(昭和修正版) (JM25K_1942) 1944-日治地形圖(航照修正版)-1:25,000 (JM25K_1944) 1944-美軍地形圖-1:50,000 (AM50K_1944) 1945-美軍繪製臺灣城市地圖 (AMCityPlan_1945) 1945-美軍航照影像(1945/6/17攝) (Taipei_aerialphoto_1945) 1956-臺灣土地利用及林型圖 (1956_Landuse) 1956-臺灣地形圖-1:50,000 (TM50K_1956) 1966-臺灣省水利工程、水文站及基準點位置圖 (TM50K_1966) 1987-臺灣地形圖-1:100,000 (TM100K_1987) 1989-臺灣經建1版地形圖-1:25,000 (TM25K_1989) 1990-臺灣經建1版地形圖-1:50,000 (TM50K_1990) 1993-臺灣經建2版地形圖-1:25,000 (TM25K_1993) 1996-臺灣經建2版地形圖-1:50,000 (TM50K_1996) 2001-臺灣經建3版地形圖-1:25,000 (TM25K_2001) 2003-臺灣經建3版地形圖-1:50,000 (TM50K_2003) 2003-臺灣經建4版地形圖-1:25,000 (TM25K_2003)
wmts/wms maps of taiwan from sinica/nlsc
steps for setting up an osm-style map server from OsmHackTW
在 GitHub 開源平台上,OsmHackTW 提供許多台灣相關的地圖資源。 其中,openstreetmap-tiles-docker 專案利用docker容器建立本地端開放街圖標準樣式的台灣地圖服務。 以下介紹如何快速建立此服務映像檔及啟動服務的方法: 1.下載映像檔製作環境 利用瀏覽器連線到網址 https://github.com/sekewei/openstreetmap-tiles-docker 點選 【Clone or Download / Download ZIP】,將下載的壓縮環境檔解開 若有安裝 git 開發環境,也可使用下列 git 指令下載製作環境 git clone https://github.com/sekewei/openstreetmap-tiles-docker.git 2.製作地圖服務映像檔 進入製作環境的資料夾,利用如下 docker 指令製作地圖服務映像檔 cd openstreetmap-tiles-docker docker build -f ./Dockerfile -t twstd:latest . 3.初始化地圖資料庫 3.1.啟動容器,執行資料庫初始化腳本 docker run -it -v /docker/osm-postgresql:/var/lib/postgresql --name twstd twstd:latest /bin/bash cd /usr/local/sbin/ ./run initdb ./run startdb ./run createuser ./run createdb 3.2.下載台灣地圖資料,匯入資料庫 wget -O /data/import.pbf http://download.geofabrik.de/asia/taiwan-latest.osm.pbf ./run import 3.3.含圖資存成新版映像檔 暫時跳離容器終端機可使用 Ctrl-p + Ctrl-q docker commit -m full_loaded twstd twstd:latest 4.啟動地圖服務容器 利用如下指令啟動地圖服務容器 docker run -it -p 80:80 -v /docker/osm-postgresql:/var/lib/postgresql --name twstd twstd:latest cd /usr/local/sbin/ ./run startservices 5.測試地圖服務 利用瀏覽器連線到本地主機80號埠測試地圖服務,點選'本地街圖'選項 http://localhost 6.更新圖資 利用如下指令來更新台灣區地圖資料 docker attach twstd cd /usr/local/sbin/ ./run startdb # 若執行updatemap出現資料庫連線錯誤,須先啟動資料庫 ./run updatemap Ctrl-p + Ctrl-q 註: 1. 此服務的設計,利用-v參數將容器內地圖資料庫目錄 /var/lib/postgresql 連結到主機目錄/docker/osm-postgresql,方便主機獨立維護圖資。 2. 如下兩個台灣地圖服務專案的差異為地圖樣式不同: 開放街圖標準樣式: https://github.com/sekewei/openstreetmap-tiles-docker 開放街圖明亮樣式: https://github.com/sekewei/docker-opentileserver
how to build an osm map server for taiwan on docker
最近集眾人智慧的開放街圖(OpenStreetMap)很熱門,以下介紹一個簡便架設台灣區 OSM 地圖伺服器的方法。 前提是需先安裝 docker 容器環境,例如: Windows 10 上安裝 docker for windows 容器軟體。 有了 docker 容器環境之後,取圖資及架網站的步驟如下: 0.主機打開命令列工具,例如: Windows 10 的 powershell 命令列工具。 以下分成手動及自動安裝兩種說明,手動說明方便理解安裝步驟,自動說明方便快速安裝。 A.【手動安裝法】以下利用原始映像檔,手動建立新映像檔taiwan-osmbright:v1 1.主機下載 dmakan/ubuntu-opentileserver:v1 原始映像檔,啟動容器命名 twbright > docker pull dmakan/ubuntu-opentileserver:v1 > docker run -t -i -p 80:80 --name twbright dmakan/ubuntu-opentileserver:v1 註: -t for terminal, -i for interactive 表示取得容器的終端機互動視窗,可用 Ctrl-p Ctrl-q 退回主機 註: -p host_port:container:port for port mapping 先主機埠,後容器埠,可將容器埠對應到主機埠,對外提供服務 2.容器修改 opentileserver.sh 批次檔,讓資料庫接受 utf8 文字編碼 # vi /opentileserver/opentileserver.sh 原始 if [ $(psql -Upostgres -c "select datname from pg_database" | grep -m 1 -c ${OSM_DB}) -eq 0 ]; then 之前新增一行 psql -Upostgres -c "DROP DATABASE IF EXISTS ${OSM_DB};" 原始 psql -Upostgres -c "create database ${OSM_DB} owner=${OSM_USER};" 修改 psql -Upostgres -c "CREATE DATABASE ${OSM_DB} TEMPLATE template0 ENCODING 'UTF8' OWNER ${OSM_USER};" 原始 CREATE EXTENSION hstore; 修改 CREATE EXTENSION IF NOT EXISTS hstore; 原始 CREATE EXTENSION postgis; 修改 CREATE EXTENSION IF NOT EXISTS postgis; 註: 要先刪除原有資料庫,再重新建立一個接受 utf8 統一碼的資料庫 註: OSM_USER 預設資料庫用戶名為 tile,OSM_DB 預設資料庫名稱為 gis 3.容器執行 opentileserver.sh 批次檔,下載套件及圖資 # cd /opentileserver/ # ./opentileserver.sh web bright http://download.geofabrik.de/asia/taiwan-latest.osm.pbf 註: 紅色州名/國名可替換成任何想提供服務的國家,詳http://download.geofabrik.de/ 註: geofabrik每日更新一次圖資,只要再執行 opentileserver.sh 批次檔,就重新下載最新圖資,覆寫原有資料庫內容 4.容器修改 OSMBright.xml 樣式檔,讓形狀檔路徑正確 利用串流修改指令sed進行字串取代 # sed -ie 's/pulated_places/pulated_places_simple/g' /usr/local/share/maps/style/OSMBright/OSMBright.xml 或者利用編輯器vi進行修改 # vi /usr/local/share/maps/style/OSMBright/OSMBright.xml 原始 <Parameter name="file"> <![CDATA[/usr/local/share/maps/style/osm-bright-master/shp/ ne_10m_populated_places/ne_10m_populated_places.shp]]> </Parameter> 修改 <Parameter name="file"> <![CDATA[/usr/local/share/maps/style/osm-bright-master/shp/ ne_10m_populated_places_simple/ne_10m_populated_places_simple.shp]]> </Parameter> 5.容器開啟資料庫,網站,圖磚服務 # service postgresql restart # service apache2 restart # service renderd restart 6.主機開啟瀏覽器驗證 http://localhost/openlayers-example.html 7.主機儲存容器內容為新映像檔,供下回使用 > docker commit twbright taiwan-osmbright:v1 # 新映像檔命名 taiwan-osmbright:v1 > docker stop twbright # 關閉容器 > docker rm twbright # 刪除容器 8.主機利用新映像檔,開啟容器,仍命名為 twbright,提供地圖服務 > docker run -i -t -p 80:80 --name twbright taiwan-osmbright:v1 http://localhost:80/openlayers-example.html B.【自動安裝法】以下利用Github映像檔製作環境包快速製作新映像檔taiwan-osmbright:v1 1.下載映像檔製作環境包 利用瀏覽器連線到網址 https://github.com/sekewei/docker-opentileserver 點選下載映像檔製作環境包 taiwan-osmbright_v1_build.tar.gz 2.製作地圖服務映像檔 利用如下指令製作地圖服務映像檔,其中,- 表示映像檔製作環境取自導向(<)進來的環境包檔案, -f ./Dockerfile 表示製作步驟檔位於映像檔製作環境之路徑 > docker build -f ./Dockerfile -t taiwan-osmbright:v1 - < taiwan-osmbright_v1_build.tar.gz 3.啟動地圖服務容器 利用如下指令啟動服務容器,命名twbright,介接到主機80號埠 > docker run -it -p 80:80 --name twbright taiwan-osmbright:v1 按Ctrl-p + Ctrl-q跳出容器終端機 4.測試地圖服務 利用瀏覽器連線到本地主機80號埠測試地圖服務 http://localhost:80/openlayers-example.html 註: 如果要修改初始地圖顯示位置為(lon,lat),方法如下: # vi /var/www/html/openlayers-example.html var toProjection = new OpenLayers.Projection("EPSG:900913"); // spherical mercator projection var fromProjection = new OpenLayers.Projection("EPSG:4326"); // WGS 1984 var position = new OpenLayers.LonLat(lon,lat).transform(fromProjection, toProjection); var zoom = 15; map.setCenter(position, zoom); 5.更新地圖資料 利用如下指令連入容器終端機,執行腳本下載圖資,匯入資料庫,重新啟動服務 > docker attach twbright # cd /opentileserver # sh ./reload-opentileserver.sh 按Ctrl-p + Ctrl-q跳出容器終端機 C.【除錯資訊】以下為自動或手動建立新映像檔,啟動容器後的除錯要點: 0.本機進入容器的終端機 > docker attach twbright 1.圖磚前景啟動 # sudo -u tile renderd -f -c /usr/local/etc/renderd.conf 可確認字型檔 unifont.ttf 及形狀檔 ne_10m_populated_places_simple.shp 是否載入正確 2.圖磚快取位置 # ls /var/lib/mod_tile/default/ 可確認目錄下是否有.png圖磚產生 3.字型位置必須有unifont統一碼字型 # ls /usr/share/fonts/truetype/unifont/unifont.ttf 4.資料庫設定檔必須驗證方式為trust才不必輸入密碼,如下: /etc/postgresql/9.3/main/pg_hba.conf local all all trust 5.資料庫驗證 # psql -d gis -Utile # 以用戶 tile 身份連入資料庫 gis gis=# \d # 列出資料表 List of relations Schema | Name | Type | Owner --------+--------------------+-------+---------- public | geography_columns | view | postgres public | geometry_columns | view | tile public | planet_osm_line | table | tile public | planet_osm_nodes | table | tile public | planet_osm_point | table | tile public | planet_osm_polygon | table | tile public | planet_osm_rels | table | tile public | planet_osm_roads | table | tile public | planet_osm_ways | table | tile public | raster_columns | view | postgres public | raster_overviews | view | postgres public | spatial_ref_sys | table | tile (12 rows) gis=# \d planet_osm_point # 列出欄位 osm_id | bigint | access | text | addr:housename | text | addr:housenumber | text | addr:interpolation | text | admin_level | text | aerialway | text | aeroway | text | amenity | text | area | text | barrier | text | bicycle | text | brand | text | bridge | text | boundary | text | building | text | ..... water | text | waterway | text | wetland | text | width | text | wood | text | z_order | integer | way | geometry(Point,900913) | gis=# select osm_id, name from planet_osm_point limit 10; # 取10個點看中文名正確否 osm_id | name ------------+----------- 63252122 | 1647048653 | 青屿 1645249987 | 五膽島 1645249985 | 四膽島 1645249984 | 三膽島 1645249983 | 二膽島 1645249988 | 大膽島 1645251414 | 獅球 1645249986 | 大南礁 1645249989 | 兔嶼 gis=# select count(*) from planet_osm_point; # 計算總共資料庫有幾個點 count -------- 198300 (1 row) gis=# \q # 離開
訂閱:
文章 (Atom)
Building a Lightweight Streamlit Client for Local Ollama LLM Interaction
Ollama 提供端點串接服務,可由程式管理及使用本地大語言模型(LLM, Large Language Model)。 以下程式碼展示如何以 Streamlit 套件,建立一個輕量級的網頁介面,供呼叫 本地端安裝的 Ollama 大語言模型。 Ollama 預設的服務...
