利用座標生成點 二

2021-08-21 04:37:35 字數 1808 閱讀 8612

很多情況下我們都會遇到利用座標生成點的操作。昨天鼓搗了一天,現在將在整個操作過程中遇到的問題以及解決的辦法記錄下來,給以後的工作備份和供有緣看到這片文章的朋友們分享。

源資料座標存在excel表中,如下:

第乙個思路

先用attributesplitter提取這經緯度中的度分秒,然後用轉換器angleconverter轉換為十進位制的度數變成(x,y),具體方法可參考文章

《用經緯度生成對應的座標點 》

。模板製作好以後轉換卻頻頻報錯,經過檢查得知是度分秒的格式不符合轉換器angleconverter的標準,原始資料中提取出來的度分秒數,例如 170-6-13.7,第一:度數170前有空格,要清除(用attributetrimmer);第二:分數6只有一位數,要在前面加乙個「0」(用stringconcatenator)變成06才行,否則在結果中就會使度數少一位;第三:秒數中有小數,必須四捨五入,還必須保證秒數的位數也是兩位,四捨五入的方法見下圖:

模板講解,以緯度秒數數為06.37為例:

1、第1個轉換器attributetrimmer_2,用於清除06.37前面的「0」,否則在後面的計算中會報錯;

2、第2個轉換器attributesplitter_4,以小數點為分隔符將6.37分隔為6和37兩個部分;

3、第3個轉化器tester_4,判斷秒數是否為小數,也就是判斷小數點後面是否有值,本例中有值為37;

4、第4個轉換器stringconcatenator_2,用於將小數點後面的值變成小數,本例中將37變成0.37;

5、第5個轉換器tester_5,判斷這個小數是否大於等於0.5;

6、第6個轉換器expressionevaluator,將大於等於0.5的秒數值,小數點前的數值加1後變成秒數;

7、第6個轉換器expressionevaluator_2,將小於0.5的秒數值,小數點前的數值賦給秒數。

那麼06.37經過四捨五入後變成6。為了滿足格式要求還需要用轉換器stringconcatenator將其變成06,

這幾個轉換器的功能和設定比較簡單,這裡就不做詳細介紹了。

整個解決方案如下:

小結:總的來說原始資料的質量不是很理想,不能嚴格滿足angleconverter中dddmmss的條件,所以要分別對經緯度的度分秒處理成整數,且保證分秒為兩位數的格式才能順利轉換!

第二個思路

在第乙個思路中會遇到四捨五入的情況,這樣會使結果與原始資料有一定誤差,而且分數和秒數不能只有個位數的格式,但是在fme中另乙個轉換器decimaldegreescalculator就沒有那麼多限制,只保證度數分數秒數前後沒有空格且為整數即可,引數設定如下:

整個解決方案如下:

心得:1、會用轉換器只是掌握fme基礎,會做不代表做得到。看起來很簡單的操作卻花了一整天,實踐才能進步;

2、就像條條大路通羅馬一樣,fme能提供多種思路解決問題,只有熟練運用了才知道真正的捷徑是哪一條。

經緯度座標生成點要素

剛學習的小技巧,記錄一下。用arcmap由經緯度座標生成點要素檔案,即生成shp格式檔案。ps 經度和緯度組成的座標系統稱為地理座標系統,其中經度為x,緯度為y,緯度的相差距離1 111km,1 1.85km,1 1 先確認自己手上的經緯度的單位,如果是度分秒的形式就轉成分的形式 x x x x.x...

arcmap從excel座標資料生成點shp檔案

概述 今天試圖在arcmap中將excel資料轉成點檔案,在 display xy data 的時候,無法選擇x,y欄位,很是納悶,原來excel中列的格式是文字,導致無法選擇.有個同學個我的建議,從在匯入的.dbf檔案中自己再定義新的字段,然後複製過去.我覺得這個方法有點麻煩,網上搜了一下,修改e...

單個點座標座標轉換

需要js版本可以移步coordtransform lng 128.543 lat 37.065 result3 wgs84 to gcj02 lng,lat wgs84座標系 火星座標系 result4 gcj02 to wgs84 lng,lat 火星座標系 wgs84座標系 中文位址到火星座標系...