2

私はアンドロイドのプログラミングが初めてで、作業中のマップアプリケーションに問題があります。このアプリでは、クリックしてマップ上に円を配置できます。現在の場所が円の内側にある場合はメッセージが表示され、円の外側にある場合は別のメッセージが表示されます。問題は、円の onStart チェック中に、使用可能なすべての円ではなく、最後に作成された円の内側または外側のみを検出することです。この問題の原因がわかりません。コード スニペットは次のとおりです。

     // Opening the sharedPreferences object
    sharedPreferences = getSharedPreferences("location", 0);

    // Getting number of locations already stored
    locationCount = sharedPreferences.getInt("locationCount", 0);

    // Getting stored zoom level if exists else return 0
    //String zoom = sharedPreferences.getString("zoom", "0");

    // If locations are already saved
    if(locationCount!=0){

        String lat = "";
        String lng = "";

        // Iterating through all the locations stored
        for(int i=0;i<locationCount;i++){

            // Getting the latitude of the i-th location
            lat = sharedPreferences.getString("lat"+i,"0");

            // Getting the longitude of the i-th location
            lng = sharedPreferences.getString("lng"+i,"0");

            double latitude = Double.parseDouble(lat);
            double longitude = Double.parseDouble(lng);

            startCircle = googleMap.addCircle(new CircleOptions().center(new LatLng (latitude, longitude)).radius(CIRCLE_RADIUS).fillColor(0x55888888));
        }

    }
public void onStart(){
    super.onStart();

    //Create a criteria object to retrieve provider
    Criteria criteria = new Criteria();
    // Set accuracy of criteria to address level
     criteria.setAccuracy(Criteria.ACCURACY_FINE);
    //Get the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);
    //Get Current Location
    Location myLocation = locationManager.getLastKnownLocation(provider);
    double lat = myLocation.getLatitude();
    double lon = myLocation.getLongitude();
    LatLng latlng = new LatLng(lat,lon);
    if(startCircle == null){
        return;
    }
    else{
        float[] distance = new float[2];
        marker = googleMap.addMarker(new MarkerOptions().position(latlng).visible(false));
      myLocation.distanceBetween( marker.getPosition().latitude, marker.getPosition().longitude,
                startCircle.getCenter().latitude, startCircle.getCenter().longitude, distance);

        if( distance[0] < startCircle.getRadius()){

            Toast.makeText(getBaseContext(), "Inside", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getBaseContext(), "Outside", Toast.LENGTH_LONG).show();

        }

    }
}
4

4 に答える 4

0

The problem is during the onStart check of the circles it only detects inside or outside of the last created circle instead of all available ones. I am not sure what is causing this problem.

問題は、円を作成すると、最後に作成された円が上書きされるため、startCircle常に最後に作成された円になります。マップ上にプロットするすべての円のリストを保持する必要があります。

ポイントがオブジェクト内にあるかどうかを確認する方法を確認するには、これを行う必要があるときに非常に役立つことがわかったので、このリンクをチェックします

2D ポイントがポリゴン内にあるかどうかを判断するにはどうすればよいですか?

于 2013-07-15T18:49:30.607 に答える