Ko'proq

JavaScript uchun ArcGIS API o'lchov vidjetida joriy segment o'lchami ko'rsatiladimi?

JavaScript uchun ArcGIS API o'lchov vidjetida joriy segment o'lchami ko'rsatiladimi?


Ushbu ESRI o'lchov vidjetining namunasida: https://developers.arcgis.com/javascript/jssamples/widget_measurement.html siz chiziq chizganingizda segment uzunligini dinamik ravishda ko'rsatadi. Va keyingi segmentlarning uzunligini o'lchaganingizda, u oldingi uzunlikka qo'shiladi.

Joriy segment uzunligini dinamik ravishda ko'rsatadigan boshqa natijani qanday qo'shishim mumkin?


API ma'lumotnomasida ta'kidlanganidek, o'lchash vidjeti voqea tinglovchilarini alohida tugunlarni joylashtirish imkoniyatiga ega qilmaydi. Aytgancha, bizning yangi geometryEngine bu kabi hisob -kitoblarni mijozlar tomonida bajarishga yordam beradi.

Men oddiy namunani qamchilashga muvaffaq bo'ldim, bunda men xaritani "bosish" va "sichqonchani siljitish" ni tinglayman va oxirgi chizilgan segmentni dinamik ravishda ifodalovchi yangi polylinlarni yarataman va uzunligini hisoblay olaman.


Kredit @John-Gravois-ga o'tishi kerak, lekin menga biroz qayta ishlatilishi mumkin bo'lgan yechim kerak edi, shuning uchun esri o'lchov vositasini kengaytirish kodi va oldingi segmentning uzunligini ham, hozirgi chizilganini ham ko'rsatish mumkin.

Demo

Manba

aniqlash (["dojo/_base/e'lon qilish", "dojo/_base/lang", "dojo/dom-qurish", "dojo/raqam", "esri/raqam/o'lchov", "esri/geometriya/Polyline", " esri/geometry/geometryEngine "], funktsiya (e'lon qilish, lang, domConstruct, Number, esriMeasurement, Polyline, GeometryEngine, Birliklar) {return deklaratsiya ([esriMeasurement], {// tavsif: // oxirgi segmentni qo'shish uchun esri o'lchov vositasini kengaytiradi va joriy segment xususiyatlari // foydalanuvchi arrMeasurePoints tugmachasini bosganidek, bizning qatorlarimizni saqlaymiz: [], // agar siz sichqoncha harakatlanayotganda masofani ko'rsatishni xohlamasangiz, buni noto'g'ri deb belgilang. mouseMoveMeasure: true, // div natijalarni ko'rsatish uchun. sichqoncha postCreate: function () {console.log ('app.Measurement :: postCreate', argumentlari); ; // bu xaritani bosish hodisasiga ulang this.map.on ('chertish', lang.hitch (this, this.calcDistance)); "asboblarni almashtirish e ", lang.hitch (this, function () {this.arrMeasurePoints = []; this.resultSegmentDiv.innerHTML = ""; agar (this.resultMouseSegmentDiv) this.resultMouseSegmentDiv.innerHTML = ""; }))); this.own (this.on ("o'lchov-oxiri", lang.hitch (this, function () {this.arrMeasurePoints = [];})))); if (this.mouseMoveMeasure) {this.own (this.map.on ('sichqoncha-harakat', lang.hitch (this, this.calcMouseDistance)))); } // sichqoncha segmentining uzunligini o'z ichiga oladigan yangi div qo'shing, agar (this.mouseMoveMeasure) this.resultMouseSegmentDiv = domConstruct.create ('div', {'class': 'esriMeasurementResultSegment', innerHTML: ''}, this.resultValueContainer. domNode); // segment uzunligini o'z ichiga oladigan yangi div qo'shing this.resultSegmentDiv = domConstruct.create ('div', {'class': 'esriMeasurementResultSegment', innerHTML: ''}, this.resultValueContainer.domNode); }, calcDistance: function (evt) {try {// biz buni faqat masofa uchun qilamiz, agar (! this.activeTool || this.activeTool.toString (). toLowerCase ()! == 'masofa') noto'g'ri bo'lsa ; this.arrMeasurePoints.push (evt.mapPoint); // agar bizda ikkitadan ko'p bo'lsa, chiziq yarating va ularni o'lchang (this.arrMeasurePoints.length <2) false; var length = this._createAndMeasureLine (this.arrMeasurePoints [this.arrMeasurePoints.length - 2], this.arrMeasurePoints [this.arrMeasurePoints.length - 1]); this._displaySegmentResult (uzunlik); haqiqatga qaytish; } catch (e) {return false; }}, calcMouseDistance: function (evt) {// agar bizda ishlash nuqtasi bo'lsa, biz davom ettirishimiz mumkin {// biz buni faqat masofa uchun qilamiz, agar (! this.activeTool || this.activeTool.toString ( ) .toLowerCase ()! == 'masofa') noto'g'ri qaytarish; if (this.arrMeasurePoints.length <1) false qaytadi; var length = this._createAndMeasureLine (this.arrMeasurePoints [this.arrMeasurePoints.length - 1], evt.mapPoint); this._displayMouseSegmentResult (uzunlik); haqiqatga qaytish; } catch (e) {return false; }}, _displaySegmentResult: funktsiya (uzunlik) {// raqamni formatlash. uzunlik = bu._formatNumberForDisplay (uzunlik); this.resultSegmentDiv.innerHTML = "Segmentning oxirgi qismi:" + uzunlik + "" + bu.getUnit (); }, _displayMouseSegmentResult: funktsiya (uzunlik) {// raqamni formatlash. uzunlik = bu._formatNumberForDisplay (uzunlik); this.resultMouseSegmentDiv.innerHTML = "Segment uzunligi:" + uzunlik + "" + bu.getUnit (); }, _formatNumberForDisplay: funktsiya (son) {Qaytish Number.format (son, {naqsh: this.numberPattern + "0"}); }, _createAndMeasureLine: funktsiya (nuqta1, nuqta2) {var line = yangi Polyline (this.map.spatialReference); // oxirgi ikkita nuqtadan foydalaning line.addPath ([nuqta1, nuqta2]); // endi uning uzunligini o'lchash uchun geometriya dvigatelidan foydalaning // bu WGS-84 yoki Web Mercator yordamchi sohami? Agar shunday bo'lsa, geodesic // geodesicLength (geometriya, birlik) dan foydalaning var unit = this.getUnit (); if (! birlik) birlik = 'kilometr'; birlik = unit.toLowerCase (). almashtirish (", '-'); var uzunligi; agar (this.map.spatialReference.isWebMercator ()) {uzunlik = GeometryEngine.geodesicLength (chiziq, birlik);} boshqa {uzunlik = GeometryEngine .planarLength (chiziq, birlik);} qaytish uzunligi;}});});