如何在 Android 中使用 OSM 数据实现单个城市的离线地理编码器?

发布于 2024-12-26 22:44:09 字数 493 浏览 1 评论 0原文

我正在尝试开发一个离线 Android 地图,它使用特定缩放级别的 OSM 地图图块,为此我使用了一个开源库:Osmdroid

现在,我正在研究为单个城市创建可以与我的应用程序集成的离线地理编码/反向地理编码的可能性,

我可以使用 Osm xml 数据吗?目的?如果是这样,那么任何人都可以建议/解释如何使用它来创建 SQlite db.. 与我的应用程序一起使用

我读过 这里也在这里关于空间
但不太理解它的工作和实现

谢谢

I am trying to develop an offline android map that makes use of OSM map tiles of a particular zoom level, For this purpose I used an open source library : Osmdroid

Now, I am looking into the possibility of creating an offline geocoding/ reverse geocoding for a single city that can be integrated with my application,

can I use Osm xml data for that purpose? if so , then can anyone suggest/explain how to use it to create SQlite db.. to be used with my app

I read here and also here about Spatialite
But cannot quite understand its working and implementation

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剪不断理还乱 2025-01-02 22:44:09

使用 Skobbler SDK,您可以获得离线地图和(反向)地理编码。

With the Skobbler SDK you have offline maps and (reverse) geocoding.

猥琐帝 2025-01-02 22:44:09

这里有答案
https://stackoverflow.com/a/64811929/13794189

操作如下:

使用开放街道地图 (OSM)在离线模式下,您需要首先实现一个下载管理器,如下面的帖子中所示。它具有恢复功能,适用于非常大的文件:

https://stackoverflow.com/a/64811752/13794189

您可以将下载的 OSM 地图文件加载到地图视图中,如下所示:

     org.osmdroid.config.IConfigurationProvider osmConf = org.osmdroid.config.Configuration.getInstance();
    File basePath = new File(SessionData.offlineMapsDirectoryPath, "osmdroid");
    osmConf.setOsmdroidBasePath(basePath);
    File tileCache = new File(SessionData.offlineMapsDirectoryPath, "tile");
    osmConf.setOsmdroidTileCache(tileCache);

    map = (MapView) getActivity().findViewById(R.id.map);  // create basic map
    //map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
    map.setTilesScaledToDpi(true);
    map.setMultiTouchControls(true);
    map.setUseDataConnection(false);

    // add compass to map
    //CompassOverlay compassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), map);
    //compassOverlay.enableCompass();
    //map.getOverlays().add(compassOverlay);

    //attach listeners
    MapEventsOverlay mapEventsOverlay = new MapEventsOverlay(this);
    map.getOverlays().add(0, mapEventsOverlay);

在上面的代码中,SessionData.offlineMapsDirectoryPath 是下载文件所在的路径已保存。

不要忘记在你的 gradle 文件中添加以下实现:

implementation 'org.osmdroid:osmdroid-android:6.1.0'
implementation 'com.github.MKergall:osmbonuspack:6.6.0'

This has an answer in here
https://stackoverflow.com/a/64811929/13794189

and goes as follows:

To use Open Street Maps (OSM) in offline mode you need to first implement a download manager like the one shown here on the post liked bellow. It has resume capabilities which is good for very large files :

https://stackoverflow.com/a/64811752/13794189

next you can load the downloaded OSM maps file in to a mapView like this:

     org.osmdroid.config.IConfigurationProvider osmConf = org.osmdroid.config.Configuration.getInstance();
    File basePath = new File(SessionData.offlineMapsDirectoryPath, "osmdroid");
    osmConf.setOsmdroidBasePath(basePath);
    File tileCache = new File(SessionData.offlineMapsDirectoryPath, "tile");
    osmConf.setOsmdroidTileCache(tileCache);

    map = (MapView) getActivity().findViewById(R.id.map);  // create basic map
    //map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
    map.setTilesScaledToDpi(true);
    map.setMultiTouchControls(true);
    map.setUseDataConnection(false);

    // add compass to map
    //CompassOverlay compassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), map);
    //compassOverlay.enableCompass();
    //map.getOverlays().add(compassOverlay);

    //attach listeners
    MapEventsOverlay mapEventsOverlay = new MapEventsOverlay(this);
    map.getOverlays().add(0, mapEventsOverlay);

In the code above, SessionData.offlineMapsDirectoryPath is the path where the downloaded file is saved.

Don't forget to add in your gradle file the following implementations:

implementation 'org.osmdroid:osmdroid-android:6.1.0'
implementation 'com.github.MKergall:osmbonuspack:6.6.0'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文