ARCAMP软件要进行地统计计算的文件后格式后缀名必须为.shp的文件,网上介绍的方法复杂难懂,那么制作.shp的文件怎么制作呢?
1、打开ArcMAP软件,点菜单栏“工具”下拉菜单中的“添加XY数据”,出现“添加XY数据”对话框,添加电子表格数据 “.dbf3”格式文件(参考“用ArcGIS9.3中标出地图中GPS点方法”第3点),点确定,GPS采集点出来了。
2、右单击图层栏刚才“添加XY数据”进来的文件名,出现对话框,选“数据”,出现下拉菜单,选“导出数据”,给这个图层文件命名后存为后缀名为“.shp”文件。这样,一个后缀名为.shp文件制作过程就完成了,下一步就可进行地统计学各种运算了。
以下是网上摘录的.shp文件创建方法:
一、第一种方法
如何创建shp文件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在ArcGIS下,地形图经过配准之后,就需要创建一些shp文件,进行矢量化的工作了。本节探讨一下shp文件的创建过程。
(1)启动ArcCatalog。
可以通过点击ArcMap工具栏上像衣柜的黄颜色的按钮;也可以通过: 开始-〉程序-〉ArcGIS-〉ArcCatalog。
(2)在ArcCatalog中的目录树中,点击要将shp存放的目录,点击右键,弹出快捷菜单-〉new-〉shp。
在Create new shapefile对话框中,输入Name,即shp文件的文件名。
Feature Type:要建立的shp的类型(点、线或者面)。
Spatial Reference:空间参考。比如我们要矢量化的是1w的地形图(如果是西安80),则点击 Edit按钮。
在空间参考属性对话框中,点击Select按钮,选择Projected Coordinate Systems->Gauss Kruger->Xian 1980。然后在xian1980目录下选择对应的投影参数。
至此shp创建了一半。
(3)在shp文件上右键,弹出快捷菜单,选择属性。在属性对话框中点击 fields,就可以创建属性字段了。
这样shp文件就创建完成了,你就可以将shp文件装在在ArcMap中就行矢量化的工作了。
二、第二种方法
根据Excel表格建立Shp文件
三峡大学土木水电学院 肖泽云
根据Excel 表格建立Shp 文件主要是通过Excel 表格中的数值信息,如用于表示点坐标的x值、y值以及一些属性信息,来建立一个shp数据文件,该文件中点的几何位置即为Excel表格中指定的数值,并根据要求添加一些相关的属性信息。具体来讲,整个过程主要包括三个方面:导入Excel 数据表、新建shp 数据文件、添加数据(包括几何数据和属性数据)。下面就以根据Excel表格生成Shp点数据文件为例,来具体介绍整个过程中的各主要部分:
一、导入Excel 数据表
导入Excel 数据表主要有两种方式,一种是通过OleDb 数据源的形式打开Excel表格,还有一种就是以Application的形式通过调用Excel对象来打开表格。由于采用OleDb数据源的形式比较具有通用性,使用这种方式不仅可以打开Excel表格,还可以打开Access数据库、SQL数据库等(具体调用方式稍有差别),下面主要介绍第一种方式:首先,在全局变量中定义数据源连接对象,如下:OleDbConnection oledbcConnection;//Excel连接然后,添加一个菜单项或按钮用于打开Excel 数据表,为其Click()事件添加如下代码:
try
{
OpenFileDialog openDG = new OpenFileDialog();
openDG.Title = "打开Excel表格";
openDG.Filter = "Excel表格(*.xls)|*.xls|CSV格式
(*.csv)|*.csv|所有文件(*.*)|*.*";
openDG.ShowDialog();
string filename;
filename = openDG.FileName;
string strConn
= @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ filename + ";Extended Properties=Excel 8.0";
oledbcConnection = new OleDbConnection(strConn);
oledbcConnection.Open();
DataTable table = new DataTable();
table =
oledbcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new
object[] { null, null, null, "TABLE" });
excelBookComboBoxEx.Items.Clear();
foreach (DataRow dr in table.Rows)
{
excelBookComboBoxEx.Items.Add((String)dr["TABLE_NAME"]);
}
excelBookComboBoxEx.Text =
excelBookComboBoxEx.Items[0].ToString();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
其中,excelBookComboBoxEx 为一个ComboBox 组件,用于显示该Excel 文件中的表名称(一个Excel文件中可能包含有很多表,而且每个表的名称都不一样,且第一个数据表的名称不一定就为“Sheet1”)。为了避免由于Excel文件中不存在该表名而出现错误,利用一个ComboBox 组件将该Excel 文件中所有的表名列出来。其中变量table 中保存了该Excel 表格的所有表格信息,所以“dr["TABLE_NAME"]”即为获取该行中对应的表名。在excelBookComboBoxEx 控件中选择Excel 表格中要打开的Excel 工作表后,通过一个数据库连接命令和前面定义的数据源连接来获得工作表中的数据。添加一个按钮用于确定打开Excel中某个工作表,为其Click()事件添加如下代码:
try
{
string sheetName = excelBookComboBoxEx.Text;
string strCom = @" SELECT * FROM [" + sheetName + "]";
OleDbDataAdapter myCommand = new
OleDbDataAdapter(strCom, oledbcConnection);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "[" + sheetName + "]");
excelDataGridViewX.DataMember = "[" + sheetName + "]";
excelDataGridViewX.DataSource = myDataSet;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
上述代码中,excelDataGridViewX 表示一个数据表格控件用于显示Excel表格中的数据。
二、新建shp 数据文件
由于通过Excel 表格来建立一个Shp 点数据文件,可能会涉及到新建Shp数据文件,所有在此先介绍新建Shp 数据文件的过程。新建一个Form 用于表示创建Shp 文件的界面,设置Form 的Name 属性为“CreateShpFile”,然后在该界面上添加如下图所示控件(红色字体表示该控件的称):现说明一下该窗体中主要的控件,filePathTextBox 控件用于表示文件的路径,saveFileButton控件用于表示保存路径浏览,fileNameTextBox控件用于表示新建的文件名,shpTypeComboBox用于表示新建的数据类型(如Point、Polyline、Polygon 等),创建按钮用于根据设置开始创建新Shp 文件,取消按钮用于取消创建新Shp文件。首先,在全局变量中定义三个变量,如下代码:
private AxMapControl axMapControl;
private string filePath;
private string fileName;
其中,axMapControl表示MapControl控件(主要用于将新建的数据文件添加至地图中),filePath为新建数据文件的路径,fileName 为新建数据文件的名称。更改CreateShpFile 窗体的构造函数为如下:
public CreateShpFile(AxMapControl _axMapControl)
{
axMapControl = _axMapControl;
InitializeComponent();
}
这样在定义CreateShpFile 类时就要求指定MapControl对象。为保存文件路径按钮(saveFileButton)的Click()事件添加如下代码:
private void saveFileButton_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog saveDG = new SaveFileDialog();
saveDG.Title = "新建Shp文件";
saveDG.Filter = "Shp文件(*.shp)|*.shp";
saveDG.ShowDialog();
string saveFilePath = saveDG.FileName;
int i = saveFilePath.LastIndexOf(@"\");
int length = saveFilePath.Length;
filePath =
Microsoft.VisualBasic.Strings.Left(saveFilePath, i+1);
filePathTextBox.Text = filePath;
fileName =
Microsoft.VisualBasic.Strings.Right(saveFilePath, length - i - 1);
fileNameTextBox.Text = fileName;
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
在上述代码中,在保存的全路径名称saveFilePath 通过符号“\”来区分文件路径及文件名。当更改filePathTextBox控件及fileNameTextBox控件中的文字内容时,相应要更改全局变量filePath和fileName,所以为filePathTextBox控件及fileNameTextBox控件的TextChanged()事件添加如下代码:
private void filePathTextBox_TextChanged(object sender,
EventArgs e)
{
filePath = filePathTextBox.Text;
}
private void fileNameTextBox_TextChanged(object sender,
EventArgs e)
{
fileName = fileNameTextBox.Text;
}
创建一个新的Shp 数据文件可以通过IWorkspaceFactory 接口和IFeatureWorkspace接口来实现,如下为“创建”按钮的Click()事件添加的代码:
private void 创建_Click(object sender, EventArgs e)
{
IWorkspaceFactory pShpWksFact = new
ShapefileWorkspaceFactory();
IFeatureWorkspace pFeatWks;
pFeatWks =
(IFeatureWorkspace)pShpWksFact.OpenFromFile(filePath, 0);
const string strShapeFieldName = "Shape";
//定义属性字段
IFields pFields;
IFieldsEdit pFieldsEdit;
pFields = new FieldsClass();
pFieldsEdit = (IFieldsEdit)pFields;
IField pField = new FieldClass();
IFieldEdit pFieldEdit = new FieldClass();
pFieldEdit.Name_2 = strShapeFieldName;
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
pField = (IField)pFieldEdit;
//定义几何属性
IGeometryDef pGeomDef = new GeometryDefClass();
IGeometryDefEdit pGeomDefEdit = new GeometryDefClass();
pGeomDefEdit = (IGeometryDefEdit)pGeomDef;
switch (shpTypeComboBox.Text)
{
case "Point":
pGeomDefEdit.GeometryType_2 =
esriGeometryType.esriGeometryPoint;
break;
case "Polyline":
pGeomDefEdit.GeometryType_2 =
esriGeometryType.esriGeometryPolyline;
break;
case "Polygon":
pGeomDefEdit.GeometryType_2 =
esriGeometryType.esriGeometryPolygon;
break;
case "MultiPoint":
pGeomDefEdit.GeometryType_2 =
esriGeometryType.esriGeometryMultipoint;
break;
case "MultiPatch":
pGeomDefEdit.GeometryType_2 =
esriGeometryType.esriGeometryMultiPatch;
break;
}
pGeomDefEdit.SpatialReference_2 = (ISpatialReference)new
UnknownCoordinateSystem();
pFieldEdit.GeometryDef_2 = pGeomDef;
pFieldsEdit.AddField(pField);
pFields = (IFields)pFieldsEdit;
IFeatureClass pFeatureClass;
pFeatureClass = pFeatWks.CreateFeatureClass(fileName,
pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName,
"");
//添加新建的数据至Map中
axMapControl.AddShapeFile(filePath, fileName);
this.Hide();
}
具体来说,创建Shp文件的过程分为四步:第一步,建立IWorkspaceFactory和IFeatureWorkspace工作空间(根据文件路径);第二步,定义数据的属性字段,默认要为其创建一个名为“Shape”的属性字段用于表示其几何形状,该字段格式esriFieldType.esriFieldTypeGeometry;第三步,定义几何属性,在前面已经指定了Shp数据的类型(点、线、面),在此需要定义其GeometryType并指定空间参考系统,默认为UnknownCoordinateSystem;第四步,在IFeatureWorkspace工作空间中创建Shp数据文件。