2017-11-03 3 views
10

विभिन्न लाइनों निम्नलिखित कोड का उपयोग कर मार्ग नक्शे का प्रतिनिधित्व करने के लिए जोड़ रहे पर क्लिक घटनाओं के लिए सुनो:एक LineLayer

private LineLayer makeLineLayer(List<GeoPoint> routePoints, String title) { 

    String sourceTitle = "line-layer-" + lineCount; 

    List<Position> points = new ArrayList<>(routePoints.size()); 
    List<Feature> routes = new ArrayList<>(routePoints.size()); 
    for (GeoPoint point : routePoints) { 
      points.add(Position.fromCoordinates(point.getLongitude(), point.getLatitude())); 
    } 
    LineString route = LineString.fromCoordinates(points); 

    Feature routeFeature = Feature.fromGeometry(route); 
    routeFeature.addStringProperty("custom-line", "0"); 
    routes.add(routeFeature); 

    GeoJsonSource linesSource = new GeoJsonSource(
       sourceTitle, 
       FeatureCollection.fromFeatures(routes)); 
    mapboxMap.addSource(linesSource); 

    LineLayer lineLayer = new LineLayer(title, sourceTitle); 
    lineLayer.setProperties(
     //Sets properties... 
    ); 

    return lineLayer; 
} 

LineLayer lineLayer = makeLineLayer(getRoutePoints()); 
mapboxMap.addLayer(lineLayer); 

मैं निर्धारित करने के लिए जब इन पंक्तियों में से एक क्लिक किया जाता है सक्षम होने के लिए करना चाहते हैं। वर्तमान में, मैपबॉक्स OnMapClick पर कॉल करता है और LatLng ऑब्जेक्ट में गुजरता है। मैं उसके बाद निम्न का उपयोग कर custom-line संपत्ति के साथ प्रदान की गई सुविधाओं के लिए क्वेरी कर सकते हैं: तो शामिल

PointF pixel = mapboxMap.getProjection().toScreenLocation(point); 
List<Feature> selectedKeys = mapboxMap.queryRenderedFeatures(pixel, Filter.has("custom-line")); 

तो selectedKeys किसी भी Feature वस्तुओं लौट आए, मैं .getGeometry() साथ उनके निर्देशांक के लिए क्वेरी कर सकते हैं। LatLng ऑब्जेक्ट से उन मानों की तुलना करना, जो कि पारित किया गया था, अनुमान लगाया गया था कि किस लाइन का क्लिक किया गया था। हालांकि, जब लाइन आइटम बारीकी से समूहित होते हैं तो यह बहुत गलत और परेशानी होती है।

इन पंक्ति वस्तुओं पर क्लिक ईवेंट के लिए कैसे सुनेंगे?

+0

क्या आप एक [एमसीवीई] (https://stackoverflow.com/help/mcve) कर सकते हैं? – kalabalik

उत्तर

0

मैपबॉक्स के एंड्रॉइड एसडीके दस्तावेज़ीकरण के अनुसार।

LineLayer पर न तो मूल वर्ग i.e. Layer पर क्लिक करने के लिए कोई विधि नहीं है।

यदि आप अपने LineLayer से Polyline में परिवर्तित कर सकते हैं तो आप एंड्रॉइड में क्लिक करने के लिए एक अंतर्निहित विधि प्राप्त कर सकते हैं।

इस पर स्पष्टता प्राप्त करने के लिए यह link देखें।

यह विधि का विवरण है। onPolylineClick void onPolylineClick(@NonNull Polyline polyline)

**

नामक उपयोगकर्ता एक पॉलीलाइन पर क्लिक करता है जब।

**

पैरामीटर:

polyline - पॉलीलाइन उपयोगकर्ता पर क्लिक किया।