मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

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

उद्देश्य। उपयोगकर्ता को एक स्थिति की पुष्टि करने के लिए खींचने योग्य पिन और 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 पर निष्पादित होता है।

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

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 ढाँचे में रखें।

न्यूनतम अंश

// स्रोत में सत्यापित: 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)

और गहराई में जाएँ

क्या यह पृष्ठ उपयोगी था?