2014-04-29 100 views
1

我已經使用OpenLayers生成格式化的緯度;像這樣:將格式化的字符串轉換爲經度或緯度

OpenLayers.Util.getFormattedLonLat(bounds.top, 'lat'); 

它產生字符串57°42'32"Nbounds.top的值是十進制度數57.70889832055789。

這很好。但是,我怎樣才能使用OpenLayers做相反的事情?如果用戶輸入像57°42'32"N這樣的字符串,我如何使用OpenLayers將其轉換爲十進制度OpenLayers.LonLatOpenLayers.Bounds

+0

[輸入](http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers/BaseTypes/LonLat-js.html)所需的格式是什麼,例如十進制度還是一些字符分隔值? – RobG

+0

十進制度用於輸入LonLat。 – tbsalling

回答

2

這應該足以解析字符串,並計算出度,分,秒像有理數:

var input = "50° 20' 12''"; 
var coord = input.match(/[0-9]+/g); 
var lat = parseFloat(coord[0]) + coord[1]/60.0 + coord[2]/3600.0 ; 
if(/S|W/i.test(input)) lat *= -1; 

當然,你應該檢查輸入的正確性和初始化數組與3字段0.

+0

是的;這將工作。但我正在尋找一種使用OpenLayers的方法。也許你的代碼應該被貢獻給他們:-) – tbsalling

+1

好吧,不確定,現在還沒有這樣的方法,但是這會更加強大,因爲有一些LatLong可能的格式。請參閱[http://www.geomidpoint.com/latlon.html](http://www.geomidpoint.com/latlon.html) – SeDav

+1

而不是* match *,上面可以使用'input.split(/ \ D +/g)',區別在於* split *將始終返回數組,而* match *可能返回null,但更好地處理前導和尾隨非數字。無論哪種方式,結果都應在使用前進行測試。 – RobG