页面载入中....
 
     
 
页面载入中....
时 间 记 忆
页面载入中....
最 新 评 论
页面载入中....
专 题 分 类
页面载入中....
最 新 日 志
页面载入中....
最 新 留 言
页面载入中....
搜 索
用 户 登 录
页面载入中....
友 情 连 接
博 客 信 息
页面载入中....


 
 
页面载入中....
   
 
 
[笔记]HtmlAgilityPack你值得拥有
[ 2009-3-7 19:15:00 | By: nilarcs ]
 

今天要解析一个HTML,搞了很多办法似乎都不理想。

用了正则,但是水平有限,描述不够清楚,结果不完美。

后来在别人的留言里看到了HtmlAgilityPack,下来试试,效果很好。

没啥好说的,谁用谁知道:D

http://htmlagilitypack.codeplex.com/

 

 

 
 
 
[笔记]GDAL还真简洁 
[ 2008-8-29 17:07:00 | By: nilarcs ]
 

示例中有个创建栅格的例子,看了看真的是很简洁的。

Gdal.AllRegister();

//获得img的驱动

Driver drv = Gdal.GetDriverByName("HFA");

//设置创建参数,并创建Dataset

string[] options = new string [] {"BLOCKXSIZE=" + bXSize, "BLOCKYSIZE=" + bYSize};

Dataset ds = drv.Create(args[0], w, h, 1, DataType.GDT_Float32, options);

//得到第一波段,也只有一个波段

Band ba = ds.GetRasterBand(1);

//开辟数组存像元值

float  [] buffer = new float  [w * h];

for (int i = 0; i < buffer.Length; i++)

buffer[i] = (i*256/buffer.Length);

//写入该波段

ba.WriteRaster(0, 0, w, h, buffer, w, h, 0, 0);

ba.FlushCache();

ds.FlushCache();

相比之下,AE的概念似乎多了点,要写入值非要用个PixelBlock,还不给写入浮点、长整型等值(也可能是我自己的错误,但就是没写进去)。还弄个Raster对象来扰乱视线,又有什么BandCollection,感觉对象多了点,不看Exploring ArcObjects根本搞不懂这些对象间的关系。GDAL就要简洁多了,这么一个例子似乎就能大致知道要用那些对象,他们关系如何。
 
 
 
[笔记]再次折腾GDAL 
[ 2008-8-29 14:24:00 | By: nilarcs ]
 

前几日用AE来做栅格的处理,发现它除了UCHAR(即BYTE)类型的栅格能写入,其他可容纳更大值的栅格都写不进去,所以就想到了GDAL,同时想用C#来试试。

要折腾还是要先安装。下载必要的软件:GDAL自不必说;SWIG要使用C#封装必须的;Proj在程序运行的时候是需要的,文档里有说。

 

1SWIG下载swigwin包,解压以后就可以了。

2GDAL下载,解压。然后改下nmake.opt,改成自己需要的。我修改了GDAL_HOMEPYDIR(我装了Python)、SWIG(指向刚才swigwin中的swig.exe,如果swig.exepath中,估计也不需要修改)。其他选项看需要了。

3Make GDAL,还是老方法(官网上有):

C:\Program Files\Microsoft Visual Studio\VC98\bin\VCVARS32.BAT
C:\GDAL> nmake /f makefile.vc
C:\GDAL> nmake /f makefile.vc install
C:\GDAL> nmake /f makefile.vc devinstall

可以使用VC6以后的编译器,如果用VC6会遇到一个错误,是__int64转换的问题,那是测试用的代码,直接在源码里注销即可。编译过程中还会在..\frmts\leveller\levellerdataset.cpp里遇到一个错误,即166行的错误。源代码在这里是UNICODE下的一个字符,在我们中文系统编码(CP936)下会显示不正确,导致缺少一个双引号,自己修改下就可以了。如我改为:       { "dd", kPI / 180.0, UNITLABEL_DEGREE },这样一来dll和库文件就全部装好了。

4、编译C#封装。官网上也有,而且很简单。

进入..\swig\csharp目录,然后

C:\GDAL\swig\csharp> nmake /f makefile.vc interface
C:\GDAL\swig\csharp> nmake /f makefile.vc

完了还可以nmake /f makefile.vc install一下。当然还可以测试一下:

C:\GDAL\swig\csharp> nmake /f makefile.vc test

注意:For the proper execution the location of the proj.dll should be available in the PATH.

 

如果没有proj.dll自己编译一下,很简单。

5、设置PATH

如果要用到方便,最好把这些动态链接库GDALProj,以及C#封装的,统统放到PATH下。这样就没什么问题了。

 
 
 
[笔记]栅格数据处理
[ 2008-8-26 12:29:00 | By: nilarcs ]
 

AO中栅格数据处理主要涉及的几个对象是:RasterRasterBandPixelblock。从磁盘文件打开的话,通常是得到RasterDataset,然后是RasterbancCollection,再是Rasterband;当然也可以从RasterDataset得到Raster。从图层文件中一般可以很容易得到Raster

Raster对象最多只能包含3个波段的数据,因此对于需要处理多个波段的数据时,从Raster来做不太方便,应该从RasterBand来逐波段处理数据。Raster可以读取拉伸和重采样后的值,而RasterBand得到RawPixel值。

读写pixel值需要使用PixelBlockPixelBlock对象需要先设定大小,然后分别配空间,最后用于读取。如:

    Dim pPB As IPixelBlock3

    Dim pPnt As IPnt

    Set pPnt = New Pnt

    '设置pixelblock的大小

    pPnt.SetCoords 1, nWidth

    '分配pixelblock

    Dim pRawPixel As IRawPixels

    Set pRawPixel = pRSBandCol.Item(0)

    Set pPB = pRawPixel.CreatePixelBlock(pPnt)

Pnt对象设定大小,然后再分配的时候使用这个对象。这样就可以灵活的控制一次读入多少像素点。

    Dim pOrigin As IPnt

    Set pOrigin = New Pnt

    pOrigin.SetCoords j, 0

    '读取该波段的一行数据

    pRawPixel.Read pOrigin, pPB

读取时以Pnt对象设定起始点,从而确定从何处开始读取像素点。

PixelBlock中读取像素值时,例子中提到用SafeArray,但VB中好像有些问题,可以使用IPixelBlock3中的PixelData来读取,如果要改写,可以用PixelDataByRef

       此外,GDAL中也是以Band为基本处理单位的,思路上大致相似。

 

示例:

Public Sub ReadRaster()

   

On Error GoTo Ex

    Dim pRSWSF As IWorkspaceFactory

    Set pRSWSF = New RasterWorkspaceFactory

   

    Dim pRSW As IRasterWorkspace2

    Set pRSW = pRSWSF.OpenFromFile("f:\土壤适宜性分析", 0)

    '土壤环境_2003.img

   

    Dim pRSD As IRasterDataset

    Set pRSD = pRSW.OpenRasterDataset("土壤环境_2003.img")

   

    '使用CreateDefaultRaster创建的Raster对象只含有3个波段的信息

'    Dim pRS As IRaster

'    Set pRS = pRSD.CreateDefaultRaster

   

    Dim pRSBandCol As IRasterBandCollection

    Set pRSBandCol = pRSD

   

   'MsgBox pRSBandCol.Count

   

    Dim pRSProp As IRasterProps

    Set pRSProp = pRSBandCol.Item(0)

   

    Dim nWidth, nHeight, nPixelType As Integer

    nWidth = pRSProp.Width

    nHeight = pRSProp.Height

    nPixelType = pRSProp.PixelType

   

'    MsgBox pRSProp.Height

'    MsgBox pRSProp.Width

'    MsgBox pRSProp.PixelType

   

   

    Dim pPB As IPixelBlock3

    Dim pPnt As IPnt

    Set pPnt = New Pnt

    '设置pixelblock的大小

    pPnt.SetCoords 1, nWidth

    '创建pixelblock

    Dim pRawPixel As IRawPixels

    Set pRawPixel = pRSBandCol.Item(0)

    Set pPB = pRawPixel.CreatePixelBlock(pPnt)

   

    Dim i, j As Integer

    Dim pOrigin As IPnt

    Set pOrigin = New Pnt

               

    Dim pSafe As Variant

    Dim c As Integer

    Open "c:\Rastervalue.txt" For Output As #1

        

    Dim strTemp As String

    Print #1, Now

    '依次读出每个波段的一行,然后输出到文件中

'    For i = 0 To pRSBandCol.Count - 1

'        Set pRawPixel = pRSBandCol.Item(0)

'        For j = 0 To nHeight

'            pOrigin.SetCoords j, 0

'

'            '读取该波段的一行数据

'            pRawPixel.Read pOrigin, pPB

'            pSafe = pPB.PixelData(0)

'

'            strTemp = ""

'            For c = 0 To nWidth - 1

'                strTemp = strTemp & pSafe(0, c) & vbTab

'            Next c

'            Print #1, strTemp

'

'        Next j

       

       

       

'       读入整个数据

'            pOrigin.SetCoords 0, 0

'

'            '读取该波段的一行数据

'            pRawPixel.Read pOrigin, pPB

'            pSafe = pPB.PixelData(0)

'

'            For j = 0 To nHeight - 1

'                strTemp = ""

'                For c = 0 To nWidth - 1

'                    strTemp = strTemp & pSafe(j, c) & vbTab

'                Next c

'                Print #1, strTemp

'            Next j

           

 

'        Print #1, ""

'        Print #1, ""

'    Next i

   

'换一种读取方式,每波段读取一行

    For j = 0 To nHeight

 

        For i = 0 To pRSBandCol.Count - 1

            Set pRawPixel = pRSBandCol.Item(0)

            pOrigin.SetCoords j, 0

 

            '读取该波段的一行数据

            pRawPixel.Read pOrigin, pPB

            pSafe = pPB.PixelData(0)

 

            strTemp = ""

            For c = 0 To nWidth - 1

                strTemp = strTemp & pSafe(0, c) & vbTab

            Next c

            Print #1, strTemp

 

        Next i

   

    Next j

    Print #1, Now

    Close

    MsgBox "OK"

    Exit Sub

Ex:

   

    MsgBox Err.Description

    Close

   

End Sub

 
 
 
[C++]编译错误syntax error : missing ';' before 'type'原因探寻[转]
[ 2008-8-3 21:16:00 | By: nilarcs ]
 

发指的错误!偏偏我就遇到了。

http://hi.baidu.com/sadgod/blog/item/0cc1da0002a3d384e850cd29.html

在VC6中运行以下代码
////////////////////////////////
//main.c

#i nclude <stdio.h>

int main()
{
char a[100];
memset(&a, 0, 100);
char b;

return 0;
}

/////////////////////////////////
编译器将会报一个编译错误,
syntax error : missing ';' before 'type'
这个错误出在

char b;

这一行。
然后将程序改为
////////////////////////////////
//main.c

#i nclude <stdio.h>

int main()
{
char a[100];
char b;
memset(&a, 0, 100);

return 0;
}

/////////////////////////////////

程序就会顺利通过编译。

经过测试发现
在VC中编译c程序,在一个大括号括起的范围内,如果变量声明放在了函数调用的后面,那么编译的时候就会报错:
syntax error : missing ';' before 'type'

然后你可以修改为把变量声明放在函数调用之前。就会顺利通过编译。

这个问题在vc编译c++程序,或者gcc编译c程序的时候都不会出现,仅仅在vc编译c程序的时候才会出现。

---------------------------------------------------------------------------------------------------

鄙视一下VC6编译器。

 

 
 
 
[转载].net中修饰符的问题【转】 
[ 2008-7-24 18:27:00 | By: nilarcs ]
 

http://www.cnblogs.com/jackhuclan/archive/2008/04/21/1163557.html

class前无修饰符(默认修饰符),在本命名空间可以访问
public class 其他程序集内也可以访问
internal class 本程序集内访问

对成员方法
方法前无修饰符(默认修饰符),本文件访问
public ,程序集内外都可以访问
internal protected 本程序集内+子类都可以访问
protected 子类访问
private 自己才可以访问

1.声明命名空间、类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集。

2.声明类成员(包括字段(变量)、属性和方法)默认为private)以及结构类型,前面不加限制访问修饰符时,默认访问权限为private——访问仅限于当前类。

3.声明枚举类型以及接口类型,前面不加限制访问修饰符时,默认为public且只能为public(就算要把限制访问修饰符写出来,也只能写public,而不能使用其他限制访问修饰符)——访问不受限制。


简单地说
1)你想要类库中的类及方法在程序集外部使用,则声明为public,
2)如果为程序集内部非子类使用声明为pubic或internal
3)如果仅程序集内部子类使用,声明为protected
4)如果为程序集内部子类和非子类都可以使用,声明为internal protected
5)如果成员方法和变量只有自己使用,默认或private

==========================================================================================

通常情况下,默认的总是向安全的方向走。类默认internal,类成员则是private了。

 

 
 
 
[转载]网线的制作
[ 2008-7-24 18:25:00 | By: nilarcs ]
 

http://www.enet.com.cn/article/2004/0607/A20040607314853.shtml

568A标准:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕
568B标准:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕

交叉网线用于ADSL MODEM和集线器HUB的连接(与MODEM设计有关系,并非全部如此),HUB与HUB之间不通过级连口的连接,以及两台计算机直接通过网卡相互连接。制作方法和上面基本相同,只是在线序上不像568B,采用了1-3,2-6交换的方式,也就是一头使用568B制作,另外一头使用568A制作
直通线与交叉线的区别

正线,即直通线 ,标准568B):两端线序一样,从左至右线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。

反线,即交叉线 ,(568A):一端为正线的线序,另一端为从左至右:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕。

以下是各种设备的连接情况下,正线和反线的正确选择。其中HUB代表集线器,SWITCH代表交换机,ROUTER代表路由器:

PC-PC:反线

PC-HUB:正线

HUB-HUB普通口:反线

HUB-HUB级连口-级连口:反线

HUB-HUB普通口-级连口:正线

HUB-SWITCH:反线

HUB(级联口)-SWITCH:正线

SWITCH-SWITCH:反线

SWITCH-ROUTER:正线

ROUTER-ROUTER:反线

100BaseT连接双绞线,以100Mb/S的EIA/TIA 568B作为标准规格。

===========================================================================================

http://www.xker.com/Html/wlyy/zwjs/2006_03_09_11_432.html

双绞线在网络中的接线标准有以下几种:

  (1)一一对应接法。即双绞线的两端芯线要一一对应,即如果一端的第1脚为绿色,另一端的第1脚也必须为绿色的芯线,这样做出来的双绞线通常称之为“直连线”。但要注意的是4个芯线对通常不分开,即芯线对的两条芯线通常为相邻排列,这个,由于太简单且随意,图上未标出。

  这种网线一般是用在集线器或交换机与计算机之间的连接。

  (2)1-3、2-6交叉接法。虽然双绞线有4对8条芯线,但实际上在网络中只用到了其中的4条,即水晶头的第1、第2和第3、第6脚,它们分别起着收、发信号的作用。这种交叉网线的芯线排列规则是:网线一端的第1脚连另一端的第3脚,网线一端的第2脚连另一头的第6脚,其他脚一一对应即可。这种排列做出来的通常称之为“交叉线.

例如,当线的一端从左到右的芯线顺序依次为:
白绿、绿、白橙、蓝、白蓝、橙、白棕、棕时,
另一端从左到右的芯线顺序则应当依次为:
白橙、橙、白绿、蓝、白蓝、绿、白棕、棕。

这种网线一般用在集线器(交换机)的级连、服务器与集线器(交换机)的连接、对等网计算机的直接连接等情况下。经常用于两台电脑直接互连传送数据!

  (3)100M接法。这是一种最常用的网线制作规则。所谓100M接法,是指它能满足100M带宽的通讯速率。它的接法虽然也是一一对应,但每一脚的颜色是固定的,

具体是:第1脚——橙白、第2脚——橙色、第3脚——绿白、第4脚——蓝色、第5脚——蓝白、第6脚——绿色、第7脚——棕白、第8脚——棕色,

从中可以看出,网线的4对芯线并不全都是相邻排列,第3脚、第4脚、第5脚和第6脚包括2对芯线,但是顺序已错乱。

这种接线方法也是应用于集线器(交换机)与工作站计算机之间的连接,也就是“直连线”所应用的范围。

 

-------------------------------------------------------------------------------

常用的也就是568B直连,扩展交换机似乎该用交叉线了。

 
 
 
[随笔]测试博讯
[ 2008-7-23 15:49:00 | By: nilarcs ]
 
试试博讯的离线编辑和发布功能。

似乎还可以,设置一下,很好用:)
 
 
 
[转载]本土化的G-FOX
[ 2008-7-23 15:17:00 | By: nilarcs ]
 

http://blog.mozilla.com/chinacommunity/archives/32

看起来还是挺不错的 

 

 

 
 
 
[笔记]SDE数据转移和恢复的一些问题 
[ 2008-6-21 13:53:00 | By: nilarcs ]
 

名称不同步和ADMIN_DATABASE没指定
http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&d=29575

名称不一致:
http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&d=29570


……
 
 
首页 上一页 下一页 尾页 页次:1/8页  10篇日志/页 转到:
 
     
   
     
Powered by Oblog.