android Google Map API v2 में MapFragment पर एकाधिक मार्कर कैसे दिखाएं?




google-maps google-maps-markers (4)

मै मैप्स दिखाने के लिए अपने एप्लिकेशन में Google Map API v2 का उपयोग कर रहा हूं।

मैंने अपने सभी चरणों का पालन किया है, जिसका पालन मेरे आवेदन में Google मानचित्र को सक्षम करने के लिए किया जाना है।

public class PinLocationOnMapView extends FragmentActivity {

    private double mLatitude = 0.0, mLongitude = 0.0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SupportMapFragment fragment = SupportMapFragment.newInstance();
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, fragment).commit();
    }
}

अगर मैं इस कोड का उपयोग करता हूं, तो यह मुझे नक्शा दिखाता है, लेकिन यदि मैं अपना अक्षांश / देशांतर मान प्रदान करता हूं, तो नक्शा टाइल्स लोड नहीं होता है, और मैं केवल सफेद टाइल्स देखता हूं।

उपरोक्त वर्ग के क्रिएट () में लिखा गया कोड निम्नलिखित है:

 if (getIntent().getExtras() != null) {
            final Bundle bundle = getIntent().getBundleExtra("LOCATION");
            mLatitude = bundle.getDouble("LATITUDE");
            mLongitude = bundle.getDouble("LONGITUDE");
        } else {
            finish();
        }

        GoogleMapOptions options = new GoogleMapOptions();
        LatLng latLng = new LatLng(mLatitude, mLongitude);
        CameraPosition cameraPosition;// = new CameraPosition(latLng, 0, 0, 0);
        cameraPosition = CameraPosition.fromLatLngZoom(latLng, (float) 14.0);

        options.mapType(GoogleMap.MAP_TYPE_SATELLITE).camera(cameraPosition)
                .zoomControlsEnabled(true).zoomGesturesEnabled(true);

        SupportMapFragment fragment = SupportMapFragment.newInstance(options);
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, fragment).commit(); 

इसके अलावा, मेरे पास लेट / लम्बे मानों की एक सूची है। मैं उन्हें MapFragment पर दिखाना चाहता MapFragment , MapFragment पर एकाधिक मार्कर कैसे दिखाना है ?

मैंने MapView और ItemizedOverlay साथ प्रयास किया, लेकिन यह मेरे लिए काम नहीं किया। मेरा मानना ​​है कि मैंने API कुंजी प्राप्त करने के लिए सही ढंग से SHA1 कुंजी बनाई है, क्योंकि अगर यह गलत था, तो MapFragment का उपयोग करके मैप नहीं देख सका, लेकिन मैं देख सकता हूं कि अगर मैं लेट / लॉग वैल्यू पास नहीं करता हूं।

https://code.i-harness.com


GeoCoder का उपयोग करते हुए पता बदलने के दौरान मानचित्र में एकाधिक मार्कर जोड़ने के लिए (यानी 123 टेस्टिंग स्ट्रीट लोदी सीए) लैट्लिंग में, नीचे दिया गया उदाहरण कोड काम करेगा।

// convert address to lng lat and add markers to map
public void addMarkersToMap() {
    mMap.clear();
    Double[] latitude = new Double[addressArrayList.size()];
    Double[] longitude = new Double[addressArrayList.size()];
    String[] addrs = new String[addressArrayList.size()];
    addrs = addressArrayList.toArray(addrs);
    List<Address> addressList;
    if (addrs != null && addrs.length > 0) {
        for (int i = 0; i < addrs.length; i++) {
            try {
                addressList = geoCoder.getFromLocationName(addrs[i], 1);
                if (addressList == null || addressList.isEmpty() || addressList.equals("")) {
                    addressList = geoCoder.getFromLocationName("san francisco", 1);
                }
                latitude[i] = addressList.get(0).getLatitude();
                longitude[i] = addressList.get(0).getLongitude();
                System.out.println("latitude = " + latitude[i] + " longitude = " + longitude[i]);
                mMap.addMarker(new MarkerOptions()
                          .position(new LatLng(latitude[i], longitude[i]))
                          .title(namesArrayList.get(i))
                          .snippet(addressArrayList.get(i))
                          .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                          .alpha(0.7f)
                );
            } catch (Exception e) {
                e.printStackTrace();
            } // end catch
        }
    }
} //end addMarkersToMap

इस कोड को आज़माएं जो आपके वेब साइट रूट निर्देशिका में एक XML फ़ाइल को कॉल करता है -

मार्कर जोड़ने का एक तरीका एक एक्सएमएल फ़ाइल लोड करना है जो रूट निर्देशिका पर रहता है (नीचे कोड देखें), जिसमें मार्कर एचटीएमएल है।

यहां कोड नक्शा स्थान और मार्करों के लिए मानचित्र और लिंक रखने के लिए एक साइड-बार कॉलम सेट अप करता है। ध्यान दें कि एचटीएमएल और मैप आइटम्स के लिए आईडी के साथ एक div टैग और साइड-बार टीडी आईडी दोनों।

आप मार्कर सेट अप कर सकते हैं, लेकिन विशेष वर्णों का उपयोग करने की आवश्यकता को ध्यान में रखें जिन्हें सही ढंग से टैग किया जाना चाहिए; उदाहरण के लिए ampersand (&) वास्तव में "&" + "amp" + "के रूप में कोड किया जाना चाहिए;" (बिना उद्धरण)। यह वर्णों से अधिक और उससे कम पर लागू होता है, और इसी तरह। यदि आपके पास कई मार्कर हैं, तो यह एक कोर है, लेकिन एक बार जगह में बदलना आसान है क्योंकि इसे ऐप के अंदर निर्मित या कोडिंग करने की आवश्यकता वाले किसी भी असेंबली की आवश्यकता नहीं होती है। फ़ाइल को पढ़ने वाली स्क्रिप्ट में, सीडीएटीए टैग का उपयोग करके तकनीकी रूप से विशेष चरित्र प्रतिनिधित्व का अनावश्यक उपयोग करना चाहिए, लेकिन जीएमएपीएस एपीआई v2 के लिए, मैं वैसे भी उनका उपयोग करता हूं। मेरे उदाहरण के लिए xml फ़ाइल नाम example3.xml है।

आप इस तरह xml प्रारूपित कर सकते हैं:

<Markers>
<marker lat="47.881389" lng="-122.242222"
html='&lt;div style="background-color:#FFFF88;font-family:Tahoma; font-size:12px;padding:6px;  border:solid 1px black;"&gt;&lt;b&gt;SiteLines Park &#38; Playground Products&lt;/b&gt; &lt;br&gt;626 128th Street SW&lt;br&gt;Suite 104-A&lt;br&gt;Everett&#8218;&#160;WA 98204&lt;br&gt;Phone&#58; &#40;425&#41; 355-5655&lt;br&gt;&lt;b&gt;Toll&#160;Free&#58;&#160;&#40;800&#41;&#160;541-0869&lt;/b&gt;&lt;br&gt;Fax&#58;&#160;&#40;425&#41;&#160;347-3056&lt;br&gt;Email&#58;&#160;&lt;a href="mailto:[email protected]" target="blank"&gt;emailus&#64;sitelines.com&lt;/a&gt;&lt;br&gt;Web&#58;&#160;&lt;a href="http://www.sitelines.com" target="blank"&gt;www.sitelines.com&lt;/a&gt; &lt;/div&gt;'label="SiteLines Park &#38; Playground Products" />
</Markers>

And for the html and script:
<form style="background-color: #ffffff;" id="form1" runat="server">
<div style="text-align: center;">
<table style="border: 1px currentColor; vertical-align: middle;">
<tbody>
<tr>
<td style="background-color: #bbcae3; vertical-align: top;">
<div style="background-color: #e4e4e4; font-family: Tahoma; font-size: 12px; line-height: 22px;  padding: 5px; text-decoration: underline; width: 210px; color: #000000; text-align: left;" id="side_bar"></div>
</td>
<td>
<div style="height: 600px; width: 600px;" id="map"></div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAyUoL7QQqyBn6qU653XJGLxSjEdRKL8ahnZ9z8zIKzjlyzNOP2RRCsKP_vlAEzWT8jzEKS0_9RrXOAg"></script>
<script type="text/javascript">// <![CDATA[
if (GBrowserIsCompatible()) {
        // this variable will collect the html which will eventualy be placed in the side_bar
        var side_bar_html = "";

        // arrays to hold copies of the markers and html used by the side_bar
        // because the function closure trick doesnt work there
        var gmarkers = [];
        var htmls = [];
        var i = 0;

        // A function to create the marker and set up the event window
        function createMarker(point, name, html) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(html);
            });

            // save the info we need to use later for the side_bar
            gmarkers[i] = marker;
            htmls[i] = html;
            // add a line to the side_bar html
            side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
            i++;
            return marker;
        }

        // This function picks up the click and opens the corresponding info window
        function myclick(i) {
            gmarkers[i].openInfoWindowHtml(htmls[i]);
        }

        // create the map
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(0, 0), 0);
        //
        // ===== Start with an empty GLatLngBounds object =====
        var bounds = new GLatLngBounds();

        // Read the data from example3.xml
        GDownloadUrl("/testStore/example3.xml", function(doc) {
            var xmlDoc = GXml.parse(doc);
            var markers = xmlDoc.documentElement.getElementsByTagName("marker");

            for (var i = 0; i < markers.length; i++) {
                // obtain the attribues of each marker
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var point = new GLatLng(lat, lng);
                var html = markers[i].getAttribute("html");
                var label = markers[i].getAttribute("label");
                // create the marker
                var marker = createMarker(point, label, html);
                map.addOverlay(marker);
            }
            // put the assembled side_bar_html contents into the side_bar div
            document.getElementById("side_bar").innerHTML = side_bar_html;
        });
    }

    else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    }
    // This Javascript is based on code provided by the
    // Blackpool Community Church Javascript Team
    // http://www.commchurch.freeserve.co.uk/   
    // http://econym.googlepages.com/index.htm

//]]>


मुझे नहीं पता कि आपने कोड तय कर लिया है और अब यह ठीक है, लेकिन onCreate()

if (getIntent().getExtras() != null) {
   final Bundle bundle = getIntent().getBundleExtra("LOCATION");
   mLatitude = bundle.getDouble("LATITUDE");
   mLatitude = bundle.getDouble("LONGITUDE");
}

दूसरा mLatitude मुझे लगता है कि इसे mLongitude होना mLongitude जैसे कि आप इसे अगली पंक्तियों में कॉल करते हैं।

क्षमा करें अगर मुझे जवाब के साथ देर हो चुकी है और बेकार है।


मैं इसे विभिन्न रंगों के मार्करों के साथ मानचित्र पर कार की स्थिति दिखाने के लिए ऐसा करता हूं:

    private void addMarkersToMap() {
    mMap.clear();
    for (int i = 0; i < Cars.size(); i++) {         
            LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon());
            BitmapDescriptor bitmapMarker;
            switch (Cars.get(i).getState()) {
            case 0:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);
                Log.i(TAG, "RED");
                break;
            case 1:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN);
                Log.i(TAG, "GREEN");
                break;
            case 2:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE);
                Log.i(TAG, "ORANGE");
                break;
            default:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);
                Log.i(TAG, "DEFAULT");
                break;
            }               
            mMarkers.add(mMap.addMarker(new MarkerOptions().position(ll).title(Cars.get(i).getName())
                    .snippet(getStateString(Cars.get(i).getState())).icon(bitmapMarker)));

            Log.i(TAG,"Car number "+i+"  was added " +mMarkers.get(mMarkers.size()-1).getId());
        }
    }

}

कार कस्टम ऑब्जेक्ट्स का एक ऐरेलिस्ट है और एममार्कर्स मार्करों का एक ऐरेलिस्ट है।

नोट: आप इस तरह के टुकड़े में नक्शा दिखा सकते हैं:

private GoogleMap mMap;
....

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the
    // map.
    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            setUpMap();
        }
    }
}




private void setUpMap() {
    // Hide the zoom controls as the button panel will cover it.
    mMap.getUiSettings().setZoomControlsEnabled(false);

    // Add lots of markers to the map.
    addMarkersToMap();

    // Setting an info window adapter allows us to change the both the
    // contents and look of the
    // info window.
    mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter());

    // Set listeners for marker events. See the bottom of this class for
    // their behavior.
    mMap.setOnMarkerClickListener(this);
    mMap.setOnInfoWindowClickListener(this);
    mMap.setOnMarkerDragListener(this);

    // Pan to see all markers in view.
    // Cannot zoom to bounds until the map has a size.
    final View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView();
    if (mapView.getViewTreeObserver().isAlive()) {
        mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @SuppressLint("NewApi")
            // We check which build version we are using.
            @Override
            public void onGlobalLayout() {
                LatLngBounds.Builder bld = new LatLngBounds.Builder();
    for (int i = 0; i < mAvailableCars.size(); i++) {           
            LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon());
            bld.include(ll);            
    }
    LatLngBounds bounds = bld.build();          
    mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 70));
                mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            }
        });
    }
} 

और बस setUpMapIfNeeded() को setUpMapIfNeeded() कॉल करें





supportmapfragment