湾曲破線は次のようになり持ってブラウザから: Google Maps Androidで曲線の破線を描くことはできますか? Googleマップで
しかし、私は自分のAndroidのプロジェクトでGoogleマップを実装する場合、それは
この行を示しませんでしたどうすればこの線を描くことができますか?
湾曲破線は次のようになり持ってブラウザから: Google Maps Androidで曲線の破線を描くことはできますか? Googleマップで
しかし、私は自分のAndroidのプロジェクトでGoogleマップを実装する場合、それは
この行を示しませんでしたどうすればこの線を描くことができますか?
2点間に曲線の破線のポリラインを実装できます。この目的のために、SphericalUtilクラスを持つGoogle Maps Android API Utility Libraryを使用して、コードに数式を適用してポリラインを作成することができます。
あなたは
compile 'com.google.maps.android:android-maps-utils:0.5'
としてあなたのGradleでユーティリティライブラリを含める必要があります。
私のサンプルを見てくださいアクティビティと関数showCurvedPolyline (LatLng p1, LatLng p2, double k)
は、2点間の破線の曲線ポリラインを構築します。最後のパラメータkは、ポリラインの曲率を定義します。これは、0より大きく、< = 1です。私の例では、私がk = 0.5
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private LatLng sydney1;
private LatLng sydney2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.getUiSettings().setZoomControlsEnabled(true);
// Add a marker in Sydney and move the camera
sydney1 = new LatLng(-33.904438,151.249852);
sydney2 = new LatLng(-33.905823,151.252422);
mMap.addMarker(new MarkerOptions().position(sydney1)
.draggable(false).visible(true).title("Marker in Sydney 1"));
mMap.addMarker(new MarkerOptions().position(sydney2)
.draggable(false).visible(true).title("Marker in Sydney 2"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney1, 16F));
this.showCurvedPolyline(sydney1,sydney2, 0.5);
}
private void showCurvedPolyline (LatLng p1, LatLng p2, double k) {
//Calculate distance and heading between two points
double d = SphericalUtil.computeDistanceBetween(p1,p2);
double h = SphericalUtil.computeHeading(p1, p2);
//Midpoint position
LatLng p = SphericalUtil.computeOffset(p1, d*0.5, h);
//Apply some mathematics to calculate position of the circle center
double x = (1-k*k)*d*0.5/(2*k);
double r = (1+k*k)*d*0.5/(2*k);
LatLng c = SphericalUtil.computeOffset(p, x, h + 90.0);
//Polyline options
PolylineOptions options = new PolylineOptions();
List<PatternItem> pattern = Arrays.<PatternItem>asList(new Dash(30), new Gap(20));
//Calculate heading between circle center and two points
double h1 = SphericalUtil.computeHeading(c, p1);
double h2 = SphericalUtil.computeHeading(c, p2);
//Calculate positions of points on circle border and add them to polyline options
int numpoints = 100;
double step = (h2 -h1)/numpoints;
for (int i=0; i < numpoints; i++) {
LatLng pi = SphericalUtil.computeOffset(c, r, h1 + i * step);
options.add(pi);
}
//Draw polyline
mMap.addPolyline(options.width(10).color(Color.MAGENTA).geodesic(false).pattern(pattern));
}
}
を使用し、あなただけのapp/src/debug/res/values/google_maps_api.xml
https://github.com/xomena-so/so43305664
からの完全なコードとサンプルプロジェクトをダウンロードすることができます
多くのありがとう、それは私の問題を解決した。私は、この問題のための私の仕事が別のものを開始するために長い時間がかかり始めた後に再び始まったので、後半にはコメントをお詫び申し上げます。 –
上記の解決方法のおかげで@xomena。ほとんどの場合、美しく動作します。
k == 1
、xは0であろうと中点(P)中間カーブポイント(C)と同じになりますが、いくつかの改善が必要です。つまり、直線でなければならないが、ステップを計算するときにはゼロではないので、最終結果は上記の条件であいまいな半円曲線になります。
曲線が十分な長さ、LIMIT = 1000km
を言わせて、ループ内h1 + i * step
内の各計算は、(私は推測によるJavaのdouble
計算誤差に)正しい値に小さな誤差を作ります。その後、ポリラインの開始点と終了点は、開始座標と終了座標に正確に一致しません。さらに、ポリラインの曲率は、私の研究に基づいて予測できません。その理由は、見出しの計算ベースが正しくないことがある地球の表面の曲率である可能性があります。
私のクイックフィックスは、直線にするためにstep
if k == 1
を0にリセットすることです。 2番目の問題については、2点間の距離がLIMIT 1000kmより大きい場合は、k = 1
と直線を描くことが私にとって安全な選択になります。
これを共有していただきありがとうございます。これを見てください:stackoverflow.com/questions/46411266/draw-arc-polyline-in-google-map showCurvedPolyline(..)メソッドのために最終的に書いた更新されたソリューションを持つことはできますか – Sonali
私はこれが可能だと思います、私はここでそれを行うことができる[jsfiddle](http://jsfiddle.net/geocodezip/re6km2wp/3/)が見つかりました。しかし問題は、[Google Maps Javascript API](https://developers.google.com/maps/documentation/javascript/)を使って動作させることです。詳細については、[SOの質問](http:// stackoverflow。com/questions/13721008/how-to-draw-dashed-polyline-with-android-google-map-sdk-v2)をご覧ください。 – KENdi
@KENdi Google Maps Android APIで直線的に破線のポリラインを実装できますが、曲線の点線はJavascript APIにのみ表示されます。私はiOS上のGoogleマップアプリケーションをチェックしている、Androidは、曲線がない、私はこれは不可能だ(または描画するのが難しいと思う) –