【问题标题】:Android Google Maps draw polygon in metersAndroid Google Maps 以米为单位绘制多边形
【发布时间】:2015-03-29 20:05:52
【问题描述】:

我想在我的谷歌地图片段上画一个三角形。 它应该如下所示: i.stack.imgur.com/880kV.png

要创建多边形,我需要 3 个位置(A、B、C)。 我必须创建它的变量是我当前的位置(点 A)、手机的当前角度、2 个较长边的长度(以 m 为单位)以及它们之间的角度。

首先我根据纬度得到 1° 的长度(以米为单位)

ncgia.ucsb.edu/education/curricula/giscc/units/u014/tables/table01.html

 double factor = ((double)1)/111230

然后我从北方得到角度(viewAngleTolerance = 2 条较长线之间的角度):

float angleToLocB = angle - (viewAngleTolerance / 2);
float angleToLocC = angle + (viewAngleTolerance / 2);

http://i.stack.imgur.com/x5VF9.png(绘画技巧不好见谅)

接下来我计算如图所示的橙色和绿色线 (a,b)。

double Ba = 0;
double Bb = 0;

if (angleToLocB >= 0 && angleToLocB <= 90) {


    Ba = Math.sin(Math.toRadians(angleToLocB)) * maxDistance * factor;
    Bb = Math.sin(Math.toRadians(90 - angleToLocB)) * maxDistance * factor;

} else if (angleToLocB > 90 && angleToLocB <= 180) {
    Ba = Math.sin(Math.toRadians(angleToLocB - 90)) * maxDistance * factor;
    Bb = Math.sin(Math.toRadians(90 - (angleToLocB - 90))) * maxDistance * factor;

} else if (angleToLocB > 180 && angleToLocB <= 270) {
    Ba = Math.sin(Math.toRadians(angleToLocB - 180)) * maxDistance * factor;
    Bb = Math.sin(Math.toRadians(90 - (angleToLocB - 180))) * maxDistance * factor;

} else if (angleToLocB > 270 && angleToLocB <= 360) {
    Ba = Math.sin(Math.toRadians(angleToLocB - 270)) * maxDistance * factor;
    Bb = Math.sin(Math.toRadians(90 - (angleToLocB - 270))) * maxDistance * factor;
}

double Ca = 0;
double Cb = 0;

if (angleToLocC >= 0 && angleToLocC <= 90) {
    Ca = Math.sin(Math.toRadians(angleToLocC)) * maxDistance * factor;
    Cb = Math.sin(Math.toRadians(90 - angleToLocC)) * maxDistance * factor;

} else if (angleToLocC > 90 && angleToLocC <= 180) {
    Ca = Math.sin(Math.toRadians(angleToLocC - 90)) * maxDistance * factor;
    Cb = Math.sin(Math.toRadians(90 - (angleToLocC - 90))) * maxDistance * factor;

} else if (angleToLocC > 180 && angleToLocC <= 270) {
    Ca = Math.sin(Math.toRadians(angleToLocC - 180)) * maxDistance * factor;
    Cb = Math.sin(Math.toRadians(90 - (angleToLocC - 180))) * maxDistance * factor;

} else if (angleToLocC > 270 && angleToLocC <= 360) {
    Ca = Math.sin(Math.toRadians(angleToLocC - 270)) * maxDistance * factor;
    Cb = Math.sin(Math.toRadians(90 - (angleToLocC - 270))) * maxDistance * factor;
}

之后我计算 B 和 C 的纬度和经度。

Location B = new Location("");
Location C = new Location("");

if (angleToLocB > 90 && angleToLocB <= 270) {
    B.setLatitude(currentLoc.getLatitude() - Bb);
} else if (angleToLocB > 0 && angleToLocB <= 90) {
    B.setLatitude(currentLoc.getLatitude() + Bb);
} else if (angleToLocB > 270 && angleToLocB <= 360) {
    B.setLatitude(currentLoc.getLatitude() + Bb);
}

if (angleToLocC > 90 && angleToLocC <= 270) {
    C.setLatitude(currentLoc.getLatitude() - Cb);
} else if (angleToLocC > 0 && angleToLocC <= 90) {
    C.setLatitude(currentLoc.getLatitude() + Cb);
} else if (angleToLocC > 270 && angleToLocC <= 360) {
    C.setLatitude(currentLoc.getLatitude() + Cb);
}

if (angleToLocB > 0 && angleToLocB <= 180) {
    B.setLongitude(currentLoc.getLongitude() + Ba);
} else if (angleToLocB > 180 && angleToLocB <= 360) {
    B.setLongitude(currentLoc.getLongitude() - Ba);
}

if (angleToLocC > 0 && angleToLocC <= 180) {
    C.setLongitude(currentLoc.getLongitude() + Ca);
} else if (angleToLocC > 180 && angleToLocC <= 360) {
    C.setLongitude(currentLoc.getLongitude() - Ca);
}

我的最后一步是创建多边形并将其添加到地图中:

polygonOptions = new PolygonOptions()
        .add(new LatLng(currentLoc.getLatitude(), currentLoc.getLongitude()),
                new LatLng(B.getLatitude(), B.getLongitude()),
                new LatLng(C.getLatitude(), C.getLongitude()),
                new LatLng(currentLoc.getLatitude(), currentLoc.getLongitude()))
        .strokeColor(Color.BLACK)
        .fillColor(Color.GRAY);

if(polygon != null) {
    if (polygon.isVisible()) {
        polygon.remove();
    }
}
polygon = map.addPolygon(polygonOptions);

此方法有效,但我认为创建此多边形有更简单的方法。我的第一个问题是是否有更简单的方法。

另外,如果一个角度正好是 0,90,180,270 或 360 度,或者该点创建错误。我的第二个问题是为什么会发生这种情况。

感谢您的帮助。

【问题讨论】:

    标签: android google-maps drawing polygon


    【解决方案1】:

    通过导入这三个库有一个非常简单的方法:

    import com.google.android.gms.maps.model.Polygon;
    import com.google.android.gms.maps.model.PolygonOptions;
    import com.google.android.gms.maps.model.PolylineOptions;
    

    一步一步来tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多