【问题标题】:Load vector tiles from folder instead than from MBTiles file从文件夹而不是从 MBTiles 文件加载矢量切片
【发布时间】:2019-09-13 11:08:05
【问题描述】:

有没有办法以类似于现在从在线资源中加载的方式加载文件夹中的多个矢量 PBF 文件?

我的应用程序处理多个 MBTiles 文件,但我更愿意读取其中包含 PBF 的文件夹。所以我可以只使用一个图层加载所有地图,而无需删除前一层(绑定到一个 MBTiles)并添加一个新图层。

我可以通过添加绑定到HTTPTileDataSource 的层来从在线资源加载 PBF:

HTTPTileDataSource(
               0,
                14,
                "https://www.my-server.com/tiles/v3/{z}/{x}/{y}.pbf?key=MY_API_KEY)

我也想这样做,但要使用 Android 设备中的 PBF。所以有离线支持。显然,如上所述,我可以加载一个 MBTiles 文件,但我的用例有多个文件,我希望地图之间的过渡透明、平滑和简单。

我能否以某种方式编写上述 URL,使其从我的设备加载 PBF?

提前致谢!

更新

我忘了提到到目前为止我尝试过的方法没有奏效。基本上我使用约定来访问 Android 设备上的文件:

HTTPTileDataSource(
                0,
                14,
                Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "/my-app/mbtiles/{z}/{x}/{y}.pbf")

这会引发如下错误:

2019-09-13 13:36:37.096 4432-4554/com.myapp.com.debug I/carto-mobile-sdk: HTTPTileDataSource::loadTile: Loading /storage/emulated/0/myapp/mbtiles/10/504/399.pbf
2019-09-13 13:36:37.096 4432-4554/com.myapp.com.debug E/carto-mobile-sdk: HTTPTileDataSource::loadTile: Exception while loading tile 10/504/399: Invalid URL: /storage/emulated/0/myapp/mbtiles/10/504/399.pbf
2019-09-13 13:36:37.096 4432-4554/com.myapp.com.debug I/carto-mobile-sdk: HTTPTileDataSource::loadTile: Loading /storage/emulated/0/myapp/mbtiles/10/503/399.pbf
2019-09-13 13:36:37.097 4432-4554/com.myapp.com.debug E/carto-mobile-sdk: HTTPTileDataSource::loadTile: Exception while loading tile 10/503/399: Invalid URL: /storage/emulated/0/myapp/mbtiles/10/503/399.pbf

但是,如果我尝试通过使用 File 类并检查 canRead() 方法来读取这些文件,它们是可读的。所以他们就在那里。

也许问题在于用于建立 HTTP 连接的库不接受内部文件?

使用类似的方法,在 URL 前面加上“file://”协议,会引发不同的错误。代码是:

return new HTTPTileDataSource(
                0,
                14,
                "file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "myapp/mbtiles/{z}/{x}/{y}.pbf");

错误是:

2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534] JNI DETECTED ERROR IN APPLICATION: can't call void java.net.HttpURLConnection.setRequestMethod(java.lang.String) on instance of sun.net.www.protocol.file.FileURLConnection
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]     in call to CallVoidMethodV
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534] "Thread-51" prio=1 tid=37 Runnable
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   | group="main" sCount=0 dsCount=0 flags=0 obj=0x14500000 self=0x8a8ac800
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   | sysTid=5073 nice=19 cgrp=default sched=0/0 handle=0x8a782970
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   | state=R schedstat=( 61800737 288938844 285 ) utm=6 stm=0 core=2 HZ=100
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   | stack=0x8a688000-0x8a68a000 stackSize=1006KB
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   | held mutexes= "mutator lock"(shared held)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #00 pc 0047eae1  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*)+209)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #01 pc 0057c193  /system/lib/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+355)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #02 pc 00577693  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+83)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #03 pc 00395256  /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1254)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #04 pc 003956c1  /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, char*)+113)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #05 pc 0014f207  /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, ...)+71)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #06 pc 00152ff5  /system/lib/libart.so (art::ScopedCheck::CheckMethodAndSig(art::ScopedObjectAccess&, _jobject*, _jclass*, _jmethodID*, art::Primitive::Type, art::InvokeType)+1941)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #07 pc 00151a3d  /system/lib/libart.so (art::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, char*, art::Primitive::Type, art::InvokeType)+973)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #08 pc 0013df2b  /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, char*)+75)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #09 pc 00222680  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #10 pc 002e4b7a  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #11 pc 00123455  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #12 pc 00122bfa  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #13 pc 00076084  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #14 pc 0025d7fc  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #15 pc 001206e1  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #16 pc 00110bb3  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #17 pc 000412c7  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #18 pc 00040e5f  /data/app/com.myapp.debug-bfKnles_CQatK-qZx2DX7A==/lib/x86/libcarto_mobile_sdk.so (???)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #19 pc 00071445  /system/lib/libc.so (__pthread_start(void*)+53)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #20 pc 000205db  /system/lib/libc.so (__start_thread+75)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   native: #21 pc 0001ec16  /system/lib/libc.so (__bionic_clone+70)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534]   (no managed stack frames)
2019-09-13 13:41:33.782 4965-5073/com.myapp.debug A/zygote: java_vm_ext.cc:534] 

【问题讨论】:

    标签: mbtiles carto-mobile


    【解决方案1】:

    如名称所示,HTTPTileDataSource 仅用于 HTTP。 file:// 不是 http,即使它的 URL。您可能需要编写自定义数据源。建议发一张票到https://github.com/CartoDB/mobile-sdk/issues

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      相关资源
      最近更新 更多