android-studio - 尝试在上传到 android_app 的 .geojson 文件中显示属性数据
问题描述
我开始关注 mapbox 网站上提供的关于如何以 json 格式显示制图数据的教程,我可以毫无问题地显示地图。
我现在面临的挑战是我无法attribute data
在这些地图中显示。
按照建议,我编辑了问题,代码如下:
public class MainActivity extends AppCompatActivity implements MapboxMap.OnMapClickListener {
private MapView mapView;
private MapboxMap mapboxMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this, getString(R.string.access_token));
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
mapboxMap.setStyle(Style.TRAFFIC_DAY, new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
VectorSource vectorSource = new VectorSource(
"Supports-source", "https://api.mapbox.com/v4/anis82.b8l0y56t.json?access_token="
+ getString(R.string.access_token)
);
style.addSource(vectorSource);
CircleLayer circleLayer = new CircleLayer("Supports-style", "Supports-source");
circleLayer.setSourceLayer("SUPPORTS_HTA-BT-9n49es");
style.addLayer(circleLayer);
}
});
}
});
}
@Override
public boolean onMapClick(@NonNull LatLng point) {
final PointF pixel = mapboxMap.getProjection().toScreenLocation(point);
List<Feature> features = mapboxMap.queryRenderedFeatures(pixel,"SUPPORTS_HTA-BT-9n49es");
if (features.size() > 0) {
Feature feature = features.get(0);
if (feature.properties() != null) {
for (Map.Entry<String, JsonElement> entry : feature.properties().entrySet()) {
Log.d("TAG", String.format("%s = %s", entry.getKey(), entry.getValue()));
}
}
}
return false;
}
@Override
public void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
解决方案
你能多谈谈你的最终目标是什么吗?你是什么意思attribute data
?运行上面的代码时,圆圈是否显示在地图上?你错过了某种数据?您的 logcat 中是否有任何与 Mapbox 相关的消息(在 logcat 中查找Mbgl
)?
当您说attribute data
时,您的意思是Log.d("TAG", String.format("%s = %s", entry.getKey(), entry.getValue()));
单击地图时没有打印任何内容吗?那可能是因为您查询了错误的图层。
你有List<Feature> features = mapboxMap.queryRenderedFeatures(pixel,"SUPPORTS_HTA-BT-9n49es");
. 您正在查询"SUPPORTS_HTA-BT-9n49es"
,但这是矢量图块中的一个图层。您应该查询"Supports-style"
圆形图层,因为这是在地图上渲染的实际图层。这有点令人困惑,我知道。
如果甚至没有显示圆圈:
https://docs.mapbox.com/android/maps/examples/add-a-vector-tile-source/是使用VectorSource
.
您在构建VectorSource
对象时将访问令牌附加到 URI。看起来与https://docs.mapbox.com/help/glossary/tileset-id/#use-a-tileset-id-to-request-tilesets-directly中描述的相同
取而代之的是,尝试执行https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/styles/VectorSourceActivity中的 URI 语法.java#L50和https://github.com/mapbox/mapbox-android-demo/blob/53651ce092d1dab1cbc32aefe3d95558f1b6f692/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/labs/BaseballSprayChartActivity.java#L139。
推荐阅读
- java - java.lang.ClassCastException 将类 com.package1.Class1 的对象转换为 com.package2.Class2 的对象
- python - python selenium在移动版网页上找不到可点击的播放按钮
- cuda - 为 GPU 编译 Darknet 时出现分段错误
- swift - 如何使滑块值保留一位小数?
- c# - 当 PInvoke C/C++ DLL 调用退出 (-1) 时 C# 主机应用程序关闭;
- jquery - 检查是否选择了选项
- java - Spark 无法将 JSON Integer 映射到 Java Integer
- r - 从 stpm2-object 中提取基线危害
- vuetify.js - 如何在 vuetify 表单中添加调用 API 的自定义验证?
- django - 如何在 django 模型中使用用户名作为字符串?