調べて答えが見つからなかったので、ここで迷子になっているのは私だけだと思います。
Androidマップで作業している初心者で、Androidマップで使用できるTileServerのセットアップに使用できる優れたリソースがあるかどうかを知りたい。
私の目的は、GoogleマップにGeoSpatial情報をポリゴン形式でオーバーレイすることです。
調べて答えが見つからなかったので、ここで迷子になっているのは私だけだと思います。
Androidマップで作業している初心者で、Androidマップで使用できるTileServerのセットアップに使用できる優れたリソースがあるかどうかを知りたい。
私の目的は、GoogleマップにGeoSpatial情報をポリゴン形式でオーバーレイすることです。
緯度経度の値に基づいてグーグルマップ上にポリゴンを描画し、その色相、Aplha、ストローク幅を管理する以下のコードを試すことができます。
PloygonDemoクラス
public class PolygonDemoActivity extends android.support.v4.app.FragmentActivity implements OnSeekBarChangeListener { private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); private static final int WIDTH_MAX = 50; private static final int HUE_MAX = 360; private static final int ALPHA_MAX = 255; private GoogleMap mMap; private Polygon mMutablePolygon; private SeekBar mColorBar; private SeekBar mAlphaBar; private SeekBar mWidthBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.polygon_demo); mColorBar = (SeekBar) findViewById(R.id.hueSeekBar); mColorBar.setMax(HUE_MAX); mColorBar.setProgress(0); mAlphaBar = (SeekBar) findViewById(R.id.alphaSeekBar); mAlphaBar.setMax(ALPHA_MAX); mAlphaBar.setProgress(127); mWidthBar = (SeekBar) findViewById(R.id.widthSeekBar); mWidthBar.setMax(WIDTH_MAX); mWidthBar.setProgress(10); setUpMapIfNeeded(); } @Override protected void onResume() { super.onResume(); setUpMapIfNeeded(); } private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { setUpMap(); } } } private void setUpMap() { // Create a rectangle with two rectangular holes. mMap.addPolygon(new PolygonOptions() .addAll(createRectangle(new LatLng(-20, 130), 5, 5)) .addHole(createRectangle(new LatLng(-22, 128), 1, 1)) .addHole(createRectangle(new LatLng(-18, 133), 0.5, 1.5)) .fillColor(Color.CYAN) .strokeColor(Color.BLUE) .strokeWidth(5)); // Create an ellipse centered at Sydney. PolygonOptions options = new PolygonOptions(); int numPoints = 400; float semiHorizontalAxis = 10f; float semiVerticalAxis = 5f; double phase = 2 * Math.PI / numPoints; for (int i = 0; i <= numPoints; i++) { options.add(new LatLng(SYDNEY.latitude + semiVerticalAxis * Math.sin(i * phase), SYDNEY.longitude + semiHorizontalAxis * Math.cos(i * phase))); } int fillColor = Color.HSVToColor( mAlphaBar.getProgress(), new float[] {mColorBar.getProgress(), 1, 1}); mMutablePolygon = mMap.addPolygon(options .strokeWidth(mWidthBar.getProgress()) .strokeColor(Color.BLACK) .fillColor(fillColor)); mColorBar.setOnSeekBarChangeListener(this); mAlphaBar.setOnSeekBarChangeListener(this); mWidthBar.setOnSeekBarChangeListener(this); // Move the map so that it is centered on the mutable polygon. mMap.moveCamera(CameraUpdateFactory.newLatLng(SYDNEY)); } /** * Creates a List of LatLngs that form a rectangle with the given dimensions. */ private List<LatLng> createRectangle(LatLng center, double halfWidth, double halfHeight) { // Note that the ordering of the points is counterclockwise (as long as the halfWidth and // halfHeight are less than 90). return Arrays.asList(new LatLng(center.latitude - halfHeight, center.longitude - halfWidth), new LatLng(center.latitude - halfHeight, center.longitude + halfWidth), new LatLng(center.latitude + halfHeight, center.longitude + halfWidth), new LatLng(center.latitude + halfHeight, center.longitude - halfWidth), new LatLng(center.latitude - halfHeight, center.longitude - halfWidth)); } @Override public void onStopTrackingTouch(SeekBar seekBar) { // Don't do anything here. } @Override public void onStartTrackingTouch(SeekBar seekBar) { // Don't do anything here. } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (mMutablePolygon == null) { return; } if (seekBar == mColorBar) { mMutablePolygon.setFillColor(Color.HSVToColor( Color.alpha(mMutablePolygon.getFillColor()), new float[] {progress, 1, 1})); } else if (seekBar == mAlphaBar) { int prevColor = mMutablePolygon.getFillColor(); mMutablePolygon.setFillColor(Color.argb( progress, Color.red(prevColor), Color.green(prevColor), Color.blue(prevColor))); } else if (seekBar == mWidthBar) { mMutablePolygon.setStrokeWidth(progress); } } }
porn_demo.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/properties_sydney_polygon"/> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="1"> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <TextView android:text="@string/fill_hue"/> <SeekBar android:id="@+id/hueSeekBar"/> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <TextView android:text="@string/fill_alpha"/> <SeekBar android:id="@+id/alphaSeekBar"/> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <TextView android:text="@string/stroke_width"/> <SeekBar android:id="@+id/widthSeekBar"/> </TableRow> </TableLayout> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> </LinearLayout>
詳細については、マップ上にポリゴンを描画するデモ実装を示すリンクを確認してください。
お役に立てば幸いです。
ありがとう。