﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Wall－探讨GIS开发,分享GIS心得,把握GIS前沿,畅谈GIS趋势</title><link>http://www.cnblogs.com/wall/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 20 Aug 2008 07:40:03 GMT</lastBuildDate><pubDate>Wed, 20 Aug 2008 07:40:03 GMT</pubDate><ttl>60</ttl><item><title>打开各种类型的featureclass（VB.Net源码）</title><link>http://www.cnblogs.com/wall/archive/2008/07/22/1248846.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 22 Jul 2008 09:00:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/07/22/1248846.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1248846.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/07/22/1248846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1248846.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1248846.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf" face="Verdana"><strong></strong></font>&nbsp;</p>
<p><font style="background-color: #cce8cf" face="Verdana"><strong></strong></font>&nbsp;</p>
<p><font style="background-color: #cce8cf" face="Verdana"><strong>#Region "打开各种类型的featureclass"<br />
</strong><span style="color: #ff0000">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 打开Access，返回featureclass<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="sDBName"&gt;Access文件名(全路径)&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="sFCName"&gt;featureclass名称&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;要素类featureclass&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</span><span style="color: #0000ff">&nbsp;&nbsp;Public Function OpenAccessDatabase(ByVal sDBName As String, ByVal sFCName As String) As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; Dim pPropset As IPropertySet<br />
&nbsp;&nbsp;&nbsp; pPropset = New PropertySet<br />
&nbsp;&nbsp;&nbsp; Dim pFact As IWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; Dim pWorkspace As IWorkspace<br />
&nbsp;&nbsp;&nbsp; pPropset.SetProperty("DATABASE", sDBName)<br />
&nbsp;&nbsp;&nbsp; pFact = New AccessWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; pWorkspace = pFact.Open(pPropset, 0)<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureWorkspace As IFeatureWorkspace<br />
&nbsp;&nbsp;&nbsp; pFeatureWorkspace = pWorkspace<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureClass As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; pFeatureClass = pFeatureWorkspace.OpenFeatureClass(sFCName)<br />
&nbsp;&nbsp;&nbsp; Return pFeatureClass<br />
&nbsp; End Function<br />
</span><span style="color: #0000ff"><span style="color: #0000ff">&nbsp;<span style="color: #ff0000">&nbsp;''' &lt;summary&gt;<br />
&nbsp; ''' 打开Shapefile，返回featureclass<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="sDBName"&gt;shapefile路径&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="sFCName"&gt;featureclass名称&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;要素类featureclass&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</span></span><span style="color: #0000ff"><font style="color: #0000ff; background-color: #cce8cf" face="Verdana"><span style="color: #0000ff"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana">&nbsp; Public Function OpenShapefile(ByVal sDBName As String, ByVal sFCName As String) As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; Dim pPropset As IPropertySet<br />
&nbsp;&nbsp;&nbsp; pPropset = New PropertySet<br />
&nbsp;&nbsp;&nbsp; Dim pFact As IWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; Dim pWorkspace As IWorkspace<br />
&nbsp;&nbsp;&nbsp; pPropset.SetProperty("DATABASE", sDBName)<br />
&nbsp;&nbsp;&nbsp; pFact = New ShapefileWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; pWorkspace = pFact.Open(pPropset, 0)<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureWorkspace As IFeatureWorkspace<br />
&nbsp;&nbsp;&nbsp; pFeatureWorkspace = pWorkspace<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureClass As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; pFeatureClass = pFeatureWorkspace.OpenFeatureClass(sFCName)<br />
&nbsp;&nbsp;&nbsp; Return pFeatureClass<br />
&nbsp; End Function</font></font><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="color: #ff0000; background-color: #cce8cf" face="Verdana">&nbsp;</font></font></font></font></span></font></span></span></font></p>
<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #0000ff"><span style="color: #0000ff"><font style="color: #0000ff; background-color: #cce8cf" face="Verdana"><span style="color: #0000ff"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="color: #ff0000; background-color: #cce8cf" face="Verdana">&nbsp;''' &lt;summary&gt;<br />
&nbsp; ''' 打开SDE，返回featureclass<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="sServerName"&gt;sde服务名称&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="sFCName"&gt;featureclass名称&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;要素类featureclass&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</font></font>&nbsp;</font>&nbsp;Public Function OpenSDE(ByVal sServerName As String, ByVal sFCName As String) As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; Dim pPropset As IPropertySet<br />
&nbsp;&nbsp;&nbsp; pPropset = New PropertySet<br />
&nbsp;&nbsp;&nbsp; Dim pFact As IWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; Dim pWorkspace As IWorkspace<br />
&nbsp;&nbsp;&nbsp; With pPropset<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("Server", sServerName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("Instance", "sdemss")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("Database", "sde") 'Ignored with ArcSDE for Oracle <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("user", "sde")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("password", "go")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .SetProperty("version", "sde.DEFAULT")<br />
&nbsp;&nbsp;&nbsp; End With<br />
&nbsp;&nbsp;&nbsp; pFact = New SdeWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; pWorkspace = pFact.Open(pPropset, 0)<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureWorkspace As IFeatureWorkspace<br />
&nbsp;&nbsp;&nbsp; pFeatureWorkspace = pWorkspace<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureClass As IFeatureClass<br />
&nbsp;&nbsp;&nbsp; pFeatureClass = pFeatureWorkspace.OpenFeatureClass(sFCName)<br />
&nbsp;&nbsp;&nbsp; Return pFeatureClass<br />
&nbsp; End Function<br />
&nbsp;</font></span></font></span></span></font><font style="background-color: #cce8cf" face="Verdana"> ''' &lt;summary&gt;<br />
&nbsp; ''' 打开Raster，返回dataset<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="sDir"&gt;路径名&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="sFile"&gt;文件名&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;返回RasterDataset&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
<span style="color: #0000ff">&nbsp; Public Function OpenRasterDataset(ByVal sDir As String, ByVal sFile As String) As IRasterDataset<br />
&nbsp;&nbsp;&nbsp; 'Open the raster dataset with the given name.<br />
&nbsp;&nbsp;&nbsp; 'sDir is the directory the file resides<br />
&nbsp;&nbsp;&nbsp; 'sFile is the filename<br />
&nbsp;&nbsp;&nbsp; Dim pWsFact As IWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; Dim pWs As IRasterWorkspace<br />
&nbsp;&nbsp;&nbsp; Dim pRasterDataset As IRasterDataset<br />
&nbsp;&nbsp;&nbsp; 'Open the workspace<br />
&nbsp;&nbsp;&nbsp; pWsFact = New RasterWorkspaceFactory<br />
&nbsp;&nbsp;&nbsp; pWs = pWsFact.OpenFromFile(sDir, 0)<br />
&nbsp;&nbsp;&nbsp; 'Open the raster dataset<br />
&nbsp;&nbsp;&nbsp; pRasterDataset = pWs.OpenRasterDataset(sFile)<br />
&nbsp;&nbsp;&nbsp; 'Return<br />
&nbsp;&nbsp;&nbsp; pWsFact = Nothing<br />
&nbsp;&nbsp;&nbsp; pWs = Nothing<br />
&nbsp;&nbsp;&nbsp; pRasterDataset = Nothing<br />
&nbsp;&nbsp;&nbsp; Return pRasterDataset<br />
&nbsp; End Function<br />
</span><strong>#End Region</strong></font></p>
<img src ="http://www.cnblogs.com/wall/aggbug/1248846.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41802/" target="_blank">[新闻]微软Office 14即将展开Alpha测试</a>]]></description></item><item><title>AE实现GPS用户追踪的功能(VB.Net源码)</title><link>http://www.cnblogs.com/wall/archive/2008/07/17/1245134.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 17 Jul 2008 05:42:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/07/17/1245134.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1245134.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/07/17/1245134.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1245134.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1245134.html</trackback:ping><description><![CDATA[<span style="color: #000000"><strong>GPS用户追踪分为两种模式：<br />
一、实时追踪，即当GPS接收到被追踪点新的数据时，就更新当前的视图为以追踪点为中心点的Extent，这种方式更新频繁，效率可能不高，但是如果GPS接收数据的时间间隔合适，则追踪效果很棒；<br />
2、非实时追踪，即当被追踪点超出当前视图范围时，则更新视图范围为以追踪点为中心点的Extent，很明显，这种方式效率较之前一种要高，只是追踪效果上略有不及。<br />
下面附上这两种方式的实现，只需在GPS接收数据的响应事件中调用UpdateExtentByType函数，即可根据要求更新当前视图，至于跟踪点，就用Element的方式绘制与map中即可。</strong></span><br />
<br />
<font style="background-color: #cce8cf" face="Verdana"><strong style="color: #800080">#Region "GPS追踪功能"<br />
</strong>&nbsp;<span style="color: #ff0000">&nbsp;''' &lt;summary&gt;<br />
&nbsp; ''' GPS追踪功能，根据追踪点和追踪方式来更新当前地图范围<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pPoint"&gt;追踪点&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pActiveview"&gt;当前view&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pTypeCheck"&gt;追踪方式，是否实时更新&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;实时更新是指接收到新的GPS数据就更新一次，非实时更新是指当跟踪点超出当前范围才更新&lt;/remarks&gt;<br />
</span><span style="color: #0000ff">&nbsp; Public Sub UpdateExtentByType(ByVal pPoint As IPoint, ByVal pActiveview As IActiveView, Optional ByVal pTypeCheck As Boolean = False)<br />
&nbsp;&nbsp;&nbsp; If pTypeCheck Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateExtent(pPoint, pActiveview)<br />
&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ''判断是否超出了当前范围<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not GeoIsContainsAnotherGeo(pActiveview.Extent, pPoint) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateExtent(pPoint, pActiveview)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp; End Sub<br />
</span>&nbsp; <span style="color: #ff0000">''' &lt;summary&gt;<br />
&nbsp; ''' 更新当前视图范围为以ppoint为中心点的范围<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pPoint"&gt;传入的point&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pActiveview"&gt;当前view&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</span>&nbsp;<span style="color: #0000ff">&nbsp;Private Sub UpdateExtent(ByVal pPoint As IPoint, ByVal pActiveview As IActiveView)<br />
&nbsp;&nbsp;&nbsp; Dim pEnv As IEnvelope = New Envelope<br />
&nbsp;&nbsp;&nbsp; pEnv = GetEnvelopeFromPointAndEnvelope(pPoint, pActiveview.Extent)<br />
&nbsp;&nbsp;&nbsp; pActiveview.Extent = pEnv<br />
&nbsp;&nbsp;&nbsp; pActiveview.PartialRefresh(esriViewDrawPhase.esriViewBackground, Nothing, Nothing)<br />
&nbsp; End Sub<br />
</span>&nbsp;<span style="color: #ff0000">&nbsp;''' &lt;summary&gt;<br />
&nbsp; ''' 根据原视图范围和新的中心点获得一个新的范围<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pNewCenter"&gt;新中心点&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pEnv"&gt;原视图范围&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;新的范围&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</span><span style="color: #0000ff">&nbsp; Public Function GetEnvelopeFromPointAndEnvelope(ByVal pNewCenter As IPoint, ByVal pEnv As IEnvelope) As IEnvelope<br />
&nbsp;&nbsp;&nbsp; Dim pArea As IArea = pEnv<br />
&nbsp;&nbsp;&nbsp; Dim pOldCenter As IPoint = pArea.Centroid<br />
&nbsp;&nbsp;&nbsp; Dim pTrans As ITransform2D = pEnv<br />
&nbsp;&nbsp;&nbsp; pTrans.Move(pNewCenter.X - pOldCenter.X, pNewCenter.Y - pOldCenter.Y)<br />
&nbsp;&nbsp;&nbsp; Return pTrans<br />
&nbsp; End Function<br />
</span>&nbsp;<span style="color: #ff0000">&nbsp;''' &lt;summary&gt;<br />
&nbsp; ''' 判断一个几何体是否包含另一个几何体<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pGeo1"&gt;包含几何体&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pGeo2"&gt;被包含几何体&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</span>&nbsp;<span style="color: #0000ff">&nbsp;Function GeoIsContainsAnotherGeo(ByVal pGeo1 As IGeometry, ByVal pGeo2 As IGeometry) As Boolean<br />
&nbsp;&nbsp;&nbsp; Dim pRelationalOperator As IRelationalOperator = New Envelope<br />
&nbsp;&nbsp;&nbsp; pRelationalOperator = pGeo1<br />
&nbsp;&nbsp;&nbsp; Return (pRelationalOperator.Contains(pGeo2))<br />
&nbsp; End Function<br />
</span><strong style="color: #800080">#End Region</strong></font>
<img src ="http://www.cnblogs.com/wall/aggbug/1245134.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item><item><title>Label和UnLabel图层(VB.Net源码)</title><link>http://www.cnblogs.com/wall/archive/2008/07/17/1244996.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 17 Jul 2008 02:31:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/07/17/1244996.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1244996.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/07/17/1244996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1244996.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1244996.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff0000"><font style="background-color: #cce8cf" face="Verdana"><strong style="color: #000000">&nbsp; 实现的是类似arcmap里的Label和UnLabel功能</strong><br />
<br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 用Label方式添加标注<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pFeatureLayer"&gt;需要Label的FeatureClass&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pFieldName"&gt;用于Label的字段名&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</font></span><br />
<span style="color: #0000ff">&nbsp; Public Sub LabelFeature(ByVal pFeatureLayer As IFeatureLayer, ByVal pFieldName As String)<br />
&nbsp;&nbsp;&nbsp; Dim pLabels As IGeoFeatureLayer = New FeatureLayer<br />
&nbsp;&nbsp;&nbsp; pLabels = pFeatureLayer<br />
&nbsp;&nbsp;&nbsp; Dim pAnnoProps As IAnnotateLayerProperties = New LabelEngineLayerProperties<br />
&nbsp;&nbsp;&nbsp; Dim pLblEngLyrProps As ILabelEngineLayerProperties = New LabelEngineLayerProperties<br />
&nbsp;&nbsp;&nbsp; pLabels.AnnotationProperties.QueryItem(0, pAnnoProps, Nothing, Nothing)<br />
&nbsp;&nbsp;&nbsp; pLblEngLyrProps = pAnnoProps<br />
&nbsp;&nbsp;&nbsp; pLblEngLyrProps.IsExpressionSimple = True<br />
&nbsp;&nbsp;&nbsp; pLblEngLyrProps.Expression = pFieldName<br />
&nbsp;&nbsp;&nbsp; pLabels.DisplayAnnotation = True<br />
&nbsp;&nbsp;&nbsp; ''刷新语句<br />
&nbsp;&nbsp;&nbsp; pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, Nothing, Nothing)<br />
&nbsp; End Sub</span><br />
<br />
<span style="color: #ff0000">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 不显示Label<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pFeaturelayer"&gt;操作的图层&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</span><br />
<span style="color: #0000ff">&nbsp; Public Sub UnLabelFeature(ByVal pFeatureLayer As IFeatureLayer)<br />
&nbsp;&nbsp;&nbsp; Dim pLabels As IGeoFeatureLayer = New FeatureLayer<br />
&nbsp;&nbsp;&nbsp; pLabels = pFeatureLayer<br />
&nbsp;&nbsp;&nbsp; pLabels.DisplayAnnotation = False<br />
&nbsp;&nbsp;&nbsp; ''刷新语句<br />
&nbsp;&nbsp;&nbsp; pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, Nothing, Nothing)<br />
&nbsp; End Sub</span></font>
<img src ="http://www.cnblogs.com/wall/aggbug/1244996.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item><item><title>AE中UniqueRender－唯一值渲染的一个简单例子(VB.Net源码)</title><link>http://www.cnblogs.com/wall/archive/2008/07/17/1244986.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 17 Jul 2008 02:25:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/07/17/1244986.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1244986.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/07/17/1244986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1244986.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1244986.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff0000"><font style="background-color: #cce8cf" face="Verdana">&nbsp;<strong style="color: #000000">直接上源码，供大家一看</strong><br />
<br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 根据某一字段的值用不同的Symbol加以渲染<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pGeoFeatureLayer"&gt;渲染的Layer&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</font></span><br />
&nbsp; Private Sub UniqueRender(ByVal pGeoFeatureLayer As IGeoFeatureLayer)<br />
&nbsp;&nbsp;&nbsp; Dim pUniqueRender As IUniqueValueRenderer = New UniqueValueRenderer<br />
&nbsp;&nbsp;&nbsp; Dim pColor As IColor<br />
&nbsp;&nbsp;&nbsp; Dim pCMSymbol As ICharacterMarkerSymbol<br />
&nbsp;&nbsp;&nbsp; Dim pFont As stdole.IFontDisp = New stdole.StdFont<br />
&nbsp;&nbsp;&nbsp; pFont.Name = "ESRI Default Marker"<br />
&nbsp;&nbsp;&nbsp; pColor = New RgbColor<br />
&nbsp;&nbsp;&nbsp; pColor.RGB = RGB(56, 168, 0)<br />
&nbsp;&nbsp;&nbsp; pCMSymbol = New CharacterMarkerSymbol<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Font = pFont<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.CharacterIndex = 33<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Color = pColor<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Size = 10<br />
&nbsp;&nbsp;&nbsp; pUniqueRender.FieldCount = 1<br />
&nbsp;&nbsp;&nbsp; pUniqueRender.Field(0) = g_FieldType<br />
&nbsp;&nbsp;&nbsp; pUniqueRender.DefaultSymbol = pCMSymbol<br />
&nbsp;&nbsp;&nbsp; pUniqueRender.UseDefaultSymbol = True</font></p>
<p><font style="background-color: #cce8cf" face="Verdana">&nbsp;&nbsp;&nbsp; pColor = New RgbColor<br />
&nbsp;&nbsp;&nbsp; pColor.RGB = RGB(255, 255, 0)<br />
&nbsp;&nbsp;&nbsp; pCMSymbol = New CharacterMarkerSymbol<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Font = pFont<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.CharacterIndex = 80<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Color = pColor<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Size = 20<br />
&nbsp;&nbsp;<span style="color: #ff0000">&nbsp; ''添加的不同类型，其中featureclass中必须有与之对应的字段<br />
</span>&nbsp;&nbsp;&nbsp; pUniqueRender.AddValue(2, "Type1", pCMSymbol)</font></p>
<p><font style="background-color: #cce8cf" face="Verdana">&nbsp;&nbsp;&nbsp; pColor = New RgbColor<br />
&nbsp;&nbsp;&nbsp; pColor.RGB = RGB(85, 255, 0)<br />
&nbsp;&nbsp;&nbsp; pCMSymbol = New CharacterMarkerSymbol<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Font = pFont<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.CharacterIndex = 88<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Color = pColor<br />
&nbsp;&nbsp;&nbsp; pCMSymbol.Size = 20<br />
&nbsp;&nbsp;&nbsp; pUniqueRender.AddValue(3, "Type2", pCMSymbol)</font></p>
<p><font style="background-color: #cce8cf" face="Verdana">&nbsp;&nbsp;&nbsp; pGeoFeatureLayer.Renderer = pUniqueRender<br />
&nbsp;&nbsp;&nbsp; pGeoFeatureLayer.DisplayField =&nbsp;"Type"&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">'用于唯一值渲染的字段名</span><br />
&nbsp; End Sub</font></p>
<img src ="http://www.cnblogs.com/wall/aggbug/1244986.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item><item><title>AE创建气泡式的提示框（VB.Net和C#源码）</title><link>http://www.cnblogs.com/wall/archive/2008/07/17/1244942.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 17 Jul 2008 01:52:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/07/17/1244942.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1244942.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/07/17/1244942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1244942.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1244942.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff0000"><font style="background-color: #cce8cf" face="Verdana"><strong style="color: #000000">&nbsp;下面是用AE创建气泡式提示框的方法:</strong><br />
<strong style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;1、VB.Net源码</strong><br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 创建文本提示框<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="x"&gt;提示框标识的位置X坐标&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="y"&gt;提示框标识的位置Y坐标&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pTextString"&gt;提示框中显示的文本&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pPoint"&gt;提示框箭头指向的点&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pGraphicsContainer"&gt;包含提示框的graphicscontainer&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</font></span><br />
<span style="color: #0000ff">&nbsp; Public Function CreateTextElement(ByVal x As Double, ByVal y As Double, ByVal pTextString As String, Optional ByVal pPoint As IPoint = Nothing, Optional ByVal pGraphicsContainer As IGraphicsContainer = Nothing) As IElement<br />
&nbsp;&nbsp;&nbsp; Dim pElement As IElement = New MarkerElementClass()<br />
&nbsp;&nbsp;&nbsp; Dim pTElement As IElement = New TextElementClass()<br />
&nbsp;&nbsp;&nbsp; Dim pTextSymbol As IFormattedTextSymbol = New TextSymbolClass()<br />
&nbsp;&nbsp;&nbsp; Dim pBalloonCallout As IBalloonCallout = CreateBalloonCallout(x, y)<br />
&nbsp;&nbsp;&nbsp; Dim pColor As IRgbColor = New RgbColorClass()<br />
&nbsp;&nbsp;&nbsp; pColor.Red = 150<br />
&nbsp;&nbsp;&nbsp; pColor.Green = 0<br />
&nbsp;&nbsp;&nbsp; pColor.Blue = 0<br />
&nbsp;&nbsp;&nbsp; pTextSymbol.Color = pColor<br />
&nbsp;&nbsp;&nbsp; Dim pTextBackground As ITextBackground<br />
&nbsp;&nbsp;&nbsp; pTextBackground = pBalloonCallout<br />
&nbsp;&nbsp;&nbsp; pTextSymbol.Background = pTextBackground<br />
&nbsp;&nbsp;&nbsp; pTextSymbol.Size = 8<br />
&nbsp;&nbsp;&nbsp; CType(pTElement, ITextElement).Symbol = pTextSymbol<br />
&nbsp;&nbsp;&nbsp; CType(pTElement, ITextElement).Text = pTextString<br />
&nbsp;&nbsp;&nbsp; If pPoint Is Nothing Then pPoint = New Point : pPoint.PutCoords(x + Const_Dis, y + Const_Dis)<br />
&nbsp;&nbsp;&nbsp; pTElement.Geometry = pPoint<br />
&nbsp;&nbsp;&nbsp; pGraphicsContainer.AddElement(pTElement, 1)<br />
&nbsp;&nbsp;&nbsp; Return pTElement<br />
&nbsp; End Function<br />
</span><br />
<span style="color: #ff0000">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 创建balloon型提示框<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="x"&gt;提示框所在位置X坐标&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="y"&gt;提示框所在位置Y坐标&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</span><br />
&nbsp; <span style="color: #0000ff">Public Function CreateBalloonCallout(ByVal x As Double, ByVal y As Double) As IBalloonCallout<br />
&nbsp;&nbsp;&nbsp; Dim pRgbClr As IRgbColor = New RgbColorClass()<br />
&nbsp;&nbsp;&nbsp; pRgbClr.Red = 255<br />
&nbsp;&nbsp;&nbsp; pRgbClr.Blue = 255<br />
&nbsp;&nbsp;&nbsp; pRgbClr.Green = 255<br />
&nbsp;&nbsp;&nbsp; Dim pSmplFill As ISimpleFillSymbol = New SimpleFillSymbolClass()<br />
&nbsp;&nbsp;&nbsp; pSmplFill.Color = pRgbClr<br />
&nbsp;&nbsp;&nbsp; pSmplFill.Style = esriSimpleFillStyle.esriSFSSolid<br />
&nbsp;&nbsp;&nbsp; Dim pBllnCallout As IBalloonCallout = New BalloonCalloutClass()<br />
&nbsp;&nbsp;&nbsp; pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRoundedRectangle<br />
&nbsp;&nbsp;&nbsp; pBllnCallout.Symbol = pSmplFill<br />
&nbsp;&nbsp;&nbsp; pBllnCallout.LeaderTolerance = 1<br />
&nbsp;&nbsp;&nbsp; Dim pPoint As IPoint = New ESRI.ArcGIS.Geometry.PointClass()<br />
&nbsp;&nbsp;&nbsp; pPoint.X = x<br />
&nbsp;&nbsp;&nbsp; pPoint.Y = y<br />
&nbsp;&nbsp;&nbsp; pBllnCallout.AnchorPoint = pPoint<br />
&nbsp;&nbsp;&nbsp; Return pBllnCallout<br />
&nbsp; End Function<br />
<br />
<br />
<strong><span style="color: #000000"><strong>&nbsp; 2、C#源码</strong></span><br />
&nbsp;<br />
</strong><font style="color: #0000ff; background-color: #cce8cf" face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void CreateTextElment(double x, double y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPoint pPoint = new PointClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMap pMap = axMapControl1.Map;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IActiveView pActiveView = pMap as IActiveView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IGraphicsContainer pGraphicsContainer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IElement pElement = new MarkerElementClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IElement pTElement = new TextElementClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pGraphicsContainer = (IGraphicsContainer)pActiveView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IFormattedTextSymbol pTextSymbol = new TextSymbolClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IBalloonCallout pBalloonCallout = CreateBalloonCallout(x, y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IRgbColor pColor = new RgbColorClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pColor.Red = 150;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pColor.Green = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pColor.Blue = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTextSymbol.Color = pColor;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITextBackground pTextBackground;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTextBackground = (ITextBackground)pBalloonCallout;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTextSymbol.Background = pTextBackground;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((ITextElement)pTElement).Symbol = pTextSymbol;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((ITextElement)pTElement).Text = "测试";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint.X = x + 42;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint.Y = y + 42;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTElement.Geometry = pPoint;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pGraphicsContainer.AddElement(pTElement, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public IBalloonCallout CreateBalloonCallout(double x, double y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IRgbColor pRgbClr = new RgbColorClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRgbClr.Red = 255;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRgbClr.Blue = 255;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRgbClr.Green = 255;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ISimpleFillSymbol pSmplFill = new SimpleFillSymbolClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pSmplFill.Color = pRgbClr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pSmplFill.Style = esriSimpleFillStyle.esriSFSSolid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IBalloonCallout pBllnCallout = new BalloonCalloutClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRectangle;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBllnCallout.Symbol = pSmplFill;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBllnCallout.LeaderTolerance = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPoint pPoint = new ESRI.ArcGIS.Geometry.PointClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint.X = x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint.Y = y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBllnCallout.AnchorPoint = pPoint;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return pBllnCallout;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font><br />
</span></font>
<img src ="http://www.cnblogs.com/wall/aggbug/1244942.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item><item><title>转载－Google Maps API编程资源大全</title><link>http://www.cnblogs.com/wall/archive/2008/06/19/1225828.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 19 Jun 2008 05:29:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/06/19/1225828.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1225828.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/06/19/1225828.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1225828.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1225828.html</trackback:ping><description><![CDATA[Google Maps API是Google自己推出编程API，可以让全世界对Google Maps有兴趣的程序设计师自行开发基于Google Maps的服务，建立自己的地图网站。以下是我在Google Maps API开发过程中找到的一些API的编程资源，包括中文文档，中文说明，示例等等，希望对Google Maps编程感兴趣的程序员有所帮助。
<p>　　<strong>中文资料部分 </strong>（包括中文的文档说明等，以下的网址都是中文内容。）</p>
<p>　　<strong>下面的关于API的中文文档</strong></p>
<p>　　Google Maps API 第2版中文文档 <a style="color: #0000ff" href="http://www.step1.cn/GoogleApi/map2/documentation.htm" target="_blank">http://www.step1.cn/GoogleApi/map2/documentation.htm</a></p>
<p>　　Google Maps API 第2版升级指南 <a href="http://www.step1.cn/GoogleApi/map2/upgrade.htm" target="_blank">http://www.step1.cn/GoogleApi/map2/upgrade.htm</a></p>
<p>　　Google Maps API 第2版类参考 <a href="http://www.step1.cn/GoogleApi/map2/reference.htm" target="_blank">http://www.step1.cn/GoogleApi/map2/reference.htm</a></p>
<p>　　另外一个版本的Google Maps API 2中文文档 <a href="http://www.zmap.org/doc/maps/documentation/" target="_blank">http://www.zmap.org/doc/maps/documentation/</a></p>
<p>　　Google Maps API 第1版中文文档 <a href="http://www.step1.cn/GoogleAPI/map/documentation.htm" target="_blank">http://www.step1.cn/GoogleAPI/map/documentation.htm</a></p>
<p>　　<strong>下面是关于KML文件的中文文档</strong></p>
<p>　　Google Earth KML中文说明（一） <a href="http://gisman.bokee.com/5294713.html" target="_blank">http://gisman.bokee.com/5294713.html</a></p>
<p>　　Google Earth KML中文说明（二） <a href="http://gisman.bokee.com/5294722.html" target="_blank">http://gisman.bokee.com/5294722.html</a></p>
<p>　　Google Earth KML中文说明（基于Google Earth客户端版本3.0 的KML 版本2.0） <a href="http://www.step1.cn/googleapi/map/kml.htm" target="_blank">http://www.step1.cn/googleapi/map/kml.htm</a></p>
<p>　　<strong>英文资料部分</strong> （主要是Google官方的文档说明，如果觉得中文翻译的有问题，也可以看看这些原始内容。)</p>
<p>　　Google Maps API 官方网 <a href="http://www.google.com/apis/maps/" target="_blank">http://www.google.com/apis/maps/</a></p>
<p>　　Google Maps API 英文文档 <a href="http://www.google.com/apis/maps/documentation/" target="_blank">http://www.google.com/apis/maps/documentation/</a></p>
<p>　　Google Maps API 官方Blog <a href="http://googlemapsapi.blogspot.com/" target="_blank">http://googlemapsapi.blogspot.com/</a></p>
<p>　　Google Maps API 论坛 <a href="http://groups.google.com/group/Google-Maps-API" target="_blank">http://groups.google.com/group/Google-Maps-API</a></p>
<p>　　Google KML 的官方文档 <a href="http://earth.google.com/kml/" target="_blank">http://earth.google.com/kml/</a></p>
<p>　　Google API官方网 <a href="http://code.google.com/" target="_blank">http://code.google.com/</a></p>
<img src ="http://www.cnblogs.com/wall/aggbug/1225828.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41800/" target="_blank">[新闻]Google放出Android开发路线图</a>]]></description></item><item><title>自己开发Identify功能用到的关键函数(VB.Net源码)</title><link>http://www.cnblogs.com/wall/archive/2008/06/12/1218335.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Thu, 12 Jun 2008 05:55:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/06/12/1218335.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1218335.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/06/12/1218335.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1218335.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1218335.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf" face="Verdana"><strong style="color: #ff0000"><span style="color: #000000"><font style="background-color: #cce8cf" face="Verdana"><strong></strong></font></span><font color="#000000">自己开发Identify功能，最为关键的就是查询鼠标点击位置，所对应的对象的图层信息，用下面的函数，可以Identify到所有类型图层信息（目前我所了解的图层都可以），其中函数的适用范围和用法已经写清楚了，大家尽情享用，^_^<br />
<br />
</font><font style="color: #000080; background-color: #cce8cf" face="Verdana">&nbsp; Private Const Const_FieldName As String = "字段"<br />
&nbsp; Private Const Const_ValueName As String = "取值"</font><br />
''' &lt;summary&gt;<br />
&nbsp; ''' 得到选中Feature的属性信息<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pFeat"&gt;选中的Feature&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pLayer"&gt;操作feature图层&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;返回datatable，用于绑定到grid&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;用于任何featurelayer&lt;/remarks&gt;<br />
</strong>&nbsp; Private Function SetFeatureProperty(ByVal pFeat As IFeature, ByVal pLayer As IFeatureLayer) As DataTable<br />
&nbsp;&nbsp;&nbsp; If pFeat Is Nothing Then Return Nothing : Exit Function<br />
&nbsp;&nbsp;&nbsp; Dim pTable As New DataTable<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_FieldName)<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_ValueName)<br />
&nbsp;&nbsp;&nbsp; Dim pFeatureclass As IFeatureClass = pLayer.FeatureClass<br />
&nbsp;&nbsp;&nbsp; Dim pFields As IFields = pFeatureclass.Fields<br />
&nbsp;&nbsp;&nbsp; Dim pLayerFields As ILayerFields = New FeatureLayer<br />
&nbsp;&nbsp;&nbsp; pLayerFields = pLayer<br />
&nbsp;&nbsp;&nbsp; Dim pGeomtryType As esriGeometryType = pFeatureclass.ShapeType<br />
&nbsp;&nbsp;&nbsp; Dim strType As String = Nothing<br />
&nbsp;&nbsp;&nbsp; ''该处以点、线、面、多片为例，可以进行扩充<br />
&nbsp;&nbsp;&nbsp; Select Case pGeomtryType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case esriGeometryType.esriGeometryPoint<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strType = "Point"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case esriGeometryType.esriGeometryPolyline<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strType = "Polyline"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case esriGeometryType.esriGeometryPolygon<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strType = "Polygon"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case esriGeometryType.esriGeometryMultiPatch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strType = "MultiPatch"<br />
&nbsp;&nbsp;&nbsp; End Select<br />
&nbsp;&nbsp;&nbsp; For j As Integer = 0 To pFields.FieldCount - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pFieldInfo As IFieldInfo = New FieldInfo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pFieldInfo = pLayerFields.FieldInfo(j)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If pFieldInfo.Visible Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pRow As DataRow = pTable.NewRow<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(0) = pFields.Field(j).Name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If j &lt;&gt; 1 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(1) = pFeat.Value(j).ToString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(1) = strType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTable.Rows.Add(pRow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; GridControlProperty.DataSource = pTable<br />
&nbsp;&nbsp;&nbsp; Return pTable<br />
&nbsp; End Function<br />
<strong style="color: #ff0000">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 得到鼠标点击位置对应的Tin的属性信息<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pPoint"&gt;鼠标点击地图点&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pTinLayer"&gt;操作的tin图层&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;返回datatable，用于绑定到grid&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;用于tin图层&lt;/remarks&gt;</strong><br />
&nbsp; Private Function SetTinProperty(ByVal pPoint As IPoint, ByVal pTinLayer As ITinLayer) As DataTable<br />
&nbsp;&nbsp;&nbsp; Dim pTinSurface As ITinSurface = New Tin<br />
&nbsp;&nbsp;&nbsp; pTinSurface = pTinLayer.Dataset<br />
&nbsp;&nbsp;&nbsp; Dim pTinSurElement As ITinSurfaceElement = pTinSurface.GetSurfaceElement(pPoint)<br />
&nbsp;&nbsp;&nbsp; If pTinSurElement Is Nothing Then Return Nothing : Exit Function<br />
&nbsp;&nbsp;&nbsp; Dim pTable As New DataTable<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_FieldName)<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_ValueName)<br />
&nbsp;&nbsp;&nbsp; Dim pFields As IFields = pTinLayer.Dataset.Fields<br />
&nbsp;&nbsp;&nbsp; Dim pPropertyList As List(Of Double) = New List(Of Double)<br />
&nbsp;&nbsp;&nbsp; pPropertyList.Add(pTinSurElement.Elevation)<br />
&nbsp;&nbsp;&nbsp; pPropertyList.Add(pTinSurElement.SlopeDegrees)<br />
&nbsp;&nbsp;&nbsp; pPropertyList.Add(pTinSurElement.AspectDegrees)<br />
&nbsp;&nbsp;&nbsp; pPropertyList.Add(pTinSurElement.FaceTagValue)<br />
&nbsp;&nbsp;&nbsp; pPropertyList.Add(pTinSurElement.NodeTagValue)<br />
&nbsp;&nbsp;&nbsp; Dim pLayerFields As ILayerFields = New TinLayer<br />
&nbsp;&nbsp;&nbsp; pLayerFields = pTinLayer<br />
&nbsp;&nbsp;&nbsp; For j As Integer = 0 To pFields.FieldCount - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pFieldInfo As IFieldInfo = New FieldInfo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pFieldInfo = pLayerFields.FieldInfo(j)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If pFieldInfo.Visible Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pRow As DataRow = pTable.NewRow<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(0) = pFields.Field(j).Name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(1) = pPropertyList(j)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTable.Rows.Add(pRow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; GridControlProperty.DataSource = pTable<br />
&nbsp;&nbsp;&nbsp; Return pTable<br />
&nbsp; End Function<br />
<strong style="color: #ff0000">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 得到鼠标点位置对应Raster的属性信息<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pPoint"&gt;鼠标点击的地图点&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pRasterLayer"&gt;操作的图层&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;返回datatable，用于绑定到grid&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;用于raster图层，图像、图片等都可以查询&lt;/remarks&gt;<br />
</strong>&nbsp; Private Function SetRasterProperty(ByVal pPoint As IPoint, ByVal pRasterLayer As IRasterLayer) As DataTable<br />
&nbsp;&nbsp;&nbsp; Dim pIdentify As IIdentify = New RasterLayer<br />
&nbsp;&nbsp;&nbsp; pIdentify = pRasterLayer<br />
&nbsp;&nbsp;&nbsp; Dim pArray As IArray = pIdentify.Identify(pPoint)<br />
&nbsp;&nbsp;&nbsp; If pArray Is Nothing Then Return Nothing : Exit Function<br />
&nbsp;&nbsp;&nbsp; Dim pRasterIdentify2 As IRasterIdentifyObj2 = pArray.Element(0)<br />
&nbsp;&nbsp;&nbsp; Dim pRasterIdentify As IRasterIdentifyObj = pArray.Element(0)<br />
&nbsp;&nbsp;&nbsp; Dim pField As String = Nothing<br />
&nbsp;&nbsp;&nbsp; Dim pValue As String = Nothing<br />
&nbsp;&nbsp;&nbsp; pField = pRasterIdentify.Name<br />
&nbsp;&nbsp;&nbsp; If pField = "NoData" Then Return Nothing : Exit Function<br />
&nbsp;&nbsp;&nbsp; Dim pTable As New DataTable<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_FieldName)<br />
&nbsp;&nbsp;&nbsp; pTable.Columns.Add(Const_ValueName)<br />
&nbsp;&nbsp;&nbsp; Dim pIdentifyIndex As Integer = 0<br />
&nbsp;&nbsp;&nbsp; While 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRasterIdentify2.GetPropAndValues(pIdentifyIndex, pField, pValue)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch ex As Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit While<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pRow As DataRow = pTable.NewRow<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(0) = pField<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRow.Item(1) = pValue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTable.Rows.Add(pRow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pIdentifyIndex = pIdentifyIndex + 1<br />
&nbsp;&nbsp;&nbsp; End While<br />
&nbsp;&nbsp;&nbsp; GridControlProperty.DataSource = pTable<br />
&nbsp;&nbsp;&nbsp; Return pTable<br />
&nbsp; End Function</font> 
<img src ="http://www.cnblogs.com/wall/aggbug/1218335.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41799/" target="_blank">[新闻]番茄花园作者被警方逮捕</a>]]></description></item><item><title>颜色匹配方法的实现（附源码）</title><link>http://www.cnblogs.com/wall/archive/2008/06/04/1213419.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Wed, 04 Jun 2008 05:39:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/06/04/1213419.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1213419.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/06/04/1213419.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1213419.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1213419.html</trackback:ping><description><![CDATA[<p><font style="color: #ff0000; background-color: #cce8cf" face="Verdana"><font style="color: #339966; background-color: #cce8cf" face="Verdana"><span style="color: #ff6600"><font style="background-color: #cce8cf" face="Verdana"><strong><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana"><strong><font style="color: #000000; background-color: #cce8cf" face="Verdana">本文实现了三种颜色匹配的方法，<br />
一，先将Color结构的颜色转换为HSB颜色，然后再对其进行匹配比较，这是目前为止比较准确的一种方法，得到的颜色近似度很高<br />
二，比较两个Color结构颜色的RGB分量的差的绝对大小，设定一个阈值，选出最为接近的一个，这种方法精度不高，有些颜色会有很明显的失真，但速度较快<br />
三，比较两个Color结构颜色的RGB分量的差的平方和的大小，得到容差，最好选出容差最小的一个，这种方法精度比（二）高，速度比（一）快<br />
</font></strong></font></font></font><span style="color: #000000">笔者用的第一种方法，对256颜色匹配的非常好，其中三种方法的代码(VB.Net)如下，大家一看便知如何应用<br />
</span><br />
#Region "先转换成hsb颜色，再进行匹配，最为准确的颜色匹配方法"</font>&nbsp;</strong></font></span></font>&nbsp;<br />
<span><strong><font style="color: #0000ff; background-color: #cce8cf" face="Verdana">&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' hsb颜色类，相当于一个结构<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
&nbsp; Class HSB<br />
&nbsp;&nbsp;&nbsp; Public Hue As Double<br />
&nbsp;&nbsp;&nbsp; Public Saturation As Double<br />
&nbsp;&nbsp;&nbsp; Public Brightness As Double<br />
&nbsp;&nbsp;&nbsp; Sub New(ByVal h As Double, ByVal s As Double, ByVal b As Double)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hue = h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Saturation = s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Brightness = b<br />
&nbsp;&nbsp;&nbsp; End Sub<br />
&nbsp; End Class</font><br />
''' &lt;summary&gt;<br />
&nbsp; ''' rgb转换为hsb<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="red"&gt;&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="green"&gt;&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="blue"&gt;&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</strong><span style="color: #000080">&nbsp; Private Function RGBtoHSB(ByVal red As Integer, ByVal green As Integer, ByVal blue As Integer) As HSB<br />
&nbsp;&nbsp;&nbsp; Dim r As Double = red / 255.0<br />
&nbsp;&nbsp;&nbsp; Dim g As Double = green / 255.0<br />
&nbsp;&nbsp;&nbsp; Dim b As Double = blue / 255.0<br />
&nbsp;&nbsp;&nbsp; Dim max As Double = Math.Max(r, Math.Max(g, b))<br />
&nbsp;&nbsp;&nbsp; Dim min As Double = Math.Min(r, Math.Min(g, b))<br />
&nbsp;&nbsp;&nbsp; Dim h As Double = 0.0<br />
&nbsp;&nbsp;&nbsp; If (max = r And g &gt;= b) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h = 60 * (g - b) / (max - min)<br />
&nbsp;&nbsp;&nbsp; ElseIf (max = r And g &lt; b) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h = 60 * (g - b) / (max - min) + 360<br />
&nbsp;&nbsp;&nbsp; ElseIf (max = g) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h = 60 * (b - r) / (max - min) + 120<br />
&nbsp;&nbsp;&nbsp; ElseIf (max = b) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h = 60 * (r - g) / (max - min) + 240<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Dim s As Double<br />
&nbsp;&nbsp;&nbsp; If max = 0 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = 0.0<br />
&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = 1.0 - (min / max)<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Return New HSB(h, s, max)<br />
&nbsp;End Function<br />
</span><strong>&nbsp;<br />
''' &lt;summary&gt;<br />
&nbsp; ''' 获得最为接近的索引颜色<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="color"&gt;所比较的颜色&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="LabelColorsHSB"&gt;颜色列表&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;返回与所比较的颜色最为接近的颜色在颜色列表中的索引值&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</strong>&nbsp; <span style="color: #000080"><font style="background-color: #cce8cf" face="Verdana">Private Function GetNearestColorLabelIndex(ByVal color As Color, ByVal LabelColorsHSB As List(Of HSB)) As Integer<br />
&nbsp;&nbsp;&nbsp; Const weightHue As Double = 0.8<br />
&nbsp;&nbsp;&nbsp; Const weightSaturation As Double = 0.1<br />
&nbsp;&nbsp;&nbsp; Const weightValue As Double = 0.1<br />
&nbsp;&nbsp;&nbsp; Dim minDistance As Double = Double.MaxValue<br />
&nbsp;&nbsp;&nbsp; Dim minIndex As Integer = 255<br />
&nbsp;&nbsp;&nbsp; Dim targetHSB As HSB = RGBtoHSB(color.R, color.G, color.B)<br />
&nbsp;&nbsp;&nbsp; For i As Integer = 0 To LabelColorsHSB.Count - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim dH As Double = LabelColorsHSB(i).Hue - targetHSB.Hue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim dS As Double = LabelColorsHSB(i).Saturation - targetHSB.Saturation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim dV As Double = LabelColorsHSB(i).Brightness - targetHSB.Brightness<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim curDistance As Double = Math.Sqrt(weightHue * Math.Pow(dH, 2) + weightSaturation * Math.Pow(dS, 2) + weightValue * Math.Pow(dV, 2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (curDistance &lt; minDistance) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDistance = curDistance<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minIndex = i + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; Return minIndex<br />
&nbsp; End Function<br />
<br />
<span style="color: #008080"><strong style="color: #ff6600">#End Region</strong></span><br />
<br />
</font></span></span></font><font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff6600"><font style="background-color: #cce8cf" face="Verdana"><strong>#Region "绝对值容差，设置阈值得到匹配颜色"<br />
</strong></font></span><span style="color: #ff0000"><strong>&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 得到相近的color<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pColor"&gt;所匹配颜色&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</strong></span><br />
&nbsp; Public Function GetCloseColor(ByVal pColor As Color,Byavl ColorList As List(of Color)) As Integer<br />
&nbsp;&nbsp;&nbsp; Dim pColorDis As Integer = Const_ColorDistance<br />
&nbsp;&nbsp;&nbsp; Dim Dif As Integer<br />
&nbsp;&nbsp;&nbsp; Dim pACIcolor As Integer = Const_DefaultColorIndex<br />
&nbsp;&nbsp;&nbsp; For i As Integer = 0 To ColorList.Count - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ''绝对值容差法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dif = Math.Abs(ColorList(i).R - pColor.R) + Math.Abs(ColorList(i).G - pColor.G) + Math.Abs(ColorList(i).B - pColor.B)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Dif &lt; pColorDis Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pColorDis = Dif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pACIcolor = i + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; Return pACIcolor<br />
&nbsp; End Function<br />
<span style="color: #ff6600"><strong>#End Region</strong></span></font></p>
<p><font style="color: #ff6600; background-color: #cce8cf" face="Verdana"><strong>#Region "平方容差选择最小值得到匹配颜色"</strong></font></p>
<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff0000"><font style="background-color: #cce8cf" face="Verdana"><strong>&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 平方容差选择最小值得到匹配颜色<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pColor"&gt;所匹配颜色&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
</strong></font></span>&nbsp; Private Function GetCloseColor(ByVal pDC As Color,Byavl ColorList As List(of Color)) As Integer<br />
&nbsp;&nbsp;&nbsp; Dim pACIcolor As Integer = Const_DefaultColorIndex<br />
&nbsp;&nbsp;&nbsp; Dim pDifs As New List(Of Long)<br />
&nbsp;&nbsp;&nbsp; Dim pHash As New Hashtable<br />
&nbsp;&nbsp;&nbsp;&nbsp; For i As Integer = 0 To ColorList.Count - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tCompValue As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tCompValue = ColorValueComp(RGB(pDC.R, pDC.G, pDC.B), RGB(ColorList(i).R, ColorList(i).G, ColorList(i).B))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDifs.Add(tCompValue)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not pHash.Contains(tCompValue) Then pHash.Add(tCompValue, i + 1)<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; pDifs.Sort()<br />
&nbsp;&nbsp;&nbsp; pACIcolor = pHash(pDifs(0))<br />
&nbsp;&nbsp;&nbsp; Return pACIcolor<br />
&nbsp; End Function</font></p>
<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #ff0000"><strong>&nbsp;&nbsp;&nbsp; ''' &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' 判断两个color在容差范围内是否相似<br />
&nbsp;&nbsp;&nbsp; ''' &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorA"&gt;颜色A&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorB"&gt;颜色B&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pValve"&gt;容差&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</strong></span><br />
&nbsp;&nbsp;&nbsp; Private Function ColorValueIsBorder(ByVal pColorA As Long, ByVal pColorB As Long, ByVal pValve As Long) As Boolean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在容差pValve的范围内，比较两个颜色是否近似。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tOutValue As Boolean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tCompValue As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tCompValue = ColorValueComp(pColorA, pColorB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If tCompValue &lt;= pValve Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tOutValue = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tOutValue = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return tOutValue<br />
&nbsp;&nbsp;&nbsp; End Function<br />
<span style="color: #ff0000"><strong>&nbsp;&nbsp;&nbsp; ''' &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' 通过Value值获得color<br />
&nbsp;&nbsp;&nbsp; ''' &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorValue"&gt;Value值&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</strong></span><br />
&nbsp;&nbsp;&nbsp; Private Function ColorGetByValue(ByVal pColorValue As Long) As Color<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '从一个Long类型的颜色数据获得一个ColorRGB类型。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tOutColor As Color = Color.FromArgb(255, pColorValue Mod 2 ^ 8, (pColorValue \ 2 ^ 8) Mod 2 ^ 8, (pColorValue \ 2 ^ 16) Mod 2 ^ 8)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return tOutColor<br />
&nbsp;&nbsp;&nbsp; End Function<br />
<span style="color: #ff0000"><strong>&nbsp;&nbsp;&nbsp; ''' &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' 获得两种long类型颜色的容差<br />
&nbsp;&nbsp;&nbsp; ''' &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorA"&gt;颜色A&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorB"&gt;颜色B&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;</strong></span><br />
&nbsp;&nbsp;&nbsp; Public Function ColorValueComp(ByVal pColorA As Long, ByVal pColorB As Long) As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得两个Long类型颜色的色差。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tOutValue As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tColorA As Color<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tColorB As Color<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tColorA = ColorGetByValue(pColorA)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tColorB = ColorGetByValue(pColorB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tOutValue = ColorRGBComp(tColorA, tColorB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return tOutValue<br />
&nbsp;&nbsp;&nbsp; End Function<br />
<span style="color: #ff0000"><strong>&nbsp;&nbsp;&nbsp; ''' &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' 获得两种颜色之间的容差<br />
&nbsp;&nbsp;&nbsp; ''' &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorA"&gt;颜色A&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;param name="pColorB"&gt;颜色B&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp; ''' &lt;remarks&gt;平方容差法&lt;/remarks&gt;</strong></span><br />
&nbsp;&nbsp;&nbsp; Public Function ColorRGBComp(ByRef pColorA As Color, ByRef pColorB As Color) As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获得两个ColorRGB的色差。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tOutValue As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tAbsR As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tAbsG As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tAbsB As Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tAbsR = Math.Abs(CLng(pColorA.R) - CLng(pColorB.R))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tAbsG = Math.Abs(CLng(pColorA.G) - CLng(pColorB.G))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tAbsB = Math.Abs(CLng(pColorA.B) - CLng(pColorB.B))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tOutValue = Math.Sqrt(tAbsR ^ 2 + tAbsG ^ 2 + tAbsB ^ 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return tOutValue<br />
&nbsp;&nbsp;&nbsp; End Function<br />
&nbsp;</font><font style="color: #ff6600; background-color: #cce8cf" face="Verdana"><strong>#End Region</strong></font></p>
<img src ="http://www.cnblogs.com/wall/aggbug/1213419.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41792/" target="_blank">[新闻]WordPress和Movable Type影响社交网站的未来</a>]]></description></item><item><title>使用API在Scene或Globe中画橡皮条线</title><link>http://www.cnblogs.com/wall/archive/2008/05/28/1209391.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Wed, 28 May 2008 09:50:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/28/1209391.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1209391.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/28/1209391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1209391.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1209391.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf" face="Verdana">在Scene或Globe中绘制橡皮条线的工具，其中wsUtilityBaseTool是我自己封装的基类，<br />
大家只需要把它替换成AE的<font style="background-color: #cce8cf" face="Verdana">BaseTool，把其中相应的代码放在相应的函数中,然后再进行一些简单的修改就好了<br />
附上VB.Net源码<br />
</font><br />
<span style="color: #ff0000">Imports ESRI.ArcGIS.Analyst3D<br />
Imports ESRI.ArcGIS.Carto<br />
Imports ESRI.ArcGIS.Controls<br />
Imports ESRI.ArcGIS.Display<br />
Imports ESRI.ArcGIS.Geometry<br />
Imports ESRI.ArcGIS.GlobeCore<br />
Imports ESRI.ArcGIS.SystemUI<br />
</span></font></p>
<p><font style="background-color: #cce8cf" face="Verdana">Public Class wsSceneDrawLine<br />
&nbsp; Inherits wsUtilityBaseTool</font></p>
<p><span style="color: #33cccc">&nbsp; Private Declare Function Polygon Lib "gdi32" (ByVal hDC As Integer, ByVal lpPoint As Integer, ByVal nCount As Integer) As Integer<br />
&nbsp; Private Declare Function SetCapture Lib "USER32" (ByVal hWnd As Integer) As Integer<br />
&nbsp; Private Declare Function GetCapture Lib "USER32" () As Integer<br />
&nbsp; Private Declare Function ReleaseCapture Lib "USER32" () As Integer<br />
&nbsp; Private Declare Function GetCursorPos Lib "USER32" (ByVal lpPoint As PointAPI) As Integer<br />
&nbsp; Private Declare Function SetCursor Lib "USER32" (ByVal hCursor As Integer) As Integer<br />
&nbsp; Private Declare Function GetClientRect Lib "USER32" (ByVal hWnd As Integer, ByVal lpRect As rect) As Integer<br />
&nbsp; Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Integer, ByVal lpRect As rect) As Integer<br />
&nbsp; Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Integer, ByVal nWidth As Integer, ByVal crColor As Integer) As Integer<br />
&nbsp; Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Integer) As Integer<br />
&nbsp; Private Declare Function GetROP2 Lib "gdi32" (ByVal hDC As Integer) As Integer<br />
&nbsp; Private Declare Function SetROP2 Lib "gdi32" (ByVal hDC As Integer, ByVal nDrawMode As Integer) As Integer<br />
&nbsp; Private Declare Function Rectangle Lib "gdi32" (ByVal hDC As Integer, ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer) As Integer<br />
&nbsp; Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer<br />
&nbsp; Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Integer) As Integer<br />
&nbsp; Private Declare Function Polyline Lib "gdi32" (ByVal hDC As Integer, ByVal lpPoint() As PointAPI, ByVal nCount As Integer) As Integer<br />
&nbsp; Private Declare Function CreatePolygonRgn Lib "gdi32" (ByVal lpPoint As Integer, ByVal nCount As Integer, ByVal nPolyFillMode As Integer) As Integer<br />
&nbsp; Private Structure rect<br />
&nbsp;&nbsp;&nbsp; Dim Left As Integer<br />
&nbsp;&nbsp;&nbsp; Dim Top As Integer<br />
&nbsp;&nbsp;&nbsp; Dim Right As Integer<br />
&nbsp;&nbsp;&nbsp; Dim Bottom As Integer<br />
&nbsp; End Structure<br />
&nbsp; Private Structure PointAPI<br />
&nbsp;&nbsp;&nbsp; Dim x As Integer<br />
&nbsp;&nbsp;&nbsp; Dim y As Integer<br />
&nbsp; End Structure</span></p>
<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #33cccc">&nbsp; Private m_pSceneHookhelper As ISceneHookHelper<br />
&nbsp; Private m_pGlobeHookhelper As IGlobeHookHelper<br />
&nbsp; Private m_bInUse As Boolean<br />
&nbsp; Private m_Pen As Long, m_Brush As Long<br />
&nbsp; Private m_lDrawMode As Long<br />
&nbsp; Private m_pUserLine As IPointCollection<br />
&nbsp; Private m_pGeoLine As IPointCollection<br />
&nbsp; Private m_MovePoint_Old As IPoint '当前点<br />
&nbsp; Private m_pScene As IScene<br />
&nbsp; Private m_pSceneViewer As ISceneViewer<br />
</span>&nbsp;&nbsp;<br />
<span style="color: #993300">&nbsp; Public Sub New()<br />
&nbsp;&nbsp;&nbsp; MyBase.New()<br />
&nbsp;&nbsp;&nbsp; MyBase.Tool = New ControlsScenePanTool<br />
&nbsp;&nbsp;&nbsp; MyBase.m_Caption = "画线"<br />
&nbsp;&nbsp;&nbsp; MyBase.m_ToolTip = "画线"<br />
&nbsp;&nbsp;&nbsp; MyBase.m_Name = "画线"<br />
&nbsp;&nbsp;&nbsp; MyBase.m_Message = "画线"<br />
&nbsp;&nbsp;&nbsp; m_pSceneHookHelper = New SceneHookHelper<br />
&nbsp; End Sub</span></font></p>
<p><font style="background-color: #cce8cf" face="Verdana"><span style="color: #333300"><font style="background-color: #cce8cf" face="Verdana">&nbsp; Public Overrides Sub OnCreate(ByVal hook As Object)<br />
&nbsp;&nbsp;&nbsp; m_pSceneHookhelper = New SceneHookHelper<br />
&nbsp;&nbsp;&nbsp; m_pSceneHookhelper.Hook = hook<br />
&nbsp;&nbsp;&nbsp; m_pSceneViewer = m_pSceneHookhelper.ActiveViewer<br />
&nbsp;&nbsp;&nbsp; m_pScene = m_pSceneHookhelper.Scene<br />
&nbsp;&nbsp;&nbsp; If m_pScene Is Nothing Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pGlobeHookhelper = New GlobeHookHelper<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pGlobeHookhelper.Hook = hook<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pSceneViewer = m_pGlobeHookhelper.ActiveViewer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pScene = m_pGlobeHookhelper.Globe<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp; End Sub</font></span><br />
<span style="color: #008000">&nbsp; Public Overrides ReadOnly Property Enabled() As Boolean<br />
&nbsp;&nbsp;&nbsp; Get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (m_pSceneHookhelper.Scene Is Nothing) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; End Get<br />
&nbsp; End Property</span></font></p>
<font style="background-color: #cce8cf" face="Verdana">
<p><br />
<span style="color: #0000ff">&nbsp; </span><span style="color: #003366"><span style="color: #0000ff">Public Overrides Sub OnMouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Integer, ByVal Y As Integer)<br />
&nbsp;&nbsp;&nbsp; Dim pGeoPoint As IPoint<br />
&nbsp;&nbsp;&nbsp; pGeoPoint = GetGeoPointByScene(m_pScene, X, Y, m_pUserLine)<br />
&nbsp;&nbsp;&nbsp; If pGeoPoint Is Nothing Then Exit Sub<br />
&nbsp;&nbsp;&nbsp; m_bInUse = True</span></span></p>
<p><span style="color: #003366"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; Dim pStartPoint As IPoint<br />
&nbsp;&nbsp;&nbsp; pStartPoint = New Point<br />
&nbsp;&nbsp;&nbsp; pStartPoint.PutCoords(X, Y)</span></span></p>
<p><span style="color: #003366"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; m_pUserLine.AddPoint(pStartPoint)<br />
&nbsp;&nbsp;&nbsp; m_pGeoLine.AddPoint(pGeoPoint)</span></span></p>
<p><span style="color: #003366"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; m_Pen = CreatePen(0, 2, 0)&nbsp;&nbsp; 'A solid, width of 2 black pen<br />
&nbsp;&nbsp;&nbsp; m_Brush = GetStockObject(5)&nbsp; 'A hollow brush</span></span></p>
<p><span style="color: #003366"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; m_lDrawMode = GetROP2(m_pSceneViewer.hDC)<br />
&nbsp;&nbsp;&nbsp; SelectObject(m_pSceneViewer.hDC, m_Pen)<br />
&nbsp;&nbsp;&nbsp; SelectObject(m_pSceneViewer.hDC, m_Brush)<br />
&nbsp;&nbsp;&nbsp; SetROP2(m_pSceneViewer.hDC, 14)<br />
&nbsp;&nbsp;&nbsp; SetCapture(m_pSceneViewer.hWnd)<br />
&nbsp; End Sub</span></span></p>
<p>&nbsp; <span style="color: #000080">Public Overrides Sub OnMouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Integer, ByVal Y As Integer)<br />
&nbsp;&nbsp;&nbsp; If Not m_bInUse Then Exit Sub<br />
&nbsp;&nbsp;&nbsp; DrawLine(X, Y)<br />
&nbsp; End Sub</span></p>
<p>&nbsp;<span style="color: #ffff00"> Public Overrides Sub OnMouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Integer, ByVal Y As Integer)</span></p>
<p><span style="color: #ffff00">&nbsp; End Sub</span><br />
&nbsp;<span style="color: #800080">&nbsp;Public Overrides Sub OnClick()<br />
&nbsp;&nbsp;&nbsp; MyBase.OnClick()<br />
&nbsp;&nbsp;&nbsp; 'Not implemented<br />
&nbsp;&nbsp;&nbsp; m_pUserLine = New Polyline<br />
&nbsp;&nbsp;&nbsp; m_pGeoLine = New Polyline<br />
&nbsp; End Sub<br />
</span>&nbsp; <span style="color: #00ccff">Public Overrides Sub OnDblClick()<br />
&nbsp;&nbsp;&nbsp; MyBase.OnDblClick()<br />
&nbsp;&nbsp;&nbsp; If Not m_bInUse Then Exit Sub<br />
&nbsp;&nbsp;&nbsp; If GetCapture = m_pSceneViewer.hWnd Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReleaseCapture()<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; m_MovePoint_Old = Nothing<br />
&nbsp;&nbsp;&nbsp; m_pUserLine = New Polyline<br />
&nbsp;&nbsp;&nbsp; m_pGeoLine = New Polyline<br />
&nbsp;&nbsp;&nbsp; m_pSceneViewer.Redraw(True)</span></p>
<p><span style="color: #00ccff">&nbsp;&nbsp;&nbsp; DeleteObject(m_Pen)<br />
&nbsp;&nbsp;&nbsp; DeleteObject(m_Brush)<br />
&nbsp;&nbsp;&nbsp; SetROP2(m_pSceneViewer.hDC, m_lDrawMode)<br />
&nbsp;&nbsp;&nbsp; m_bInUse = False<br />
&nbsp; End Sub</span><br />
&nbsp;<span style="color: #ff6600">&nbsp;Public Overrides Sub OnKeyDown(ByVal keyCode As Integer, ByVal shift As Integer)<br />
&nbsp;&nbsp;&nbsp; MyBase.OnKeyDown(keyCode, shift)<br />
&nbsp;&nbsp;&nbsp; If m_bInUse = True Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If keyCode = 0 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pSceneViewer.Redraw(True)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_MovePoint_Old = Nothing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pUserLine = New Polyline<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pGeoLine = New Polyline<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'GDI calls to delete pen and brush objects<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeleteObject(m_Pen)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeleteObject(m_Brush)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'GDI call to set device to the original draw mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetROP2(m_pSceneViewer.hDC, m_lDrawMode)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReleaseCapture()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_bInUse = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp; End Sub</span><br />
<span style="color: #ff00ff">&nbsp; Public Sub DrawLine(ByVal x As Long, ByVal y As Long)<br />
&nbsp;&nbsp;&nbsp; Dim pPtNums As Long<br />
&nbsp;&nbsp;&nbsp; pPtNums = m_pUserLine.PointCount<br />
&nbsp;&nbsp;&nbsp; Dim Pts() As PointAPI<br />
&nbsp;&nbsp;&nbsp; ReDim Pts(pPtNums) 'As PointAPI<br />
&nbsp;&nbsp;&nbsp; Dim i As Long<br />
&nbsp;&nbsp;&nbsp; Dim pPoint As IPoint<br />
&nbsp;&nbsp;&nbsp; For i = 0 To pPtNums - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint = m_pUserLine.Point(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pts(i).x = pPoint.X : Pts(i).y = pPoint.Y<br />
&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; If Not m_MovePoint_Old Is Nothing Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pts(pPtNums).x = m_MovePoint_Old.X : Pts(pPtNums).y = m_MovePoint_Old.Y<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Polyline(m_pSceneViewer.hDC, Pts, pPtNums + 1)<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Pts(pPtNums).x = x : Pts(pPtNums).y = y<br />
&nbsp;&nbsp;&nbsp; Polyline(m_pSceneViewer.hDC, Pts, pPtNums + 1)<br />
&nbsp;&nbsp;&nbsp; m_MovePoint_Old = New Point<br />
&nbsp;&nbsp;&nbsp; m_MovePoint_Old.PutCoords(x, y)<br />
&nbsp; End Sub</span>&nbsp; <br />
<span style="color: #99ccff"><span style="color: #ffcc00"><span style="color: #ff99cc"><span style="color: #0000ff">Private Function GetGeoPointByScene(ByVal pScene As IScene, ByVal x As Long, ByVal y As Long, Optional ByVal CheckPointDou As IPointCollection = Nothing) As IPoint</span></span></span></span></p>
<p><span style="color: #99ccff"><span style="color: #ffcc00"><span style="color: #ff99cc"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; Dim i As Long<br />
&nbsp;&nbsp;&nbsp; Dim pPoint As IPoint<br />
&nbsp;&nbsp;&nbsp; If Not CheckPointDou Is Nothing Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To CheckPointDou.PointCount - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoint = CheckPointDou.Point(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If pPoint.X = x And pPoint.Y = y Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return Nothing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; Return LocatePoint(pScene, x, y)<br />
&nbsp; End Function<br />
</span></span></span></span><span style="color: #ff607e">&nbsp; Private Function LocatePoint(ByVal pScene As IScene, ByVal x As Long, ByVal y As Long) As IPoint<br />
&nbsp;&nbsp;&nbsp; If TypeOf pScene Is IGlobe Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pGlobe As IGlobe<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pGlobe = pScene<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return GlobeToPoint(pGlobe.GlobeDisplay, x, y, True)<br />
&nbsp;&nbsp;&nbsp; ElseIf TypeOf pScene Is IScene Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return XYToPoint(pScene.SceneGraph, x, y)<br />
&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return Nothing<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp; End Function</span></p>
<p><span style="color: #00ff00"><span style="color: #ff0000">&nbsp; </span></span><span style="color: #40ff6f"><span style="color: #00ff00"><span style="color: #ff0000">Private Function GlobeToPoint(ByVal pGlobeDisplay As IGlobeDisplay, ByVal dx As Long, ByVal dy As Long, ByVal bMaxResolution As Boolean, Optional ByVal pOffset As Double = 0) As IPoint<br />
&nbsp;&nbsp;&nbsp; On Error GoTo errhandler<br />
&nbsp;&nbsp;&nbsp; Dim pPoint As IPoint = Nothing<br />
&nbsp;&nbsp;&nbsp; Dim objectOwner As stdole.IUnknown = Nothing<br />
&nbsp;&nbsp;&nbsp; Dim objectObject As stdole.IUnknown = Nothing<br />
&nbsp;&nbsp;&nbsp; pGlobeDisplay.Locate(pGlobeDisplay.ActiveViewer, dx, dy, False, True, pPoint, objectOwner, objectObject)<br />
&nbsp;&nbsp;&nbsp; If pPoint Is Nothing Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return Nothing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br />
&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If pPoint.IsEmpty Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return Nothing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; pPoint.Z = pPoint.Z * 1000<br />
&nbsp;&nbsp;&nbsp; Return pPoint<br />
&nbsp;&nbsp;&nbsp; Exit Function</span></span></span></p>
<p><span style="color: #40ff6f"><span style="color: #00ff00"><span style="color: #ff0000">errhandler:<br />
&nbsp; End Function</span></span><br />
</span>&nbsp; <span style="color: #3366ff">Private Function XYToPoint(ByVal pSceneGraph As SceneGraph, ByVal x As Long, ByVal y As Long) As IPoint</span></p>
<p><span style="color: #3366ff">&nbsp;&nbsp;&nbsp; Dim pSG As ISceneGraph<br />
&nbsp;&nbsp;&nbsp; pSG = pSceneGraph<br />
&nbsp;&nbsp;&nbsp; Dim pViewer As ISceneViewer<br />
&nbsp;&nbsp;&nbsp; pViewer = pSG.ActiveViewer<br />
&nbsp;&nbsp;&nbsp; Dim pOwner As stdole.IUnknown = Nothing<br />
&nbsp;&nbsp;&nbsp; Dim pObject As stdole.IUnknown = Nothing<br />
&nbsp;&nbsp;&nbsp; Dim pPoint As IPoint = Nothing<br />
&nbsp;&nbsp;&nbsp; pSG.Locate(pViewer, x, y, esriScenePickMode.esriScenePickGeography, True, pPoint, pOwner, pObject)<br />
&nbsp;&nbsp;&nbsp; pOwner = Nothing<br />
&nbsp;&nbsp;&nbsp; pObject = Nothing<br />
&nbsp;&nbsp;&nbsp; Return pPoint<br />
&nbsp; End Function</span></p>
<p>End Class</font></p>
<img src ="http://www.cnblogs.com/wall/aggbug/1209391.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41791/" target="_blank">[新闻]谷歌平台手机获准上市</a>]]></description></item><item><title>AE中将二维和三维场景导出为图片和图片空间数据文件（附源码）</title><link>http://www.cnblogs.com/wall/archive/2008/05/28/1209193.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Wed, 28 May 2008 06:06:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/28/1209193.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1209193.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/28/1209193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1209193.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1209193.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf" face="Verdana"><font style="background-color: #cce8cf" face="Verdana">AE开发中经常遇到需要将Map、Scene、Globe中的当前场景导出为图片，下面是我总结的导出方法，其中二维的可以导出到内存或硬盘上，还可以导出图片的空间数据文件，三维中只可以导出到硬盘上，附上源码（VB.Net），用法在Summary中写的很详细了，^_^<br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 二维导出当前场景为图片对象(内存中)<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pActiveView"&gt;当前的Activeview&lt;/param&gt;<br />
&nbsp; ''' &lt;returns&gt;Image对象&lt;/returns&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
&nbsp; Public Shared Function ExportToBMP(ByVal pActiveView As IActiveView) As System.Drawing.Image<br />
&nbsp;&nbsp;&nbsp; Dim pResolution As Double = pActiveView.ScreenDisplay.DisplayTransformation.Resolution<br />
&nbsp;&nbsp;&nbsp; Dim pExport As IExport = New ExportBMP<br />
&nbsp;&nbsp;&nbsp; pExport.Resolution = pResolution<br />
&nbsp;&nbsp;&nbsp; Dim deviceRECT As tagRECT = pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame<br />
&nbsp;&nbsp;&nbsp; Dim pDriverBounds As IEnvelope = New Envelope<br />
&nbsp;&nbsp;&nbsp; pDriverBounds.PutCoords(deviceRECT.left, deviceRECT.bottom, deviceRECT.right, deviceRECT.top)<br />
&nbsp;&nbsp;&nbsp; pExport.PixelBounds = pDriverBounds<br />
&nbsp;&nbsp;&nbsp; Dim pCancel As ITrackCancel = New CancelTracker<br />
&nbsp;&nbsp;&nbsp; pActiveView.Output(pExport.StartExporting, pResolution, deviceRECT, pActiveView.Extent, pCancel)<br />
&nbsp;&nbsp;&nbsp; pExport.FinishExporting()<br />
&nbsp;&nbsp;&nbsp; Dim pExportBmp As IExportBMP = pExport<br />
&nbsp;&nbsp;&nbsp; Dim pImage As System.Drawing.Image = System.Drawing.Image.FromHbitmap(pExportBmp.Bitmap)<br />
&nbsp;&nbsp;&nbsp; pExport.Cleanup()<br />
&nbsp;&nbsp;&nbsp; Return pImage<br />
&nbsp; End Function<br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 二维导出当前场景为图片文件(硬盘上)<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pFilePath"&gt;图片全路径&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pExportPic"&gt;图片格式的对象(形如IExportBMP)&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pActiveView"&gt;当前的视图&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pCheckWorldfile"&gt;是否导出图片的空间数据文件（Worldfile）&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="pResolution"&gt;图片分别率，默认值为96&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
&nbsp; Private Sub ExporttoPIC(ByVal pFilePath As String, ByVal pExportPic As IExport, ByVal pActiveView As IActiveView, Optional ByVal pCheckWorldfile As Boolean = False, Optional ByVal pResolution As Double = 0)<br />
&nbsp;&nbsp;&nbsp; If pResolution = 0 Then pResolution = pActiveView.ScreenDisplay.DisplayTransformation.Resolution<br />
&nbsp;&nbsp;&nbsp; Dim pExport As IExport = pExportPic<br />
&nbsp;&nbsp;&nbsp; pExport.ExportFileName = pFilePath<br />
&nbsp;&nbsp;&nbsp; pExport.Resolution = pResolution<br />
&nbsp;&nbsp;&nbsp; Dim deviceRECT As tagRECT = pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame<br />
&nbsp;&nbsp;&nbsp; Dim pDriverBounds As IEnvelope = New Envelope<br />
&nbsp;&nbsp;&nbsp; pDriverBounds.PutCoords(deviceRECT.left, deviceRECT.bottom, deviceRECT.right, deviceRECT.top)<br />
&nbsp;&nbsp;&nbsp; pExport.PixelBounds = pDriverBounds<br />
&nbsp;&nbsp;&nbsp; Dim pCancel As ITrackCancel = New CancelTracker<br />
&nbsp;&nbsp;&nbsp; pActiveView.Output(pExport.StartExporting, pResolution, deviceRECT, pActiveView.Extent, pCancel)<br />
&nbsp;&nbsp;&nbsp; ''导出数据空间文件的语句必须放在StartExporting和FinishExporting之间，否则无效<br />
&nbsp;&nbsp;&nbsp; If TypeOf pExport Is IExportImage Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If pCheckWorldfile Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pWorldFile As IWorldFileSettings = pExport<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWorldFile.OutputWorldFile = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWorldFile.MapExtent = pActiveView.Extent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pWorldFile2 As IWorldFileSettings2 = pExport<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWorldFile2.MapRotation = pActiveView.ScreenDisplay.DisplayTransformation.Rotation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp; pExport.FinishExporting()<br />
&nbsp;&nbsp;&nbsp; pExport.Cleanup()<br />
&nbsp; End Sub<br />
&nbsp; ''' &lt;summary&gt;<br />
&nbsp; ''' 三维导出当前场景为图片文件(硬盘上)<br />
&nbsp; ''' &lt;/summary&gt;<br />
&nbsp; ''' &lt;param name="pFilePath"&gt;图片全路径&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="ExportType"&gt;自定义的一个枚举，表示是Scene还是Globe&lt;/param&gt;<br />
&nbsp; ''' &lt;param name="ImageType"&gt;导出图片的类型BMP或JPEG&lt;/param&gt;<br />
&nbsp; ''' &lt;remarks&gt;&lt;/remarks&gt;<br />
&nbsp; Private Sub ExporttoPIC(ByVal pFilePath As String, ByVal ExportType As wsExportControlType, ByVal ImageType As esri3DOutputImageType)<br />
&nbsp;&nbsp;&nbsp; Select Case ExportType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case wsExportControlType.wsExportScene<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_SceneHookhelper.ActiveViewer.GetScreenShot(ImageType, pFilePath)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case wsExportControlType.wsExportGlobe<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_GlobeHookhelper.ActiveViewer.GetScreenShot(ImageType, pFilePath)<br />
&nbsp;&nbsp;&nbsp; End Select<br />
&nbsp; End Sub<br />
<br />
<br />
附上空间数据格式的说明：<br />
<br />
<p><font style="background-color: #cce8cf" face="Verdana">&nbsp; 第一种格式：<br />
1、X-Scale(一个像元的大小)<br />
2、旋转项<br />
3、旋转项<br />
4、负的Y-Scale(一个像元的大小)<br />
5、转换项，即左上角X坐标<br />
6、转换项，即左上角Y坐标<br />
&nbsp; 第二种格式：<br />
1、地图单元中的一个象素在X方向上的X分辨率尺度<br />
2、平移量<br />
3、旋转量<br />
4、地图单元中的一个象素在Y方向上的Y分辨率尺度的负值<br />
5、象素1，1(左上方)的X地坐标<br />
6、象素1，1(左上方)的Y地坐标<br />
&nbsp; 第三种格式(EN)：<br />
1、pixel X size<br />
2、rotation about the Y axis (usually 0.0)<br />
3、rotation about the X axis (usually 0.0)<br />
4、negative pixel Y size<br />
5、X coordinate of upper left pixel center<br />
6、Y coordinate of upper left pixel center<br />
&nbsp; 第四种格式：<br />
1、行方向每一个删格点多少米<br />
2、X方向旋转角度<br />
3、Y方向旋转角度<br />
4、列方向每一个删格点多少米<br />
5、左上点x坐标<br />
6、左上点y坐标</font></p>
<p><font style="background-color: #cce8cf" face="Verdana">第一种和第三种基本上一样的，第一种说的有点简单了！<br />
一个jgw文件的例子：<br />
0.05410594&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A<br />
0.0000&nbsp; D<br />
0.0000&nbsp;&nbsp; B<br />
-0.05410594&nbsp;&nbsp;&nbsp;&nbsp; E<br />
25.023009 C<br />
102.766439 F<br />
A=X-Scale(一个像元的大小)<br />
E=负的Y-Scale(一个像元的大小)<br />
B,D=旋转项<br />
C,F=转换项，即左上角X坐标与Y坐标<br />
通常用四点来进行影像校正，假设影像没有扭转，即旋转项为0<br />
说明：这个例子所用的坐标系统是WGS84<br />
对于A、B、C和F的计算在网络上有许多说法。有点混乱！<br />
这里简单的说明一下，我采用的计算方法：<br />
1、确定影像的两个角的坐标：<br />
需要确定影像地图文件的左下角坐标和右上角坐标<br />
这里我没有带如具体的数据，以变量来说明问题了<br />
左下角坐标：(x1,y1)<br />
右上角坐标：(x2,y2)<br />
影像地图的像元行数：col<br />
影像地图的像元列数：row<br />
2、确定影像文件的左上角的坐标：<br />
左上角坐标：(x1,y2)<br />
3、确定旋转项：<br />
旋转项一般取0.000000<br />
4、计算x方向与y方向的像元大小：<br />
x方向的像元大小：(x2-x1)/col<br />
y方向的像元大小：(y2-y1)/row*(-1)<br />
5、最后jgw文件的数据就为：<br />
(x2-x1)/col<br />
0.000000<br />
0.000000<br />
(y2-y1)/row*(-1)<br />
x1<br />
y2<br />
注意：本例是基于WGS84坐标系统的！</font></p>
</font></font>
 <img src ="http://www.cnblogs.com/wall/aggbug/1209193.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41791/" target="_blank">[新闻]谷歌平台手机获准上市</a>]]></description></item><item><title>使用ADO.Net分块读写数据库BLOB数据</title><link>http://www.cnblogs.com/wall/archive/2008/05/27/1208569.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 27 May 2008 09:11:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/27/1208569.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1208569.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/27/1208569.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1208569.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1208569.html</trackback:ping><description><![CDATA[摘要:  在ADO中处理大数据量的文件与数据库间的交互用GetChunk和AppendChunk方法，但是在ADO.NET的DataReader 列、DataSet 列、或Command 参数中这两个方法已不可用，本文就来阐述一下ADO.Net对该问题是如何处理的。首先需要指出的是, ADO.Net对SQL和Oracle支持的很好, 对Access就弱一些, 可以用SQL语句ReadText和WriteT&nbsp;&nbsp;<a href='http://www.cnblogs.com/wall/archive/2008/05/27/1208569.html'>阅读全文</a><img src ="http://www.cnblogs.com/wall/aggbug/1208569.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41790/" target="_blank">[新闻]微软自称传媒公司 强调搜索引擎三大趋势</a>]]></description></item><item><title>AE创建各种类型的featureclass代码</title><link>http://www.cnblogs.com/wall/archive/2008/05/20/1203377.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 20 May 2008 06:47:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/20/1203377.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1203377.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/20/1203377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1203377.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1203377.html</trackback:ping><description><![CDATA[摘要:  VB.Net源码 ''' &lt;summary&gt; ''' 创建Annotation类型的featureclass ''' &lt;/summary&gt; ''' &lt;param name="pWorkspace"&gt;annotation的工作空间&lt;/param&gt; ''' &lt;param name="pTextSymbol"&gt;annotation的symbo&nbsp;&nbsp;<a href='http://www.cnblogs.com/wall/archive/2008/05/20/1203377.html'>阅读全文</a><img src ="http://www.cnblogs.com/wall/aggbug/1203377.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41789/" target="_blank">[新闻]亚洲社交网站Friendster将兼容竞争对手窗件</a>]]></description></item><item><title>使用Localizer对象本地化DevExpress控件</title><link>http://www.cnblogs.com/wall/archive/2008/05/13/1195538.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 13 May 2008 09:46:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/13/1195538.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1195538.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/13/1195538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1195538.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1195538.html</trackback:ping><description><![CDATA[摘要: XtraEditors库的运行时界面能够用Localizer的对象来本地化。只有这样做，你必须首先建立一个Localizer 继承类，然后，重写 Localizer.GetLocalizedString方法来调整由editors提供的可视化元素的标题。最后，在必须的Localizer 继承类被建立以后，实例化并且设置它的Localizer.Active属性以便起作用。附上VB.Net源码，DevE&nbsp;&nbsp;<a href='http://www.cnblogs.com/wall/archive/2008/05/13/1195538.html'>阅读全文</a><img src ="http://www.cnblogs.com/wall/aggbug/1195538.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41788/" target="_blank">[新闻]百度宣布服务器全面换装闪存 替代硬盘</a>]]></description></item><item><title>C# 字符串DES加/解密与MD5加密类</title><link>http://www.cnblogs.com/wall/archive/2008/05/13/1195231.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 13 May 2008 07:01:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/13/1195231.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1195231.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/13/1195231.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1195231.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1195231.html</trackback:ping><description><![CDATA[<p>C#源码，用.Net封装的类库写的加密和解密的方法，很容易转换成VB.Net<br />
<br />
using System;<br />
using System.IO;<br />
using System.Windows.Forms;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Security.Cryptography;</p>
<p>namespace MyDes<br />
{<br />
&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; /// DES加/解密与MD5加密<br />
&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; public class My_Des<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 私有属性</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// MD5加密的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string md5Str = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// DES加密的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string encryptStr = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// DES解密的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string decryptStr = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// DES密匙<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string mydesKey = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 返回的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string mydesStr = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 错误信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string messAge = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 公共属性</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// MD5加密字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string MD5Str<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return md5Str; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { md5Str = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// DES加密的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string EncryptStr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return encryptStr; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { encryptStr = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///DES 解密的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string DecryptStr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return decryptStr; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { decryptStr = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// DES密匙<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string MyDesKey<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return mydesKey; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { mydesKey = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 返回的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string MyDesStr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return mydesStr; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { mydesStr = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 错误信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return messAge; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { messAge = value; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 公共方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 执行DES加密<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void DesEncrypt()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] MyStr_E = Encoding.UTF8.GetBytes(this.encryptStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] MyKey_E = Encoding.UTF8.GetBytes(this.mydesKey);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DESCryptoServiceProvider MyDes_E = new DESCryptoServiceProvider();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDes_E.Key = MyKey_E;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDes_E.IV = MyKey_E;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MemoryStream MyMem_E = new MemoryStream();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CryptoStream MyCry_E = new CryptoStream(MyMem_E, MyDes_E.CreateEncryptor(), CryptoStreamMode.Write);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyCry_E.Write(MyStr_E, 0, MyStr_E.Length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyCry_E.FlushFinalBlock();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyCry_E.Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.mydesStr = Convert.ToBase64String(MyMem_E.ToArray());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception Error)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.messAge = "DES加密出错："+Error.Message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 执行DES解密<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void DesDecrypt()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] MyStr_D = Convert.FromBase64String(this.decryptStr);<font color="#ff0000"><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] MyKey_D = Encoding.UTF8.GetBytes(this.mydesKey);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DESCryptoServiceProvider MyDes_D = new DESCryptoServiceProvider();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDes_D.Key = MyKey_D;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDes_D.IV = MyKey_D;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MemoryStream MyMem_D = new MemoryStream();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CryptoStream MyCry_D = new CryptoStream(MyMem_D, MyDes_D.CreateDecryptor(), CryptoStreamMode.Write);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyCry_D.Write(MyStr_D, 0, MyStr_D.Length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyCry_D.FlushFinalBlock();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyCry_D.Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.mydesStr = Encoding.UTF8.GetString(MyMem_D.ToArray());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception Error)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.messAge ="DES解密出错：" +Error.Message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 执行MD5加密<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void MD5JiaMi()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MD5CryptoServiceProvider MyMD5 = new MD5CryptoServiceProvider();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Byte[] MyMD5_Str = MyMD5.ComputeHash(Encoding.UTF8.GetBytes(this.md5Str));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.MyDesStr = Encoding.UTF8.GetString(MyMD5_Str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception Error)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.messAge ="MD5加密出错："+ Error.Message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</p>
 <img src ="http://www.cnblogs.com/wall/aggbug/1195231.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41788/" target="_blank">[新闻]百度宣布服务器全面换装闪存 替代硬盘</a>]]></description></item><item><title>Scenecontrol中滚轮的缩放实现</title><link>http://www.cnblogs.com/wall/archive/2008/05/13/1194378.html</link><dc:creator>王者之魂</dc:creator><author>王者之魂</author><pubDate>Tue, 13 May 2008 00:15:00 GMT</pubDate><guid>http://www.cnblogs.com/wall/archive/2008/05/13/1194378.html</guid><wfw:comment>http://www.cnblogs.com/wall/comments/1194378.html</wfw:comment><comments>http://www.cnblogs.com/wall/archive/2008/05/13/1194378.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wall/comments/commentRss/1194378.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wall/services/trackbacks/1194378.html</trackback:ping><description><![CDATA[<p>(VB.Net源码)<br />
由于Scenecontrol中没有响应滚轮滑动的事件，所以首先得写一个滚轮滑动事件</p>
<p>AxSceneControl1_Wheel</p>
<p>然后，在Load时，添加鼠标滚轮滑动句柄</p>
<p>AddHandler Me.MouseWheel, AddressOf AxSceneControl1_Wheel</p>
<p>这样就将鼠标滚轮滑动与AxSceneControl1_Wheel挂接起来了</p>
<p>然后在AxSceneControl1_Wheel中写入操作语句</p>
<p>&nbsp;&nbsp;&nbsp; Try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pSceLoc As System.Drawing.Point = AxSceneControl1.PointToScreen(Me.AxSceneControl1.Location)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim Pt As System.Drawing.Point = Me.PointToScreen(e.Location)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Pt.X &lt; pSceLoc.X Or Pt.X &gt; pSceLoc.X + AxSceneControl1.Width Or Pt.Y &lt; pSceLoc.Y Or Pt.Y &gt; pSceLoc.Y + AxSceneControl1.Height Then Exit Sub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim scale As Double = 0.2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If e.Delta &lt; 0 Then scale = -0.2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pCamera As ICamera = AxSceneControl1.Camera<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pPtObs As IPoint = pCamera.Observer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim pPtTar As IPoint = pCamera.Target<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPtObs.X += (pPtObs.X - pPtTar.X) * scale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPtObs.Y += (pPtObs.Y - pPtTar.Y) * scale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPtObs.Z += (pPtObs.Z - pPtTar.Z) * scale<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCamera.Observer = pPtObs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AxSceneControl1.SceneGraph.RefreshViewers()<br />
&nbsp;&nbsp;&nbsp; Catch ex As Exception<br />
&nbsp;&nbsp;&nbsp; End Try</p>
<p>这样就可以顺利响应鼠标滚轮滑动的放大与缩小了，Map、Globe中也可以如此实现，其它不支持鼠标滚轮事件的控件也可以这样做</p>
 <img src ="http://www.cnblogs.com/wall/aggbug/1194378.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41788/" target="_blank">[新闻]百度宣布服务器全面换装闪存 替代硬盘</a>]]></description></item></channel></rss>