2017-07-06 5 views
1

Ich versuche, ein Polygon (mehrere lat/long Koordinaten miteinander verbunden) mit Leaflet Draw zu formatieren. Hier ist das Format Rückkehr und was ich bisher getan haben:Wird dies mit einem regulären Ausdruck gemacht? Formatieren Breitengrad Längengrad

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); 
} 

Unveränderte Koordinaten ist dies:

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

polyparse ist dies (nur Zahlen, Bindestriche und Dezimalstellen links):

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

PolyparseRegExpt ist dies (es hält alle Kommata :-(entfernen):

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

Was ist notwendig: Comma 1, 3, 5, 7 .... etc entfernt, so dass ich habe:

Zahl Nummer, Anzahl Nummer, Anzahl Nummer, ........

Basilikum, jedes ungerade Komma. Gerade jetzt entfernt es aus irgendeinem Grund alle Kommas.

+1

Was ist 'coords', nicht als String, sondern als Objekt? Ändern Sie Ihre 'console.log' in' console.log ("Unaltered Coordinates:", coords) '. Ein Objekt in eine String-Darstellung zu verwandeln und dann zu analysieren, macht das unnötig kompliziert. – Amy

+0

coords ist eine Anordnung von Punkten auf einer Karte. –

+0

Ich glaube ernsthaft, dass Ihr Ansatz, regexps zu verwenden, um dieses Array zu formatieren, eine Form von [dem XY-Problem] ist (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – IvanSanchez

Antwort

1

Die einfachste Lösung - füge die anderen Koordinate (mit vorangestellten ist es Komma), ihnen ein Paar zu machen, es separat ohne das Komma Erfassung (?):

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

es mit

ersetzen

$1 $2 (Leerzeichen zwischen und nach)

reformiert das Koordinatenpaar, ohne das Trennkomma, aber das nachfolgende zu verlassen.

See it here at regex101.

+0

Hey ClasG. Danke, aber das scheint die geradzahligen Kommas zu entfernen. Ich brauche ersten, dritten, fünften, usw. usw. Regex101 sieht jedoch cool aus. Wusste nicht, dass es das gab. –

+0

Entschuldigung. Lies es schlampig;) behoben. – ClasG

+0

Ausgezeichnet! RegEx ist für mich immer noch ein Mysterium (ich habe es gestern schon erfahren). Ich schätze die Hilfe sehr. –

1

Es sieht aus wie coords ist ein Array von Leaflet's LatLngs. Die Verwendung von toString() ist eine seltsame Sache zu tun, wenn man bedenkt, dass Sie .lat und .lng verwenden können, um auf die LatLng Eigenschaften zuzugreifen.

Es sieht auch so aus, als ob Sie versuchen, Ihre Daten in WKT (Well-Known-Text) zu konvertieren, weil Sie Leerzeichen und Kommas verwenden.

So können Sie eine LatLng in einen WKT Koordinatenpaar mit so etwas wie konvertieren:

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

Und wenn Sie eine Reihe von LatLng s haben, können Sie Array.prototype.map und Array.prototype.join, um große Wirkung hier verwenden können:

Da ich annehme, dass Sie WKT verwenden, beachten Sie das Tauschen der Koordinaten, so dass Sie lng-lat anstelle von lat-lng haben können. Beachten Sie auch, dass Sie toFixed() und Ähnliches verwenden können, um die Ausgabe besser steuern zu können.

Verwandte Themen