Gavin_123
路人甲
路人甲
  • 注册日期2006-06-09
  • 发帖数2
  • QQ
  • 铜币112枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1729回复:2

请教一个绘制扇形的问题(附源码)

楼主#
更多 发布于:2007-01-15 21:27
<P>大家好,</P>
<P>想请教一个可能比较入门级的问题,我根据下面的代码在MAP根据数据库上绘制出了各个扇形,但是当我对Map进行缩放操作时,我所绘制的扇形也在跟着缩放,能否帮我看一下,如何才能不让所绘制的扇形不随Map的缩放而缩放吗?</P>
<P>我在这里先谢谢大家了!</P>

<P>源码如下:</P>
<P>Private Function FeatureFactoryCell(ByVal longitude As Double, ByVal latitude As Double, ByVal angle As Integer, ByVal Lac As Integer, ByVal sectorSign As Integer) As Feature</P>
<P><BR>Dim FeatureRegion As Feature<BR>Dim FeatureCircular As Feature<BR>Dim FeatureSector  As Feature<BR>Dim pointCenter  As New Point<BR>Dim pointTemp  As New Point<BR>Dim pointRegion As New Points<BR>Dim angleInteger As Integer<BR>Dim angleMod As Integer<BR>Dim angleTemp1 As Integer<BR>Dim angleTemp2 As Integer</P>
<P>pointCenter.Set longitude, latitude</P>
<P>If (angle < 0 Or angle > 360) Then<BR> MsgBox "基站小区角度存在误差"<BR> End If</P>
<P>'增加扇区的中心点<BR>pointTemp.Set longitude, latitude<BR>pointRegion.Add pointTemp</P>
<P>'三角形的右上角坐标,并添加到点集<BR>angleTemp1 = angle + 30</P>
<P>If (angleTemp1 > 360) Then<BR>   angleTemp1 = angleTemp1 - 360<BR>End If</P>
<P>  angleInteger = angleTemp1 \ 90<BR>  angleMod = angleTemp1 Mod 90<BR>  </P>
<P><BR>    Select Case angleInteger<BR>        Case 0<BR>            pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>        Case 1<BR>            pointTemp.Set longitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979), latitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR>        Case 2<BR>            pointTemp.Set longitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>        Case 3<BR>            pointTemp.Set longitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR>        Case 4<BR>            pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>    <BR>    End Select</P>
<P>pointRegion.Add pointTemp</P>
<P>'三角形的左上角坐标,并添加到点集<BR>    angleTemp1 = angle - 30</P>
<P>If (angleTemp1 < 0) Then<BR>   angleTemp1 = angleTemp1 + 360<BR>End If</P>
<P>    angleInteger = angleTemp1 \ 90<BR>    angleMod = angleTemp1 Mod 90</P>
<P><BR>    Select Case angleInteger<BR>        Case 0<BR>            pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>        Case 1<BR>            pointTemp.Set longitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979), latitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR>        Case 2<BR>            pointTemp.Set longitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>        Case 3<BR>            pointTemp.Set longitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR>        Case 4<BR>            pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR>    End Select</P>
<P>pointRegion.Add pointTemp</P>
<P>If sectorSign = 1 Then</P>
<P>    Set FeatureRegion = Map1.FeatureFactory.CreateRegion(pointRegion)<BR>    Set FeatureCircular = Map1.FeatureFactory.CreateCircularRegion(miCircleTypeMap, pointCenter, 0.1, , 15)        '(圆形)<BR>    Set FeatureSector = Map1.FeatureFactory.IntersectFeatures(FeatureRegion, FeatureCircular) '(组合图元)</P>
<P>Else<BR>    Set FeatureRegion = Map1.FeatureFactory.CreateRegion(pointRegion)<BR>    Set FeatureCircular = Map1.FeatureFactory.CreateCircularRegion(miCircleTypeMap, pointCenter, 0.3, , 15)        '(圆形)<BR>    Set FeatureSector = Map1.FeatureFactory.IntersectFeatures(FeatureRegion, FeatureCircular) '(组合图元)</P>
<P>End If<BR>  <BR>  '连接数据库,设置扇区样式</P>
<P><BR>   Dim SQL As String<BR>   Dim cn As New ADODB.Connection<BR>   Dim rs As New ADODB.Recordset</P>
<P>cn.Provider = "Microsoft.Jet.OLEDB.4.0"<BR>cn.ConnectionString = "Data Source=" ; App.Path ; "\data.mdb"<BR>cn.Open<BR>SQL = "select LAC,RED,BLUE,GREEN from laccolor"<BR>Set rs = New ADODB.Recordset<BR>Set rs.ActiveConnection = cn<BR>rs.Open SQL<BR>rs.MoveFirst</P>
<P>While Not rs.EOF<BR>If Lac = rs.Fields.Item("LAC") Then<BR>FeatureSector.Style.RegionColor = RGB(rs.Fields.Item("RED"), rs.Fields.Item("BLUE"), rs.Fields.Item("GREEN"))<BR>'rs.MoveLast<BR>End If<BR>rs.MoveNext<BR>Wend</P>
<P>rs.Close<BR>cn.Close<BR> <BR> Set FeatureFactoryCell = FeatureSector</P>
<P>End Function<BR></P>
喜欢0 评分0
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-01-18 16:30
<FONT color=#ff0000>帝国出品,必属精品</FONT>
举报 回复(0) 喜欢(0)     评分
lglglglg2427
路人甲
路人甲
  • 注册日期2007-01-08
  • 发帖数1
  • QQ
  • 铜币103枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-01-17 08:39
弄个图片上去不就行了呵呵画出来的是矢量图肯定要缩放的
举报 回复(0) 喜欢(0)     评分
游客

返回顶部