2017-07-06 20 views
1

私はリーフレットドローを使用してポリゴン(一緒に接続されたいくつかの緯度/経度座標)をフォーマットしようとしています。ここでフォーマットリターンがあると私は、これまで行ってきた:これは正規表現で行われますか?フォーマット緯度経度

map.on("draw:drawstop", polyPointToString);    
function polyPointToString(e){ 
    console.log("Unaltered Coordinates: " + coords); 
    polyStringParse = coords.toString().replace(/[^\d,.-]/g, '');    
    console.log("Polyparse: " + polyStringParse); 
    polyStringParseRegExp = polyStringParse.replace(/([^,]+[^,]),/g,'$1 '); 
    console.log("PolyparseRegExp: " + polyStringParseRegExp); 
} 

変更されていない座標がこれです:

//Unaltered Coordinates: LatLng(46.58907, -102.74414),LatLng(46.58907, -102.74414),LatLng(46.58907, -102.74414) 

PolyParse(左のみの数字、ダッシュ、および小数点)これです:

//Polyparse: 46.58907,-102.74414,46.58907,-102.74414,46.58907,-102.74414 

PolyparseRegExptは、この(それは:-(ALLカンマを削除し続ける)である:

//Polyparse2: 46.58907 -102.74414 46.58907 -102.74414 46.58907 -102.74414 

必要なものである:コンマ1、3、5、7 ....などが取り除か私が持っているように:

数番号、番号の番号、番号番号、........

Basilcally、すべての奇数のカンマ。今は何らかの理由ですべてのコンマを削除しています。

+1

'coords'はない文字列としてではなく、オブジェクトとして、何ですか? ':あなた' console.log'は 'にconsole.log(、COORDS "変更されていない座標")に変更します。オブジェクトを文字列表現に変換して解析することは、これを不必要に複雑にしています。 – Amy

+0

coordsはマップ上のポイントの配列です。 –

+0

私は真剣にこの配列をフォーマットするために正規表現を使用するあなたのアプローチが[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の形式であると考えています – IvanSanchez

答えて

1

最も簡単な解決策 - 追加他の座標ことなく別々コンマそれを捕捉、それに対をなす、(が先行それはコンマ'S)(?):

に置き換える

([^,]+[^,]),([^,]+[^,],) 

$1 $2(スペースとトレーリングの間のスペース)

は、カンマを区切りませんが、後に続く座標ペアを改造します。

See it here at regex101

+0

ねえClasG。ありがとう、しかし、それは偶数番号のコンマを削除するようです。私は第1、第3、第5などが必要です。Regex101は涼しく見えます。その存在を知らなかった。 –

+0

申し訳ありません。それをsloppily;)修正しました。 – ClasG

+0

優秀! RegExはまだまだ私にとって謎です(昨日の存在を知っただけです)。私は本当に助けに感謝します。 –

1

coordsLeaflet's LatLngsの配列です。 toString()を使用すると、.lat.lngLatLngのプロパティにアクセスするために使用できることを考慮して、行うには奇妙なことです。

あなたが原因スペースやコンマのyur使用にWKT(よく知られているテキスト)にデータを変換しようとしているようにも見えます。

だからあなたのようなもので座標ペアWKTにLatLngを変換することができます:

var latlng = L.latLng(...) 
var wktPoint = latlng.lng + ' ' + latlng.lat; 

そして、あなたはLatLngの配列を持っている場合、あなたはここに大きな効果をArray.prototype.mapArray.prototype.joinを使用することができます。

var coords = [ L.latLng(...), L.latLng(...), ... ]; 

var wktLineString = coords.map(function(ll){ 
    // For every item in the array, return a string. 
    // The call to .map() will thus return an array of strings 
    return ll.lng + ' ' + ll.lat; 

    // Once the array of strings is ready, join those strings 
    // with the given separator. 
}).join(','); 

私はWKTを使用していると仮定しているので、lat-lngの代わりにlng-latを持つことができるように座標の入れ替えに注意してください。また、toFixed()などを使用して、出力をよりよく制御できることにも注意してください。

関連する問題