【问题标题】:Adding Multiple Markers Google Maps添加多个标记谷歌地图
【发布时间】:2016-04-18 12:54:06
【问题描述】:

我正在尝试添加一个标记,这一切都取决于用户正在进行的活动。例如,如果用户在 location1 活动中并单击按钮打开地图,它应该打开谷歌地图,并在 location1 所在的位置有一个标记。或者,如果用户在 location2 活动中并单击按钮打开地图,它应该打开 Google 地图,并在位置 2 的位置有一个标记。

当他们点击一项活动时,我让它工作,它将他们带到谷歌地图并在该位置有一个标记。我只是尝试复制代码并将其粘贴到下面,其中包含已编辑的名称,但如果我单击不同的活动以转到地图,它会将我带到与以前相同的标记。

我的 GoogleMapsActivity 代码如下:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    //mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

    // Add a marker at the Oval and move the camera
    LatLng oval = new LatLng(53.3484013, -6.2605243);
    mMap.addMarker(new MarkerOptions().position(oval).title("Oval Pub"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(oval));

    /*
    // Add a marker at Diceys and move the camera
    LatLng diceys = new LatLng(53.3358088,-6.2636688);
    mMap.addMarker(new MarkerOptions().position(diceys).title("Diceys Nightclub"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(diceys));
    */
}

public void changeType(View view)
{
    if(mMap.getMapType() == GoogleMap.MAP_TYPE_NORMAL)
    {
        mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    }
    else
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}}

如您所见,我已经注释掉了我尝试为不同位置添加标记的代码,但它似乎将我带到了与上面相同的位置。

不确定这是否简单,因为我是 Android 中 Google 地图的新手。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 你想要什么?它应该根据以前的活动更改标记,ryt?您可以在调用此 MapsActivity 时简单地输入经度和纬度 extras 。并让它们进入 onCreate。并将其添加为标记。
  • 我希望能够单击活动中的按钮,这将打开谷歌地图,这取决于您刚刚单击的按钮所在的活动。因此,activity1 应该将您带到谷歌地图的活动1 被标记。不确定将它们放入 onCreate 并从那里添加为标记是什么意思...
  • 点击我发布的答案
  • 我怀疑问题在于 onMapReady() 仅在您的第一个活动中被调用,因为它被保留了。您可以通过打印到日志并查看(查看每次单击按钮时是否打印您输入的消息)来检查这一点。如果这是您点击的第一个位置,您会得到第二个位置吗?

标签: android google-maps android-studio google-maps-api-3


【解决方案1】:
ArrayList<MarkerData> markerArray = new ArrayList<MarkerData>();
for(int i = 0 ; i < markersArray.size() ; i++ ) {

createMarker(markersArray.get(i).getLatitude(), markersArray.get(i).getLongitude(), markersArray.get(i).getTitle(), markersArray.get(i).getSnippet(), markersArray.get(i).getIconResID());
}
....
protected void createMarker(double lat, double lon, String title, String snippet, int iconResID) {
return googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(lat, lon))
        .anchor(0.5f, 0.5f)
        .title(title)
        .snippet(snippet);
        .icon(BitmapDescriptorFactory.fromResource(iconResID)));
}

【讨论】:

    【解决方案2】:

    将它们捆绑在一起:

    ArrayList<LatLng> locations = new ArrayList();
    locations.add(new LatLng(30.243442, -1.432320));
    locations.add(new LatLng(... , ...));
    .
    .
    .
    
    for(LatLng location : locations){
     mMap.addMarker(new MarkerOptions()
        .position(location)
        .title(...)
     }
    

    【讨论】:

    • 是的,我不完全确定我做错了什么,但它给了我错误。您能否为您的代码提供一个示例,以与我在原始问题中提供的代码相匹配?它给了我错误,例如位置的未知类和 LatLng 的无效方法声明。这可能很简单,但我不太确定我哪里出错了。谢谢
    【解决方案3】:

    在第一个位置活动中:

    Intent i = new Intent(FirstLocationActivity.this, MapsActivity.class);   
      String keyLatitude  = ""; //enter the value
      String keyLongitude  = ""; //enter the value
      i.putExtra("latitude", keyLatitude );
      i.putExtra("longitude", keyLongitude );
     startActivity(i);
    

    同样对activity二位置做同样的事情,在extra中添加其对应的经纬度

    在您的 mapsActivity 中,

     String latitude="";
        String longitude ="";
    
     public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.table);
    
            Bundle bundle = getIntent().getExtras();
    
           latitude = bundle.getString("latitude");
           longitude = bundle.getString("longitude");
    
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
    
            //mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    
            // Add a marker at the Oval and move the camera
            LatLng oval = new LatLng(latitude,longitude);
            mMap.addMarker(new MarkerOptions().position(oval).title("Oval Pub"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(oval));
    
        }
    

    【讨论】:

    • 这仍然做同样的事情,无论在 MapsActivity 中首先声明的位置是什么,所有活动的标记都在该位置上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2020-01-19
    • 2018-02-16
    • 2013-04-21
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多