Cra*_*ney 6 .net vb.net drawing line
我试图绘制一条公交线路作为简单的线路序列.没有什么花哨.但不是线条,而是楔子.最初我对此很好,因为楔形看起来像箭头,总是面向第二点.但现在我想改善外观,楔子正成为一个大问题.
我怀疑是由于图形变换引起的某种浮点问题(lat/lons被输入并且变换将它们转换为位图上的x/y [假设lat/lon是euclidean对于我的目的来说足够准确],所以缩放是几个数量级).
截图:
它实际上看起来像线被分成两个三角形,但只绘制了其中一个.
相关代码(注意:绘图是异步完成的,这就是我创建位图的原因):
'-- Creating the transform --'
Dim bitmap = New Bitmap(Math.Max(1, PictureBox1.Width), Math.Max(1, PictureBox1.Height))
Dim g = Graphics.FromImage(bitmap)
g.TranslateTransform(0, bitmap.Height)
g.ScaleTransform(1, -1)
g.ScaleTransform(CSng(bitmap.Width) / (maxLon - minLon), CSng(bitmap.Height) / (maxLat - minLat))
g.TranslateTransform(-minLon, -minLat)
'-- Drawing the lines (in a method called asynchronously) --'
using pen = New Pen(Brushes.Black, 0.0001)
Dim shapes = busData.TripsInGroup(tripGroup.Value).
Select(Function(e) e.Shape).
Distinct()
For Each shape In shapes
For i = 0 To shape.Points.Count - 2
Dim e1 = shape.Points(i)
Dim e2 = shape.Points(i + 1)
Dim p1 = New PointF(CSng(e1.Longitude), CSng(e1.Latitude))
Dim p2 = New PointF(CSng(e2.Longitude), CSng(e2.Latitude))
g.DrawLine(pen, p1, p2)
Next
Next
Run Code Online (Sandbox Code Playgroud)
示例值:
cenLat = 44.657176
cenLon = -63.549471
spnLat = 0.071921
spnLon = 0.179729
minLat = cenLat - spnLat / 2
maxLat = cenLat + spnLat / 2
minLon = cenLon - spnLon / 2
maxLon = cenLon + spnLon / 2
shpts = {(Lat: 44.6518683235, Lon: -63.5930836628),
(Lat: 44.6512537117, Lon: -63.5927528307),
(Lat: 44.6508013753, Lon: -63.5924572976),
(Lat: 44.6503312812, Lon: -63.5921923044),
(Lat: 44.6503312812, Lon: -63.5921923044),
(Lat: 44.6502137576, Lon: -63.5921260568),
(Lat: 44.6495810455, Lon: -63.5917829189),
(Lat: 44.648893839, Lon: -63.5913776026),
(Lat: 44.6485468163, Lon: -63.5911976944),
(Lat: 44.6485468163, Lon: -63.5911976944),
(Lat: 44.6475084762, Lon: -63.5906617219),
(Lat: 44.6475084762, Lon: -63.5906617219)}
Run Code Online (Sandbox Code Playgroud)
笔记和发现:
小智 3
我遇到了同样的问题,并偶然发现了这个线程。与OP不同的是,我发现DrawLines并没有解决问题,并且遇到了与DrawLine相同的问题。
加布是正确的,因为问题在于内部绘图算法的精度。
我通过将纬度/经度值放大 10 倍解决了这个问题(尽管如果您要放大更多,则可能需要放大更多),然后再将它们传递给任何绘图算法。
归档时间: |
|
查看次数: |
473 次 |
最近记录: |