0

だから私はジオポイントの配列に基づいて透明な青いオーバーレイを埋めるために書いたカスタムオーバーレイアイテムを持っています

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    Projection projection = mapView.getProjection();

    Paint fill = new Paint();
    fill.setColor(Color.BLUE);
    fill.setAlpha(50);
    fill.setStyle(Paint.Style.FILL_AND_STROKE);

    Path path = new Path();
    Point firstPoint = new Point();
    projection.toPixels(geoPoints.get(0), firstPoint);
    path.moveTo(firstPoint.x, firstPoint.y);

    for (int i = 1; i < geoPoints.size(); ++i) {
        Point nextPoint = new Point();
        projection.toPixels(geoPoints.get(i), nextPoint);
        path.lineTo(nextPoint.x, nextPoint.y);
    }

    path.lineTo(firstPoint.x, firstPoint.y);
    path.setLastPoint(firstPoint.x, firstPoint.y);

    canvas.drawPath(path, fill);

    super.draw(canvas, mapView, shadow);
}

必要なのは、このオーバーレイの中心点を取得してマーカーを配置できるようにする方法です。誰かアイデアはありますか?

4

1 に答える 1

1

私は Android フレームワークに精通していませんが、Java で記述し、ある種の Google マップ API を使用していると思います。しかし、私はグラフィックスと地理開発に精通しています。まず最初に、標準 API に RectangularBounds オブジェクトなどに返される何らかの getBounds(path) があるかどうかを確認することをお勧めします。次に、長方形の境界から、境界の中心をジオポイントまたはその他のメトリックとして返す bounds.getCenter() を要求できます。ピクセルを使用する場合は、ジオポイントを変換するだけです...

getBounds が api に存在しない場合 (信じがたいこと)、単純なインターフェイスを実装するだけで、ネット上で多くの例を見つけることができます。

ジオポイントのジオシェイプの境界を見つけるための単純な擬似コード。ピクセルが必要な場合は、それぞれ x、y を使用します。

bounds = { topLeft: new GeoPoint(path[0]), bottomRight: new GeoPoint(path[0])};
for( point in path ){
    bounds.topLeft.lat = max( bounds.topLeft.lat,point.lat );
    bounds.topLeft.lng = min( bounds.topLeft.lng,point.lng );
    bounds.bottomRight.lat = min( bounds.bottomRight.lat,point.lat );
    bounds.bottomRight.lng = max( bounds.bottomRight.lng,point.lng );
}

bounds.getCenter(){
    return new GeoPoint(rectangle center point); 
    // i am sure you will able to manage the code here )))
}

これが役立つことを願っています

于 2012-07-25T15:09:51.567 に答える