Erstens: Ihr if-elseif ist komplizierter als erforderlich. Wenn die Grenze ist streng 1 Polylinie höchstens und streng 2 Polygonen höchstens
if (n == 2) {
//switch off polygon drawing tool
}
if (m == 1) {
//switch off polyline drawing tool
}
if (n == 2 and m == 1) {
//switch off drawing tool
}
wo
n
die Zählung von Polygonen und
m
ist die Anzahl von Polylinien,
Mit anderen Worten, das Ausschalten der Polylinienzeichnung ist unabhängig davon, wie viele Polygone es gibt und umgekehrt.
Als Spur von n
und m
...
Wahrscheinlich am besten zu halten, ein Objekt zu schaffen - seien sie cf
nennen - und push
jeden Benutzer erstellte Objekt, um es (wenn der Benutzer erstellte Objekt der Typ des Objekts, das Sie zählen möchten, und schalten Sie dann das Zeichenwerkzeug aus, wenn die Länge von cf
die Grenze überschreitet, die Sie auferlegen möchten.
So
var cf=[];
/* stuff to draw things on the map, resulting in a new object called kk */
cf.push(kk);
if (cf.length>3){
// switch off the drawing tool
}
Da Sie auf verschiedene Einschränkungen basierend aufzwingen wollen, ob das Objekt erstellt eine Polylinie oder ein Polygon, erstellen 2 Objekte (etwa cf1
und cf2
) und kk zu cf1
schieben, wenn es eine ist Polygon, und zu , wenn es eine Polylinie ist ... und die if-Anweisung ändern, um die verschiedenen Tests widerzuspiegeln.
Warum iterieren Sie nicht einfach einen Zähler, anstatt ein Objekt zu erstellen?
Ich gehe davon aus, dass es einen Punkt zum Zeichnen der Polygone und Polylinien gibt, und dass Sie sie verwenden/speichern/exportieren möchten.
Mit dem Ansatz, den ich skizziert habe, cf1
und cf2
alles über jedes Polygon enthalten kann, nicht nur ihre Geometrie - der Benutzer, die sie erzeugt, zusammenfassende Informationen über sie, und all die anderen Dinge, die Sie speichern vielleicht gefallen/Export /Anzeige.
Wenn nichts davon benötigt wird, dann würde ein Zähler gut funktionieren.
inb4 'cf.length
verwendet, ist irgendwie nicht kanonisch in der JS Welt'. Schade. Es funktioniert (außer in Eckfällen, die hier nicht gelten) und es ist sparsam.
Nein, dies ist nicht Teil der Google Maps JavaScript API. Aber es gibt nichts, was Sie davon abhält, es in Ihrem Code zu implementieren, der die API verwendet. – geocodezip
Abgelehnte Frage: [Google Maps Drawing Manager auf 1 Polygon begrenzen] (http://stackoverflow.com/questions/14166546/google-maps-drawing-manager-limit-to-1-polygon) – geocodezip
In Ihrem Beispiel I ' Ich sehe nicht, wo du die Formen zählst. Scheint, dass du nur die Steuerelemente nach einem 'polygoncomplete' Event deaktivierst (was ich bereits weiß). Was mir nicht klar ist, ist das programmatische Bestimmen, wie viele Formen (Polygone oder Polylinien) existieren. Auch wenn ich eine andere Form (Polylinie) zeichne, muss ich erkennen, wenn ein Polygon erstellt wurde und umgekehrt. Auch wenn ich jedes auf nur eine Instanz beschränkte, wenn ich beispielsweise eine Polylinie zeichne, wie würde ich überprüfen, ob ein Polygon bereits existiert oder nicht? – Drivium