我切换到Android版地图的v2,我正在尝试移植以下功能:
使用MyLocationOverlay,我可以显示设备的当前位置(蓝点).当用户的位置发生变化并且点到达可见区域的边缘时,地图会动画显示,以便点实时地成为视图的中心.
在v2中,我使用了SupportMapFragment和getMap().setMyLocationEnabled(true).当前位置显示为蓝点(箭头),但是当设备更改位置时,地图视图不会移动,并且点最终会离开视图.
有任何想法吗?
使用以下代码绘制圆圈(取自Google Play服务"地图"示例):
PolylineOptions options = new PolylineOptions();
int radius = 5; //What is that?
int numPoints = 100;
double phase = 2 * Math.PI / numPoints;
for (int i = 0; i <= numPoints; i++) {
options.add(new LatLng(SYDNEY.latitude + radius * Math.sin(i * phase),
SYDNEY.longitude + radius * Math.cos(i * phase)));
}
int color = Color.RED;
mMap.addPolyline(options
.color(color)
.width(2));
Run Code Online (Sandbox Code Playgroud)
这是在世界不同地区得出的:

如你所见圆圈不是真正的圆圈,甚至第二个圆圈基本上都是椭圆形.
我想圈子的"抗锯齿"取决于int numPoints变量中的点数.
int radius = 5示例代码中的变量是什么?我是说它的衡量标准是什么?canvas.drawCircle()更新--------------------
改进数学后我可以画出"正确"的圆圈:
private void addCircle(LatLng …Run Code Online (Sandbox Code Playgroud) 我正在将iOS应用程序移植到Android,并且使用Google Maps Android API v2. 该应用程序需要在地图上绘制热图叠加层.
到目前为止,看起来最好的选择是使用TileOverlay并实现自定义TileProvider.在该方法中getTile,我的方法被赋予x,y和zoom,并且需要以a的形式返回位图Tile.到现在为止还挺好.
我有一组热图项目,我将用它们在位图上绘制径向渐变,每个都有一个纬度/经度.我遇到以下两个任务有问题:
谢谢您的帮助!
UPDATE
感谢MaciejGórski的回答,以及marcin的实现,我能够回答我的问题的前半部分,但我仍然需要第二部分的帮助.为了澄清,我需要一个函数来返回指定纬度/经度的图块的x/y坐标.我试图扭转MaciejGórski的计算和marcin的答案而没有运气.
public static Point fromLatLng(LatLng latlng, int zoom){
int noTiles = (1 << zoom);
double longitudeSpan = 360.0 / noTiles;
double mercator = fromLatitude(latlng.latitude);
int y = ((int)(mercator / 360 * noTiles)) + 180;
int x = (int)(latlng.longitude / longitudeSpan) + 180;
return new Point(x, y);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
android google-maps google-maps-android-api-2 android-maps-v2
为了实现这一点,我觉得我只需要覆盖onMarkerClick并检查点击标记的infoWindow是否已经打开,但令我惊讶的是clickedMarker.isInfoWindowShown()总是返回false ...
我的代码:
@Override
public boolean onMarkerClick(final Marker clickedMarker) {
if(clickedMarker.isInfoWindowShown()) {
clickedMarker.hideInfoWindow();
System.out.println("was showing");
} else {
clickedMarker.showInfoWindow();
System.out.println("not showing");
}
}
Run Code Online (Sandbox Code Playgroud)
它总是告诉我infoWindow"没有显示"这是不对的......我可以通过保留参考来解决这个问题,userLastClickedMarker但我想知道上面我做错了什么.
谢谢!
编辑:
我更改了代码以调试此问题:
System.out.println(clickedMarker.isInfoWindowShown());
if(clickedMarker.isInfoWindowShown()) {
clickedMarker.hideInfoWindow();
System.out.println(" showing");
} else {
clickedMarker.showInfoWindow();
System.out.println("not showing");
}
System.out.println(clickedMarker.isInfoWindowShown());
Run Code Online (Sandbox Code Playgroud)
我发现isInfoWindowShown()在onMarkerClick方法中可以正常工作但不会正确"记住"它.而且我发现有人已经指出这是一个错误......
https://code.google.com/p/gmaps-api-issues/issues/detail?id=5408
我正在尝试为谷歌地图片段设置onDrag Listener,但无法触发拖动事件.由于地图不直接支持拖动事件,我正在尝试为View实现拖动侦听器.我知道onMarkerDrag事件,但这对我没有好处,因为我不想移动标记.
捕获地图拖动事件的原因有两个:
首先检测用户是否已平移地图.如果他们没有,我喜欢将他们的位置保留在屏幕上,如果它不在地图上,则动画显示他们的位置.如果他们已经平移了地图,我会假设他们知道他们想要看到什么并强制在屏幕上显示位置.(这似乎应该包含在API中)
陷印的第二个原因是允许用户在地图上绘制线条和多边形.我可以使用onTap事件(添加点)来做到这一点,但我也希望能够让它们自由地使用它.
我的代码看起来像这样:
主要活动:
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
setUpMapIfNeeded();
mMapView = findViewById(R.id.map);
myMapDragListener = new MapDragListener();
mMapView.setOnDragListener(myMapDragListener);
Run Code Online (Sandbox Code Playgroud)
听众:
public class MapDragListener implements OnDragListener {
/**
*
*/
public MapDragListener() {
super();
say.logCat("MapDragListener: I'm ALIVE!!!!");
}
private AkamaiAnnounce say = new AkamaiAnnounce();
private boolean inDrag;
private boolean hasPanned=false;
@Override
public boolean onDrag(View v, DragEvent event) {
say.logCat("MapDragListener.onDrag: " + event.toString());
//String dotTAG = (String) getTag();
if (event.getLocalState() != this) {
return false;
}
boolean myResult = true;
int …Run Code Online (Sandbox Code Playgroud) 如何在Android谷歌地图中显示附近的地方和地方详细信息,如ATM,医院,餐馆等
这是我使用的链接:
使用Google地方信息和地图API显示附近的地点和地点详情
我可以获取当前位置,但附近的地方没有显示.我也没有收到任何错误logcat
android google-maps google-places-api google-maps-android-api-2
我在我的应用程序中使用片段,我是新手.有一个片段,我想要显示谷歌地图,并希望得到它的对象,为此,我有一个XML片段,我想在片段本身膨胀它.当我试图给地图视图充气时,它会向我显示getSupportFragmentManager()的错误.
如何获取地图对象然后这是主要问题.我的XML是这样的: -
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="250dp"
class="com.google.android.gms.maps.SupportMapFragment" />
Run Code Online (Sandbox Code Playgroud)
而我想要获取谷歌地图对象的片段是这样的: -
public class FindMyCar extends Fragment {
private TextView mTvFind;
private TextView mTvPark;
private EditText mEtParkHint;
private GoogleMap map;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.findmycar, null);
initViews(view);
Typeface type = Typeface.createFromAsset(getActivity().getResources().getAssets(),"Multicolore.otf");
mTvFind.setTypeface(type);
mTvPark.setTypeface(type);
mEtParkHint.setTypeface(type);
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() { …Run Code Online (Sandbox Code Playgroud) android google-maps fragment android-fragments google-maps-android-api-2
我正在使用折线绘制路线,并且在路线上方显示交通数据,因此路线被交通线部分隐藏.
更新 我在gmap-api-issues上创建了问题并在那里附加了示例源代码(您只需要将Google Maps API密钥添加到AndroidManifest.xml).请"明星"这些问题以吸引谷歌开发者的注意力.