# उपयोगकर्ता को मानचित्र पर स्थान चुनने कैसे दें

> उपयोगकर्ता को LocationPicker के माध्यम से एक निर्देशांक (LatLon) की पुष्टि करने के लिए खींचने योग्य पिन और GPS वाला मानचित्र खोलें।

Source: https://crossfly.dev/hi/docs/cookbook/device/escolher-local-no-mapa — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# उपयोगकर्ता को मानचित्र पर स्थान चुनने कैसे दें

**उद्देश्य।** उपयोगकर्ता को एक स्थिति की पुष्टि करने के लिए **खींचने योग्य पिन** और GPS ट्रैकिंग वाला
मानचित्र (Google) स्क्रीन खोलना। परिणाम एक `LatLon` है जो callback के माध्यम से मिलता है।

## उपयोग की गई APIs
- `LocationPicker(RunnableWith<LatLon> onCapture, double minPdop, boolean canDragPin, boolean highPrecision, boolean streetview)` — पूर्ण कंस्ट्रक्टर (यह स्रोत का वास्तविक हस्ताक्षर है)।
  - `onCapture` — पुष्टि किए गए `LatLon` के साथ कॉल किया जाने वाला callback (`null` हो सकता है)।
  - `minPdop` — न्यूनतम स्वीकार्य PDOP; पुष्टि बटन तब तक छिपा रहता है जब तक fix उस परिशुद्धता तक न पहुँच जाए (डेस्कटॉप पर यह हमेशा सक्षम रहता है)।
  - `canDragPin` — पिन को किसी कस्टम स्थिति तक खींचने की अनुमति देने के लिए `true`।
  - `highPrecision` — उच्च परिशुद्धता वाले GPS के लिए `true`।
  - `streetview` — मानचित्र में street view सक्षम करने के लिए `true`।
- `LatLon getAnswer()` — पुष्टि की गई स्थिति, या रद्द होने पर `null`।
- कॉन्फ़िगर करने योग्य स्टैटिक्स: `LocationPicker.defaultZoom`, `Instrucoes`, `GpsLocation`, `CustomLocation`, `Precision`, `Meters`।

> **अनुरोध के विवरण से भिन्नता।** `LocationPicker` परिणाम के लिए `show(onAnswer)` का उपयोग **नहीं** करता:
> निर्देशांक **कंस्ट्रक्टर** में पास किए गए `RunnableWith<LatLon> onCapture` के माध्यम से आता है
> (और `getAnswer()` में भी रहता है)। `onCapture` केवल तभी कॉल होता है जब उपयोगकर्ता किसी गैर-null
> स्थिति के साथ **पुष्टि** करता है। आंतरिक रूप से picker अपना **स्वयं का** `GPSThread` (आंतरिक क्लास) चलाता है और
> अपडेट को पहले से ही `Component.onUI(...)` के माध्यम से भेजता है, इसलिए आपका callback paint thread पर निष्पादित होता है।

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)

```java
package com.exemplo;

import dev.crossfly.ui.*;                   // Window, Button, Label
import dev.crossfly.ui.layout.*;            // VerticalLayout
import dev.crossfly.ui.picker.*;            // LocationPicker
import dev.crossfly.map.*;                  // LatLon
import dev.crossfly.util.*;                 // RunnableWith

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      Button acao = new Button("Escolher no mapa");
      acao.onAction(c ->
      {
         RunnableWith<LatLon> aoConfirmar = coord ->
         {
            // पहले से ही paint thread पर आता है (picker आंतरिक रूप से Component.onUI का उपयोग करता है)
            resultado.setText("Lat " + coord.lat + " / Lon " + coord.lon);
         };

         LocationPicker picker = new LocationPicker(
            aoConfirmar,   // पुष्टि किए गए LatLon के साथ callback
            30.0,          // minPdop: सटीकता <= 30m होने पर पुष्टि करने की अनुमति देता है
            true,          // canDragPin: उपयोगकर्ता pin को खींच सकता है
            true,          // highPrecision
            false);        // streetview
         picker.show();
      });
      add(LAY_AUTO, acao);
   }
}
```

> नीचे का अंश **केवल मुख्य भाग** दिखाता है। चलाने के लिए, इसे ऊपर दिए गए `MainWindow` ढाँचे में रखें।

## न्यूनतम अंश

```java
// स्रोत में सत्यापित: LocationPicker.java (constructor पंक्तियाँ 129-141, onCapture/closeWith, getAnswer)
import dev.crossfly.ui.picker.*;           // LocationPicker
import dev.crossfly.map.*;                 // LatLon
import dev.crossfly.util.*;                // RunnableWith

RunnableWith<LatLon> aoConfirmar = coord -> {
   // पहले से ही paint thread पर आता है (picker आंतरिक रूप से Component.onUI का उपयोग करता है)
   double lat = coord.lat, lon = coord.lon;
   salvarLocal(lat, lon);
};

LocationPicker picker = new LocationPicker(
   aoConfirmar,   // पुष्टि किए गए LatLon के साथ callback
   30.0,          // minPdop: सटीकता <= 30m होने पर पुष्टि करने की अनुमति देता है
   true,          // canDragPin: उपयोगकर्ता pin को खींच सकता है
   true,          // highPrecision
   false);        // streetview
picker.show();

// विकल्प: बाद में getAnswer() के ज़रिए परिणाम पढ़ें (रद्द होने पर null)
```

## और गहराई में जाएँ
- स्थान गाइड: [Location & GPS](/docs/data-and-services/device-location-gps) · Widget: [LocationPicker](/docs/ui/widgets/locationpicker)
- संबंधित रेसिपी: [obter-gps.md](/docs/cookbook/device/obter-gps)
