Untitled

 avatar
unknown
plain_text
14 days ago
6.7 kB
3
Indexable
var distance:Double = 0.0
    var area:Double = 0.0

    var originalArea: Double = 0.0
    var originalDistanceUnit: String = "Meter"
    var originalAreaUnit: String = "Acre"
    var distanceText:MutableState<String> = mutableStateOf("0.0")
    var areaText:MutableState<String> = mutableStateOf("0.0")
    when (selectedGeometryType) {
                                "Area" -> {
                                    val pointGraphic = Graphic(mapPoint, pointSymbol)
                                    graphicsOverlay.graphics.add(pointGraphic)
                                    relatedGraphics.add(pointGraphic)

                                    polygonPoints.add(mapPointNotNull)
                                    if (polygonPoints.size > 1) {
                                        val polyline = Polyline(polygonPoints)
                                        val lineGraphic = Graphic(polyline, lineSymbol)
                                        graphicsOverlay.graphics.add(lineGraphic)
                                        relatedGraphics.add(lineGraphic)

                                        // Remove previous text symbols
                                        graphicsOverlay.graphics.removeAll { it.symbol is TextSymbol }

                                        if (polygonPoints.size > 2) {
                                            val polygon = Polygon(polygonPoints)
                                            val polygonGraphic = Graphic(polygon, polygonSymbol)
                                            graphicsOverlay.graphics.add(polygonGraphic)
                                            relatedGraphics.add(polygonGraphic)

                                            val areaValue = GeometryEngine.areaGeodetic(
                                                polygon,
                                                getAreaUnit(selectedUnit),
                                                GeodeticCurveType.Geodesic
                                            )
                                            area = areaValue
                                            originalArea = areaValue
//                                            originalAreaUnit = selectedUnit
                                            areaText.value = formatMeasurementValue(areaValue, selectedUnit) // Update area text
                                            calloutLocation?.let { location ->

                    Callout(location = location, offset = Offset(0f, -50f)) {
                        Text(
                            text = if (selectedGeometryType == "Area") {

                                "${areaText.value} ${originalAreaUnit}"

                            } else {
                                "${distanceText.value} ${originalDistanceUnit}"
//                                distanceText.value
                            }
                        )
                    }
                }if (showActionBar.value) {
                CustomTopBar(
                    selectedGeometryType = selectedGeometryType,
                    onGeometryTypeChange = { selectedGeometryType = it },
                    selectedUnit = selectedUnit,
//                    onUnitChange = { selectedUnit = it },
                    onUnitChange = { unit ->
                        selectedUnit = unit
//                        if (selectedGeometryType == "Distance") {
//                            updateDistanceUnits(unit)
//                        } else if (selectedGeometryType == "Area") {
//                            updateAreaUnits(originalArea, unit)
//                        }
                    },
                    distanceUnits = distanceUnits,
                    areaUnits = areaUnits,
                    onShowActionBarChange = { showActionBar.value = it },
                    onClearGraphics = {
                        clearGraphics()
                        linePoints.clear()
                        polygonPoints.clear()
                        calloutLocation = null // Reset callout location
                        distanceText.value = " " // Reset distance text
//                        distanceTextState.value = " "
                        areaText.value = " " // Reset area text
                        cumulativeDistance = 0.0 // Reset cumulative distance
                    },
                    pointsDrawn = pointsDrawn

                )
            }private fun updateAreaUnits( unit: String) {

        area = when (unit) {

            "Acre" -> {
                if (originalAreaUnit.equals("Hectare")){
                    convertHectareToAcre(area)
                }
                else if (originalAreaUnit.equals("Square Meter")){
                    convertSquareMeterToAcre(area)
                }
                else if (originalAreaUnit.equals("Square Kilometer")){
                    convertSquareKilometerToAcre(area)
                }
                else{
                    convertSquareFootToAcre(area)
                }
            }

            "Hectare" -> {
                if (originalAreaUnit.equals("Acre")){
                    convertAcreToHectare(area)
                }
                else if (originalAreaUnit.equals("Square Meter")){
                    convertSquareMeterToHectare(area)
                }
                else if (originalAreaUnit.equals("Square Kilometer")){
                    convertSquareKilometerToHectare(area)
                }
                else{
                    convertSquareFootToHectare(area)
                }
            }

            "Square Meter" -> {
                if (originalAreaUnit.equals("Acre")){
                    convertAcreToSquareMeter(area)
                }
                else if (originalAreaUnit.equals("Square Meter")){
                    convertHectareToSquareMeter(area)
                }
                else if (originalAreaUnit.equals("Square Kilometer")){
                    convertSquareKilometerToSquareMeter(area)
                }
                else{
                    convertSquareFootToSquareMeter(area)
                }
            }
 else -> {
                area
            }
        }



        originalAreaUnit = unit
//        updateAreaText("$area $unit")
        areaText.value = "%.2f" .format(area)
    }
private fun convertHectareToSquareMeter(area: Double):Double{
        return area * 10000.008840
//        return area * 10_000

    }private fun convertSquareMeterToHectare(area: Double): Double {
        return area * 0.0001
    }
Editor is loading...
Leave a Comment