test

(標題不會顯示)

2021年1月30日 星期六

coortranscheck

 轉換檢核

應該可基於測試點來做檢查

https://wiki.osgeo.org/index.php?title=Taiwan_datums/Test_points&uselang=zh-tw

而所用的轉換參數,是參考這篇

http://mutolisp.logdown.com/posts/207563-taiwan-geodetic-coordinate-system-conversion

其中 MOI、OSG1、OSG4 (其他不認得) 得注意,分為

A: MOI 與 OSG4 是用於 proj4js ,上河根據結果應該是用OSG4

MOI的東北角是OSG4 約 0.68m,朝向28.4度(北部)

B: PCTrans 與我的則是用 OSG1的參數(Miller Liu, 2008)

而 A的2.8m,朝向30度則是B

在B附近則有台電圖號座標定位系統(台灣EMAP圖資)成大

分別是我的、成大、台電 在 0.6m內,朝向98度(東南東)

--

不過奇怪的是,proj4js 查看原始碼發現 towgs84 應該是

m,m,m,asec,asec,asec,ppm

其中 asec 讀入後是一律乘以 SEC_TO_RAD ,換言之讀入的是 asec

故 MOI 與 OSG4 不知道為何記載是這樣

過小的 rxyz 幾乎與 0 無異,sf 過小給下去則等同於1

最終 OSG1 若用在 proj4js ,其中 rxyz 負負得正,則可轉換到跟B一樣的位置

應該是 PCTrans/我的 是 PVR,proj4js 是 CFR 的緣故(來源待查)

PVR: Position Vector Rotation
CFR: Coordinate Frame Rotation

參考: 

https://www.bluemarblegeo.com/knowledgebase/calculator-2020sp1/datum_shifts/Seven_Parameter_CFR.htm 

--

原來以前就已經寫過找最近基石點的方式來轉換

將資料納入頁面只需100kb

--

平面轉經緯應該公式沒有問題。

經緯轉平面可能得參考 (U)TM Projection 。

https://github.com/jjimenezshaw/Leaflet.UTM

proj4js 平面轉經緯轉平面,結果是 0

我的和 PCTrans 結果一樣??? 97平面 dx = 0.003m, dy = -0.005m

--

其他:

PCTrans 4.2.8 (自4.2.5版後新增了 Miller Liu 的 TWD67 7參數定義)

PCTrans官方下載頁面 (目前版本5.1)

google maps api v3 (test)


with jQuery
with proj4js
try it!

300660,2766930

2021年1月28日 星期四

解決了 google maps api 多重引入的問題

blogger 內引用 google map 會遇到的問題:
 blogger 電腦版主頁會引用多個文章與載入內文

(mobile版主頁只會引入文章標題,不載入內文)

但如果多個文章都有 initial google map 
照官方初始 hello world 的作法 
是在 head script 引入一行 script 拉入 google maps api 
但兩個文章就會拉兩次
於是 console 就會看到 

"You have included the Google Maps JavaScript API multiple times on this page. This may cause unexpected errors." 

 終於找到了解藥: 

每個文章的 initial google map 都改裝成
<script>
  if(window.google && window.google.maps){
      // the map API is already be loaded (from a previous button click, maybe)
      initMap();
  
  } else if(!document.getElementById('google-map-script')) {
      // the script tag is not present so add it to the DOM
      var scriptTag = document.createElement('script');
      scriptTag .id = 'google-map-script';
      scriptTag .src = 'https://maps.googleapis.com/maps/api/js?key=...&callback=initMap';
      var head = document.getElementsByTagName('head')[0];
      head.appendChild(scriptTag);
  }
  </script>

其中 initMap() 即是自己建構的 function
scriptTag.src 這邊裝 google maps api 的那個 script

後續:
blogger 電腦版主頁只要某處有引用 maps api
目前已知可以引入 script 的有 "HTML/JavaScript 小工具" 與 "文章"
但 HTML/JavaScript 小工具 只限電腦版首頁與文章,mobile皆不載入
故 mobile 各個文章內的 script 都得自行引入
對於 mobile 各文章來說是獨立門戶,但切換到電腦版時就會遇到首頁引入文章載入script 的問題
為了避免 script 重複載入,應該都得改成這樣的形態去引入 script
或是避免電腦版首頁預先載入文章
或是各文章內容能掌控
(還得注意所有文章內的 js global 是共用的)
maps api 只要載入了,後續文章內的 initMap 即可作用
主要問題是 initMap js 優先而 maps api 載入需要時間
所以才在 maps api 載入後接著便用 callback 的方式呼叫起始 map 的 function
但是文章是個別的,每個文章都必須要偵測 maps api 有載入了才可以初始 map