You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSMDroid绘制网格折线时遇mOptimIntersection异常及线条缺失问题

OSMDroid MapView网格绘制问题

问题概述

我在OSMDroid的MapView上绘制类似方格纸的等距网格,通过在指定区域绘制横向和纵向等距折线实现,横竖方向各约200条折线。功能可运行但存在以下两个问题:

  1. 滚动MapView时频繁抛出异常:

error dispatchDraw, probably in edit mode
java.lang.RuntimeException: Impossible mOptimIntersection count (3)
at org.osmdroid.util.SegmentClipper.clip(SegmentClipper.java:173)
at org.osmdroid.util.SegmentClipper.add(SegmentClipper.java:71)
at org.osmdroid.views.overlay.LinearRing.clipAndStore(LinearRing.java:389)
at org.osmdroid.views.overlay.LinearRing.buildLinePortion(LinearRing.java:279)
at org.osmdroid.views.overlay.PolyOverlayWithIW.drawWithLines(PolyOverlayWithIW.java:326)
at org.osmdroid.views.overlay.PolyOverlayWithIW.draw(PolyOverlayWithIW.java:242)
at org.osmdroid.views.overlay.Overlay.draw(Overlay.java:144)
at org.osmdroid.views.overlay.DefaultOverlayManager.onDrawHelper(DefaultOverlayManager.java:179)
at org.osmdroid.views.overlay.DefaultOverlayManager.onDraw(DefaultOverlayManager.java:139)
at org.osmdroid.views.MapView.dispatchDraw(MapView.java:1253)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at androidx.fragment.app.FragmentContainerView.drawChild(FragmentContainerView.kt:235)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at androidx.fragment.app.FragmentContainerView.dispatchDraw(FragmentContainerView.kt:225)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at android.view.View.updateDisplayListIfDirty(View.java:23242)
at android.view.View.draw(View.java:24125)
at android.view.ViewGroup.drawChild(ViewGroup.java:4748)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4505)
at com.android.internal.policy.DecorView.dispatchDraw(DecorView.java:1531)
at android.view.View.draw(View.java:24398)
at com.android.internal.policy.DecorView.draw(DecorView.java:1504)
at android.view.View.updateDisplayListIfDirty(View.java:23256)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:753)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:759)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:857)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5501)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5194)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4356)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2991)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10665)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309)
at android.view.Choreographer.doCallbacks(Choreographer.java:923)
at android.view.Choreographer.doFrame(Choreographer.java:852)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8741)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

  1. 滚动结束后,偶尔会出现所有横向或纵向线条消失的情况。

绘制横向线条的代码示例

// 绘制网格的横向线条
var lat = raster.southwest.latitude
for (counter in 0 .. raster.n2) {
    val latPolyline = Polyline(mapView)

    latPolyline.getOutlinePaint().setARGB(255, 128, 128, 128)
    latPolyline.outlinePaint.strokeWidth = 1f

    latPolyline.addPoint(GeoPoint(lat, raster.southwest.longitude))
    latPolyline.addPoint(GeoPoint(lat, raster.northeast.longitude))

    mapView.overlays.add(latPolyline)
    latPolylineList.add(latPolyline)

    lat += raster.dy
}

内容的提问来源于stack exchange,提问作者C A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:09:56