Untitled

 avatar
unknown
plain_text
5 days ago
6.7 kB
4
Indexable
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
                                            areaText.value = formatMeasurementValue(areaValue, selectedUnit) // Update area text
                                            
                                        } else {
                                            val distanceValue = GeometryEngine.lengthGeodetic(
                                                polyline,
                                                getLinearUnit(selectedUnit),
                                                GeodeticCurveType.Geodesic
                                            )
                                            distance = distanceValue
                                            distanceText.value = formatMeasurementValue(distanceValue, selectedUnit) // Update area text
//                                            distanceTextState.postValue(distanceValue.toString())
                                        }
                                    }
                                }{
                calloutLocation?.let { location ->

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

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

                            } else {
                                "${distanceText.value} ${originalDistanceUnit}"
//                                distanceText.value
                            }
                        )
                    }
                }
            }Text(text = "Select Unit", color = Color.Blue)
                        units.forEach { unit ->
                            Row(verticalAlignment = Alignment.CenterVertically) {
                                Checkbox(
                                    checked = selectedUnit == unit,
                                    onCheckedChange = {
                                        if (it) {
                                            onUnitChange(unit)
                                            if (selectedGeometryType == "Distance") {
                                                updateDistanceUnits(unit)
                                            } else if (selectedGeometryType == "Area") {
                                                updateAreaUnits(originalArea, unit)
                                            }
                                        }
                                    }
                                )
                                Text(text = unit, modifier = Modifier.padding(4.dp))
                            }
                        }private fun updateAreaUnits(originalArea: Double, 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)
                }
            }

private fun convertHectareToSquareMeter(area: Double):Double{
        return area * 10000.008840
//        return area * 10_000

    }
Editor is loading...
Leave a Comment