2016-03-22 5 views
1

Ich versuche zu überprüfen, ob das Kartenzentrum in einem Polygon liegt oder nicht. Mein Code für mulitple Polygone auf der Karte zu schaffen, ist dies:Suche nach Latlng innerhalb von Polygon ist nicht präzise

for (int i = 0; i < Constant.arr_zone.size(); i++) { 
      LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
      ArrayList<LatLng> list = new ArrayList<>(); 
      for (int j = 0; j < Constant.arr_zone.get(i).polygon.length; j++) { 
       list.add(new LatLng(Constant.arr_zone.get(i).polygon[j].geo_x, 
         Constant.arr_zone.get(i).polygon[j].geo_y)); 
       builder.include(list.get(j)); 

      } 
      polygonOptions = new PolygonOptions(); 
      polygonOptions.addAll(list); 
      polygonOptions.strokeColor(R.color.theme_color); 
      polygonOptions.strokeWidth(2); 
      polygonOptions.fillColor(Color.parseColor("#33000040")); 
      Polygon polygon = mMap.addPolygon(polygonOptions); 
      ltbounds = builder.build(); 
      arr_ltlngbounds.add(ltbounds); 
     } 

Next I Überprüfung mich, ob Kartenmitte innerhalb jedes Polygons ist oder nicht

map.setOnCameraChangeListener(new OnCameraChangeListener() { 
     @Override 
     public void onCameraChange(CameraPosition cameraPosition) { 
        if (arr_ltlngbounds != null && arr_ltlngbounds.size() > 0) { 
         for (LatLngBounds l : arr_ltlngbounds) { 
          if (l.contains(mMap.getCameraPosition().target)) { 

           snackbar = Snackbar 
             .make(inflatedView, "Service available here", Snackbar.LENGTH_INDEFINITE) 
             .setAction("GET", new View.OnClickListener() { 
              @Override 
              public void onClick(View view) { 
               String arr[] = {user_location.latitude + "", user_location.longitude + "", "4"}; 
               new Get_service(activity, A.this, get_service).execute(arr); 
              } 
             }); 
           snackbar.show(); 
           break; 
         } 
        } 
      } 
     } 
    }); 

Das ist mein build.gradle nur incase

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "22.0.1" 

defaultConfig { 
    multiDexEnabled true 
    applicationId "com.aaa.bbb" 
    minSdkVersion 14 
    targetSdkVersion 23 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 
} 

dependencies { 
compile project(':library') 
compile 'com.android.support:appcompat-v7:23.1.0' 
compile fileTree(include: ['*.jar'], dir: 'libs') 
compile 'com.android.support:design:23.2.0' 
compile 'com.android.support:recyclerview-v7:23.1.0' 
compile 'com.newrelic.agent.android:android-agent:5.3.1' 
compile 'com.github.bumptech.glide:glide:3.6.1' 
compile 'com.android.support:cardview-v7:23.1.0' 
compile 'com.github.jaydeepw:poly-picker:v1.0.22' 
compile 'com.xgc1986.android:parallaxpagertransformer:1.0.3' 
compile 'com.google.code.gson:gson:2.6.2' 
compile 'me.dm7.barcodescanner:zxing:1.8.4' 
compile 'com.github.castorflex.smoothprogressbar:library:1.0.0' 
compile 'com.github.clans:fab:1.6.2' 
compile 'com.google.android.gms:play-services:8.3.0' 
compile 'com.google.maps.android:android-maps-utils:0.4+' 
compile('com.google.api-client:google-api-client-android:1.20.0') { 
    exclude group: 'org.apache.httpcomponents' 
} 
compile('com.google.apis:google-api-services-drive:v3-rev6-1.20.0') { 
    exclude group: 'org.apache.httpcomponents' 
} 


} 
buildscript { 
repositories { 
    mavenCentral() 
} 
dependencies { 
    classpath "com.newrelic.agent.android:agent-gradle-plugin:5.3.1" 
} 

} 

repositories { 
mavenCentral() 
// for downloading polypicker dependency cwac-camera 
maven { 
    url "https://repo.commonsware.com.s3.amazonaws.com" 
} 

// for downloading poly-picker now we are using jitpack. 
// Goodbye Maven Central 
maven { 
    url "https://jitpack.io" 
} 
} 

apply plugin: 'android' 
apply plugin: 'newrelic' 


dependencies { 
compile 'com.android.support:support-v4:22.2.1' 
} 
android { 
useLibrary 'org.apache.http.legacy' 
} 

Das Problem mit dieser Implementierung ist, es zeigt immer noch snackbar (dass latlng ist innerhalb Grenzen), auch wenn latlng außerhalb Grenzen bis zu einem bestimmten Niveau wie es gibt einige Pufferbereich, wo es wi ist Ich erkenne immer noch die Länge. Ich will, dass es genau ist. Wie kann ich das korrigieren?

Antwort

1

können Sie die PolyUtil.containsLocation Methode aus dem Google Maps Android API Utility Library verwenden zu überprüfen, ob eine bestimmte Position innerhalb eines Polygons durch eine List<LatLng> statt nur überprüft, ob die Lage in der Grenz dargestellt liegt.

Beispiel:

// Construct a List<LatLng> representing a Polygon 
List<LatLng> polygon = new ArrayList<>(); 
polygon.add(new LatLng(3,0)); 
polygon.add(new LatLng(3,3)); 
polygon.add(new LatLng(0,3)); 
polygon.add(new LatLng(3,0)); 

// Find the LatLngBounds of the Polygon 
LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
for (LatLng point : polygon) { 
    builder.include(point); 
} 

LatLng test = new LatLng(1,1); 

boolean isInsideBoundary = builder.build().contains(test); // true as the test point is inside the boundary 
boolean isInside = PolyUtil.containsLocation(test, polygon, true); // false as the test point is outside the polygon 
+0

Während Bibliothek einschließlich ich bin immer Fehler: Fehler: Ausführung für die Task fehlgeschlagen ': needToPark: processDebugResources'. > Fehler: mehr als eine Bibliothek mit Paketname 'com.google.maps.android' Sie können diesen Fehler vorübergehend mit android.enforceUniquePackageName = false deaktivieren Dies ist jedoch vorübergehend und wird in 1.0 erzwungen werden – Victor

+0

Wie sind Sie einschließlich die Bibliothek? Um es zu deinem Projekt hinzuzufügen, füge einfach 'compile 'com.google.maps.android: android-maps-utils: 0.4 +'' in den 'dependencies' Abschnitt in deinem' build.gradle' hinzu. – antonio

+0

Das habe ich gemacht. Immer noch das gleiche Problem. Ich versuche herauszufinden, warum ich diesen Fehler bekomme. Hinzugefügt kompiliert 'com.google.maps.android:android-maps-utils..4+' in build.gradle – Victor