Vairāk

OpenLayers: zīmējiet ceļu tikai ar diviem punktiem

OpenLayers: zīmējiet ceļu tikai ar diviem punktiem


Es gribu uzzīmēt ceļu, kurā nav vairāk par 2 punktiem. Otrajā punktā es vēlos, lai ceļš būtu pabeigts.

Es izmantoju OpenLayers DrawFeature, es iestatīju atzīmes "punktam", kur es saskaita izveidotos punktus un, ja punkti ir divi, es skici pabeidzu arfinishSketch ()metodi. Problēma ir tā, ka, kad metode finishSketch () izsaucfinishGeometry ()metode, kas noņem pēdējo pievienoto punktu no ceļa, kas izraisa šādas kļūdas parādīšanos

"Nenozīmēts TypeError: Nevar nolasīt rekvizītu" geometry "of null"

Mans jautājums ir jebkurš likumīgs veids, kā pabeigt ceļa programmiskumu, vai šī ir kļūda DrawFeature vadīklā.


Tas nav kļūda programmā Draw Feature, tieši tā darbojas “skice”. Kā jums vajadzēja pamanīt, zīmējot līniju, izmantojot DrawFeature vadību, pēdējais punkts nonāks vietā, kur pārvietojat peli, un, pabeidzot zīmēšanu, tas tiks noņemts, un pārējie punkti veido rezultāta līniju. Tas nozīmē, ka, lai pabeigtu līniju, jums ir jābūt vismaz 3 punktiem (ieskaitot vienu kustību ar peli).

Es domāju, ka jūs vēlaties rīku, kas pabeidz līniju, ievietojot otro punktu, un vairs netiks parādīta skice. Tādā gadījumā neizsauciet finishSketch () piezvanī “point”, tā vietā izsauciet drawFeature. Es varētu iedomāties, ka atzvanīšanas funkcija izskatās šādi:

/ ** * pointGeometry: tikko pievienotais punkts * lineGeometry: pašreizējā līnijas skice * / point: function (pointGeometry, lineGeometry) {var numPoints = lineGeometry.getVertices (). length; if (numPoints == 2) {this.drawFeature (lineGeometry); }}

Vienkārši izmantojiet īpašumumaxVertices

// vienas līnijas zīmēšanas vadība _singleLineControl = new OpenLayers.Control.DrawFeature (_singleLineLayer, OpenLayers.Handler.Path, {eventListeners: {"featureadded": drawingFinished}, handlerOptions: {maxVertices: 2, viens: true, brīvroka: false,} }); viewer.addControl (_singleLineControl); _singleLineControl.deactivate ();

Skatīties video: GIS with Openlayers part1. How to add #GeoJSON on #Openlayers map?