10楼#
发布于:2007-12-28 13:25
<P>这里有个VB版本的绘制扇区的给你直接用吧。免得改写了 :)</P>
<BLOCKQUOTE> <P>'创建扇区<BR>Private Function FeatureFactoryCell(ByVal longitude As Double, ByVal latitude As Double, <BR>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), <BR>latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR> Case 1<BR> pointTemp.Set longitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979), <BR>latitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR> Case 2<BR> pointTemp.Set longitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979), <BR>latitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR> Case 3<BR> pointTemp.Set longitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979), <BR>latitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR> Case 4<BR> pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), <BR>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), <BR>latitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR> Case 1<BR> pointTemp.Set longitude + distanceRegion * Cos(angleMod / 180 * 3.14159265358979), <BR>latitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR> Case 2<BR> pointTemp.Set longitude - distanceRegion * Sin(angleMod / 180 * 3.14159265358979), <BR>latitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979)<BR> Case 3<BR> pointTemp.Set longitude - distanceRegion * Cos(angleMod / 180 * 3.14159265358979), <BR>latitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979)<BR> Case 4<BR> pointTemp.Set longitude + distanceRegion * Sin(angleMod / 180 * 3.14159265358979), <BR>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> <br> <P> 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</P></BLOCKQUOTE> |
|
上一页
下一页