标签: android-maps-v2

TileProvider方法getTile - 需要将x和y转换为lat/long

我正在将iOS应用程序移植到Android,并且使用Google Maps Android API v2. 该应用程序需要在地图上绘制热图叠加层.

到目前为止,看起来最好的选择是使用TileOverlay并实现自定义TileProvider.在该方法中getTile,我的方法被赋予x,y和zoom,并且需要以a的形式返回位图Tile.到现在为止还挺好.

我有一组热图项目,我将用它们在位图​​上绘制径向渐变,每个都有一个纬度/经度.我遇到以下两个任务有问题:

  1. 如何确定由x,y和zoom表示的图块是否包含热图项目的纬度/经度?
  2. 如何将热图项目的纬度/经度转换为位图的x/y坐标.

谢谢您的帮助!

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

16
推荐指数
3
解决办法
5844
查看次数

"使用谷歌地图导致类片段错误"

我尝试使用Google Map制作示例项目,但我做不到.请帮帮我!

测试设备:Android 4.0.4


错误信息 :

12-29 23:45:32.605: E/AndroidRuntime(9437): FATAL EXCEPTION: main
12-29 23:45:32.605: E/AndroidRuntime(9437):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.test_googlemap/com.example.test_googlemap.MainActivity}:
android.view.InflateException: Binary XML file line #2: Error
inflating class fragment 12-29 23:45:32.605: E/AndroidRuntime(9437):
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
android.app.ActivityThread.access$600(ActivityThread.java:127) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
android.os.Handler.dispatchMessage(Handler.java:99) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
android.os.Looper.loop(Looper.java:137) 12-29 23:45:32.605:
E/AndroidRuntime(9437):     at
android.app.ActivityThread.main(ActivityThread.java:4507) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
java.lang.reflect.Method.invokeNative(Native Method) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
java.lang.reflect.Method.invoke(Method.java:511) 12-29 23:45:32.605:
E/AndroidRuntime(9437):     at …
Run Code Online (Sandbox Code Playgroud)

android android-maps-v2

15
推荐指数
2
解决办法
4万
查看次数

检查标记是否在圆半径内

我想知道给定的标记是否在圆半径内.

在javascript中,我可以做类似的事情:

google.maps.geometry.spherical.computeDistanceBetween(latLngCircleCenter, latLngPoint);
Run Code Online (Sandbox Code Playgroud)

但是在android中,使用maps-v2,我被困住了.

在此输入图像描述

android google-maps android-maps-v2

14
推荐指数
1
解决办法
2万
查看次数

旋转手机时如何最好地重新创建标记/折线(方向更改)

背景:

  • 开发使用Android Google Map v2的原生Android应用程序android.support.v4.app.FragmentActivity.在Android v2.2上运行.

目的:

  • 在电话方向改变之前,保留在地图上"绘制"标记/折线.

问题(S):

  1. 我可以标记/折线"保存"作为软件包的一部分,只需将其储存在他们重新显示onSaveInstanceState使用适当的savedInstance.put..方法和然后"恢复"他们onCreate使用适当的savedInstanceState.get..方法.

    在查看Marker的描述getID()时,当Marker.getId()方法的Google文档声明如下时,我很困惑:

    从Bundle 恢复地图时,也会恢复该地图上的标记.但是,这些标记将由不同的标记对象表示.标记的id可用于在此类恢复之后检索Marker对象的新实例.

    谷歌文档(上面的粗体文字)使得听起来像标记只是自动恢复而无需采取任何行动.那不是我的经历......也许我错误地解释了所陈述的内容.或者你可能必须在Bundle中明确保存地图?有人可以澄清这意味着什么吗?

  2. 假设我必须通过适当的savedInstance.put...方法明确地将标记和折线保存到包中,我应该保存整个标记还是应该保存标记ID并使用标记ID检索标记信息以重新显示标记?我找不到一种put方法可以让我保存整个标记.

    我注意到,MapFragment部分谷歌地图API的Android V2它的声明如下:

    从GoogleMap获取的任何对象都与视图相关联.重要的是不要在视图的生命之外保持对象(例如标记).否则会导致内存泄漏,因为视图无法释放.

    这个陈述让我相信我不应该尝试保存标记本身,而是尝试保存标记id,然后根据与标记id关联的标记对象重新生成标记.同样对于PolyLines.我的假设是否正确?

  3. 另外,我应该避免将Marker作为类变量吗?我担心的是,如果Marker是一个类变量,并且Activity Map片段放在后面的堆栈上,这可能会导致内存泄漏,因为它将有效地"保持对象",如前面提到的文档中所述.这是我应该关注的吗?

问候.

android android-maps-v2

14
推荐指数
2
解决办法
6235
查看次数

Google Maps Android API v2在中国 - 地图加载大约需要一个小时

我有什么:使用Android Maps API v2(本机库)的原生Android应用程序

香港和乌克兰的一切都很好.一旦我们踏入中国边境,问题就出现了.我们有下一个问题:

我对中国的了解:

  • 谷歌在那里并不友好,但我们的应用程序不是在中国使用谷歌地图的应用程序,所以我的问题可能不是一个新的.
  • 可以选择使用在中国本地托管的谷歌地图 - ditu.google.cn,但是一旦我们使用原生应用程序,现在就没有选择使用地图的Web视图而不是本机实现(我们有很多自定义)
  • 我知道,最好不要在谷歌地图上使用HTTPS(你可以在这里阅读:中国的Google Maps Geolocation API)

问题是:

  • 我们能以某种方式改善地图的负荷吗?我们可以以某种方式覆盖谷歌地图来源以使用ditu.google.cn吗?
  • 我们可以在Map API中以某种方式禁用HTTPS吗?
  • 围绕此问题的任何其他解决方案,可以基于谷歌服务应用.也许有一些无证的功能?

什么是没有想到的答案是"使用百度".我知道百度,这是一个veeryyy备份选项,只要他们有一个api docs in chineese.

需要补充的是,基于ditu.google.cn的Geocoding API运行良好.

期待,谢谢!

android google-maps android-maps google-maps-android-api-2 android-maps-v2

14
推荐指数
1
解决办法
2520
查看次数

不是AndroidManifest的具体类

当我在AndroidManifest中添加Activity时,我收到的错误是没有具体的类.请帮我通过删除活动的抽象类来解决问题,但它无法解决.

public abstract class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    private GoogleMap mMap;

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

    @Override
    protected void onResume() {
        super.onResume();
        setUpMap();
    }

    @Override
    public void onMapReady(GoogleMap map) {
        if (mMap != null) {
            return;
        }
        mMap = map;
        startDemo();
    }

    private void setUpMap() {
        ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
    }

    /**
     * Run the demo-specific code.
     */
    protected abstract void startDemo();

    protected GoogleMap getMap() {
        return mMap;
    }

}
Run Code Online (Sandbox Code Playgroud)

java android android-maps-v2

14
推荐指数
1
解决办法
8559
查看次数

如何在我的Android设备上禁用已安装的Google Play服务版本?

我的应用程序使用谷歌地图功能,需要在设备上安装和启用Google Play服务.我想测试一个案例,如果用户手动禁用谷歌播放服务请求用户启用它,以便应用程序可以正常工作.所以我需要针对这种情况测试我的代码,但我不知道如何在手机上禁用(不卸载)Google Play服务并检查我的代码是否正常工作.

谢谢

android google-play-services android-maps-v2

13
推荐指数
2
解决办法
4万
查看次数

setContentView()与地图片段相比较慢

我正在开发一个应用程序,将谷歌地图(api v2)显示为片段.当应用程序加载时,它会在显示地图之前显示一个空白的白色屏幕几秒钟.我已经使用了日志语句来查看延迟的位置,但我不知道它为什么这么慢.

这是我的onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "onCreate Start -------------------------------");
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate 1 -------------------------------");
    setContentView(R.layout.activity_main);
    Log.i(TAG, "onCreate 2 -------------------------------");
    do_async_setup();
    Log.i(TAG, "onCreate 3 -------------------------------");
    prefs = getSharedPreferences(PREFS_NAME, 0);
    prefs_editor = prefs.edit();
    Log.i(TAG, "onCreate Finish -------------------------------"); 
Run Code Online (Sandbox Code Playgroud)

这是输出.

01-20 10:05:28.802: I/HeadsUp(19544): onCreate Start -------------------------------
01-20 10:05:28.802: I/HeadsUp(19544): onCreate 1 -------------------------------
01-20 10:05:30.396: I/HeadsUp(19544): onCreate 2 -------------------------------
01-20 10:05:30.396: I/HeadsUp(19544): onCreate 3 -------------------------------
01-20 10:05:30.403: I/HeadsUp(19544): onCreate Finish -------------------------------
Run Code Online (Sandbox Code Playgroud)

你可以看到setContentView有1.5秒的延迟.这是我的布局.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

<fragment xmlns:android="http://schemas.android.com/apk/res/android" …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-maps-v2

12
推荐指数
1
解决办法
5912
查看次数

禁用InfoWindows的单击突出显示?

有没有办法禁用用户点击Android InfoWindowMapsv2 Api版本时出现的高亮效果?

这是getIfoContent()getInfoWindow()方法的问题.随着getInfoWindow()它的文字突出.

android android-maps-v2

12
推荐指数
1
解决办法
2732
查看次数

打开街道地图工作离线android

我是Open Street Map的新手.我做了一些研究,发现我们可以将地图下载并存储到一个文件夹中.但我没有找到任何提供离线Open Street Map的教程或示例.有人可以提供一步一步的教程,请执行离线开放街道地图的指南.我正在关注此示例http://android-coding.blogspot.com/2012/06/example-of-implementing-openstreetmap.html但现在我想在没有连接时使其可用.

android openstreetmap android-maps osmdroid android-maps-v2

12
推荐指数
1
解决办法
2万
查看次数