2017-01-30 6 views
-1

Ich möchte die Benutzer Fähigkeit begrenzen, mehr als 2 Polygone und mehr als 1 Pfad zu erstellen. Ich kann bestimmte Zeichentools programmgesteuert hinzufügen oder entfernen, aber was ich nicht finde, ist die Anzahl der Polylinien oder Polygone, die auf einer Karte vorhanden sind.Google Maps Zählen Sie die Anzahl der Pfade und Polygone

Hier einig Pseudo-Code, um die beabsichtigte Verwendung zu demonstrieren:

If exists > 2 polygons and exists < 2 polylines then 
    disable polygon drawing tool 
else if exists < 3 polygons and exists > 1 polylines then 
    disable polyline drawing tool 
else if exists > 2 polygons and exists > 1 polylines then 
    disable entire drawing tool 
end if 

Auch hier meine Frage ist spezifisch für das Zählen Polygone und Polylinien auf einer Karte. Hat die Google API diese Fähigkeit?

+1

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

+0

Abgelehnte Frage: [Google Maps Drawing Manager auf 1 Polygon begrenzen] (http://stackoverflow.com/questions/14166546/google-maps-drawing-manager-limit-to-1-polygon) – geocodezip

+0

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

Antwort

2

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.

+0

Vielen Dank dafür. In Ihrem Beispiel, was bedeutet kk? – Drivium

+1

'kk' ist das vom Benutzer erstellte Objekt - die Polygon- oder Polyliniengeometrie sowie alle verfügbaren oder erstellten Attribute (z. B. Datum/Uhrzeit, Polygontitel, Benutzername/IP usw.). –

+0

Ich habe versucht, Ihren Vorschlag hier zu implementieren: http://pastebin.com/TLmipAzE (Abschnitt von // umgeben), aber ich denke, dass ich falsch liege. Ich habe eine IF-Anweisung hinzugefügt, um festzustellen, ob der neu gezeichnete Shape-Typ ein Polygon oder eine Polylinie ist, aber ich bin nicht klar, wie beide gleichzeitig implementiert werden, um beide Kriterien zu erfassen. Ich scheine nur in der Lage zu sein, eins nach dem anderen zu überwachen. Das Ergebnis der Erfüllung eines Kriteriums besteht also darin, nur das entgegengesetzte Zeichenwerkzeug beizubehalten - mit meiner Methode kann ich niemals das gesamte Zeichenwerkzeug entfernen (wenn beide Kriterien erfüllt sind). – Drivium

Verwandte Themen