2

我正在使用 StackOverflow 上的以下代码从我的活动中调用 Google Maps Intent:

    final String uriContent = String.format(Locale.ENGLISH, "http://maps.google.com/maps?q=loc:%s", pCoordinate);
    final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriContent));
    pContext.startActivity(intent);

wherepCooriante包含完整的地址,例如1.23456,7.8901.

当我的手机使用英语作为其语言时,它运行良好,但是当我将其更改为法语或越南语(使用逗号,作为其数字小数分隔符)时,它就不能再工作了,因为谷歌地图进行的查询看起来像:1,000,2,000(它显示在搜索栏中,然后出现类似的消息Cannot find 1,0000,2,0000),虽然我发送给意图的确切URI是1.000,2.000(坐标转换为字符串以防止Locale问题,因此Locale.ENGLISHinString.format或多或少只是丰富)。

简而言之,Uri.parse(uriContent)准确地返回带有查询 is 的请求1.000,2.000,但谷歌地图本身改变了它。但是,方向代码适用于任一区域设置:

    final String uriContent = String.format(Locale.ENGLISH, "google.navigation:q=%s", pCoordinate);
    final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriContent));
    pContext.startActivity(intent);

有没有办法阻止谷歌地图的转换?如果我使用geo:<coordinate>,那很好,但我需要在那个位置有一个标记。

附加信息:

此代码final String uriContent = String.format("geo:0,0?q=%s&z=19", pCoordinate);也不起作用,句点被转换为逗号。

此代码final String uriContent = String.format("geo:%s?q=%s&z=19", pCoordinate, pCoordinate);可以将地图中心带到坐标,但仍然无法将标记放在那里,并出现错误“找不到'用逗号替换句点的坐标'”

4

4 回答 4

2

我正在使用一个临时解决方案来解决这个问题,将坐标的十进制形式转换为度数。(例如10.768717,106.651488,我没有发送,而是发送10° 46' 7.3812",106° 39' 5.3568")。转换只是简单的数学运算。

但是,Javafloatdouble精度存在问题,发送到谷歌地图时距离很远。因此,我更改了输入数据,使用 C# 转换数据,decimal而我的 Android 应用程序只使用它而不使用任何东西。这是转换(C#)代码:

    protected String convertDecimalToDegree(decimal pDecimal)
    {
        int degree = (int)Math.Floor(pDecimal);
        pDecimal -= degree;

        pDecimal *= 60;
        int minute = (int)Math.Floor(pDecimal);
        pDecimal -= minute;

        pDecimal *= 60;

        return degree + "° " + minute + "\' " + pDecimal + "\"";
    }

用法:

                    String[] coordinates = shop.MapCoordination.Split(',');
                    decimal n1 = Decimal.Parse(coordinates[0]);
                    decimal n2 = Decimal.Parse(coordinates[1]);
                    shop.MapCoordination = this.convertDecimalToDegree(n1) + "," + this.convertDecimalToDegree(n2);

我现在将其标记为答案,但我很欣赏任何解决方案,而无需转换为这种形式。

于 2013-09-06T09:16:05.870 回答
0

您可以使用以下代码段来解决问题

public String getCoordinates(String coordinates){
    if(Locale.FRANCE == Locale.getDefault()){
        Pattern p = Pattern.compile(",.*?(,)");
        Matcher m = p.matcher(coordinates);
        if (m.find( )) {
            int index = m.end(); //gets the second comma position
            String str1 = coordinates.substring(0,index-1);
            String str2 = coordinates.substring(index,coordinates.length());
            NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
            try {
                str1 = nf.parse(str1).toString();
                str2 = nf.parse(str2).toString();
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return str1+","+str2;
        }
    }
    return coordinates;
}
于 2013-09-05T11:03:15.407 回答
0

将 Google 地图应用程序更新到最新版本 (7.2.0) 似乎可以解决此问题。

于 2013-10-02T06:28:15.650 回答
-2

在 Xamarin.Android 中:

using System.Globalization;

Android.Net.Uri.Parse("http://maps.google.com/maps?daddr=" + myLatitude.ToString(CultureInfo.InvariantCulture) + "," +  myLongitude.ToString(CultureInfo.InvariantCulture)));
于 2017-10-30T16:24:51.397 回答