V2 Android मानचित्र के लिए मानचित्र का केंद्र कैसे प्राप्त करें?


83

Android v1 के लिए Google मानचित्र में , MapView में एक सुविधा विधि थी getMapCenter():। अब मैं यह नहीं जान सकता कि इस एपीआई के v2 के साथ मैप सेंटर कैसे प्राप्त करें । मैंने एपीआई प्रलेखन का दुरुपयोग किया है, लेकिन इस तरह की सुविधा का कोई उल्लेख नहीं है। कृपया सलाह दें।

धन्यवाद, इगोर

जवाबों:


196

मुझे भी यही समस्या थी। ऐसा लगता है कि आप इस तरह से केंद्र प्राप्त कर सकते हैं:

mMap.getCameraPosition().target

जहां mMap आपकी गतिविधि से GoogleMap उदाहरण है। यह एक LatLng वस्तु लौटाएगा जो मूल रूप से नक्शे के केंद्र का प्रतिनिधित्व करता है।

ध्यान दें कि GeoPointकक्षा अब उपलब्ध नहीं है।

Http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html के अनुसार

लक्ष्य है "वह स्थान जो कैमरा इंगित कर रहा है।" (मैंने इसका नमूना कोड के साथ परीक्षण किया और यह मेरे लिए ठीक है)


1
धन्यवाद, मुझे महसूस नहीं हुआ कि जियोप्वाइंट v2 में अनुपलब्ध था। मैं मानचित्र प्रदर्शन के चार कोनों के बीच के मध्य बिंदु की गणना करने के लिए VisibleRegion ऑब्जेक्ट का उपयोग करने वाला था।
इगोरगानापोलस्की

@Radu Comaneci html जावास्क्रिप्ट के साथ कैसे करें? कोई भी विचार
अंकेश कुमार जयसंसारिया

अच्छा उत्तर, लेकिन यह प्रभावित हो जाता है अगर उदाहरण के लिए कॉपीराइट Google साइन को स्थानांतरित करने के लिए एक पैडिंग का उपयोग करके im किया जाता है, तो मानचित्र के केंद्र को यह पेडिंग मान भी मिलेगा
sdelvalle57

34

मुझे ऐसा करने के दो तरीके मिले हैं:

1) सबसे आसान, पहला मैप के CameraPosition ऑब्जेक्ट में लक्ष्य संपत्ति का उपयोग कर रहा है

 LatLng center = mMap.getCameraPosition().target;

2) दूसरा एक VisibleRegion ऑब्जेक्ट का उपयोग कर रहा है:

VisibleRegion visibleRegion = mMap.getProjection()
                    .getVisibleRegion();

Point x = mMap.getProjection().toScreenLocation(
                    visibleRegion.farRight);

Point y = mMap.getProjection().toScreenLocation(
                    visibleRegion.nearLeft);

Point centerPoint = new Point(x.x / 2, y.y / 2);

LatLng centerFromPoint = mMap.getProjection().fromScreenLocation(
                    centerPoint);

मैंने दोनों उत्तरों की तुलना की है:

Log.d("MapFragment: ", "Center From camera: Long: " + center.longitude
                        + " Lat" + center.latitude);

Log.d("Punto x", "x:" + x.x + "y:" + x.y);
Log.d("Punto y", "y:" + y.x + "y:" + y.y);

Log.d("MapFragment: ", "Center From Point: Long: "
                    + centerFromPoint.longitude + " Lat"
                    + centerFromPoint.latitude);

1
विकल्प 2 विकल्प 1 की तुलना में मेरे लिए एक पूरी तरह से अलग उत्तर देता है। हो सकता है कि मेरे पास एक पारदर्शी टूलबार है? पारितोषिक के लिए धन्यवाद!
फ्लाइंगवीवी

3
तो कौन सी विधि सटीक है?
अब्दुल्ला शोएब

@shontauro html जावास्क्रिप्ट के साथ कैसे करें? कोई भी विचार
अंकेश कुमार जयसंसारिया

1
जावास्क्रिप्ट कोई विचार नहीं है।
२४:१६

15

आप उपयोग कर सकते हैं :

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();

इस समाधान के साथ सटीकता प्राप्त करें
VVB

6

मानचित्र का केंद्र पाने के लिए मैंने गतिविधि में onMapReady () पद्धति का उपयोग किया, फिर उपयोग किया googleMap.setOnCameraChangeListener() method to get position of Came:

@Override
public void onMapReady(GoogleMap googMap) {
    googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {

       Log.i("centerLat",cameraPosition.target.latitude);

       Log.i("centerLong",cameraPosition.target.longitude);

        }
    });
}

5

यदि आप केवल एक बार पोजिशन प्राप्त करना चाहते हैं (उदाहरण के बाद उपयोगकर्ता ने मैप को पैन करना बंद कर दिया है), उपयोग करें setOnCameraIdleListener:

https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnCameraIdleListener

mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
    @Override
    public void onCameraIdle() {
        LatLng position = mMap.getCameraPosition().target;
        Log.d("MapActivity", "Position: " + position);
    }
});

या जावा 8 लैम्ब्डा का उपयोग कर:

mMap.setOnCameraIdleListener(() -> {
    LatLng position = mMap.getCameraPosition().target;
    Log.d("MapActivity", "Position: " + position);
});

ध्यान दें कि जो श्रोता पंजीकृत है setOnCameraChangeListener, उसे कई बार कहा जाता है, और जैसा कि दस्तावेज कहता है:

इसे हर फ्रेम के रूप में एक बार कहा जा सकता है और इसे महंगा संचालन नहीं करना चाहिए।


3

सबसे अच्छा तरीका कैमरापाइप का उपयोग करें

जावा:

LatLng centerMap = googleMap.getCameraPosition().target;

कोटलिन:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.