C#读取shp文件并获取图形保存到sde要素类中(不使用ESRI的类库,纯c#实现)
说明:首先要将sde要素类发布成对应的要素服务,通过对要素服务的操作,实现数据在sde要素类中的增删
//向服务器发出请求
public string getPostData(string postString, string url)
{
string result = "";
try
{
byte[] postData = Encoding.UTF8.GetBytes(postString);
WebClient webClient = new WebClient();
string method = "POST";
//POST Header
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//webClient.Headers.Add("Cache-Control", "no-cache");
//同步提交请求,并返回数据
byte[] responseData = webClient.UploadData(url, method, postData);//得到返回字符流
result = Encoding.UTF8.GetString(responseData);//解码
}
catch
{
return result;
}
return result;
}
#region 用c#直接读取shapfile的过程类
class Point//点类
{
public double X;
public double Y;
}
class Polyline//线类
{
public double[] Box = new double[];
public int NumParts;
public int NumPoints;
public ArrayList Parts; //在部分中第一个点的索引
public ArrayList Points; //所有部分的点
}
class Polygon : Polyline//面类
{ }
#endregion 用c#直接读取shapfile的过程类
//从服务器上读取shp文件流
public Stream GetShpStream(string url)
{
var client = new WebClient();
client.Encoding = Encoding.UTF8;
Uri uri = new Uri(url);
byte[] bytes = client.DownloadData(uri);
Stream pstream = new MemoryStream(bytes);
return pstream;
}
//将读取的shp流拼成符合sde要素类的图形
public static string GetGeometryFromShp(Stream stream, string czah)
{
//int wkid = 2362;//西安80
StringBuilder sb = new StringBuilder("[{");
sb.Append(@"""attributes""" + ":{\"CZAH\":\"" + czah + "\"},");//添加属性信息
sb.Append(@"""geometry""" + ":{");
ArrayList polygons = new ArrayList();//面集合
ArrayList polylines = new ArrayList();//线集合
ArrayList points = new ArrayList();//点集合
int ShapeType;//shp文件类型
double xmin, ymin, xmax, ymax;
//FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);//File.Open(filepath, FileMode.Open)
using (BinaryReader br = new BinaryReader(stream))
{
br.ReadBytes();
int FileLength = br.ReadInt32();//<0代表数据长度未知
int FileBanben = br.ReadInt32();
ShapeType = br.ReadInt32();
xmin = br.ReadDouble();
ymin = br.ReadDouble();
xmax = br.ReadDouble();
ymax = br.ReadDouble();
br.ReadBytes();
if (IsXian80(xmin, ymin, xmax, ymax))
{
if (ShapeType == )
{
polygons.Clear();
while (br.PeekChar() != -)
{
Polygon polygon = new Polygon();
polygon.Parts = new ArrayList();
polygon.Points = new ArrayList();
uint RecordNum = br.ReadUInt32();
int DataLength = br.ReadInt32();
//读取第i个记录
int m = br.ReadInt32();
for (int i = ; i < ; i++)
{
polygon.Box[i] = br.ReadDouble();
} polygon.NumParts = br.ReadInt32();
polygon.NumPoints = br.ReadInt32();
for (int j = ; j < polygon.NumParts; j++)
{
int parts = new int();
parts = br.ReadInt32();
polygon.Parts.Add(parts);
}
for (int j = ; j < polygon.NumPoints; j++)
{
Point pointtemp = new Point();
pointtemp.X = br.ReadDouble();
pointtemp.Y = br.ReadDouble();
polygon.Points.Add(pointtemp);
}
polygons.Add(polygon);
}
foreach (Polygon p in polygons)
{
sb.Append(@"""rings"":[");
for (int i = ; i < p.NumParts; i++)
{
int startpoint;
int endpoint;
if (i == p.NumParts - )
{
startpoint = (int)p.Parts[i];
endpoint = p.NumPoints;
}
else
{
startpoint = (int)p.Parts[i];
endpoint = (int)p.Parts[i + ];
}
sb.Append("[");
for (int k = , j = startpoint; j < endpoint; j++, k++)
{
Point ps = (Point)p.Points[j];
sb.Append("[" + ps.X + "," + ps.Y + "],");
}
sb.Remove(sb.Length - , );
sb.Append("],");
}
sb.Remove(sb.Length - , );
sb.Append("]");
}
}
}
else
{
return "noxian";
}
br.Close();
br.Dispose();
}
sb.Append("}");
sb.Append("}]");
return sb.ToString();
}
//添加要素到sde要素类中(url为发布的要素服务地址)
public bool addFeatureToFeatureClass(string feature, string url)
{
bool isSuccess = false;
url += "/addFeatures";
string postString = "features=" + feature + "";
postString += "&" + "f=json";
string result = getPostData(postString, url);
var result1 = JsonConvert.DeserializeObject<dynamic>(result);
var presult = result1.addResults[].success as IEnumerable<dynamic>;
string strresult = presult.ToString();
if (string.Equals(strresult, "True"))
{
isSuccess = true;
}
return isSuccess;
}
C#读取shp文件并获取图形保存到sde要素类中(不使用ESRI的类库,纯c#实现)的更多相关文章
- GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...
- 使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像
借助VS2013和OpenCV的绘图功能,在工程DICOMReader.sln中实现了对单张.dcm图像的读取与显示,以下是详细步骤. 前期准备工作 编译器:VS2013 库:dcmtk-3.6.0( ...
- 读取properties文件并获取属性值
1.Properties与ResourceBundle 两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时操作相对简单. 2.Propertie ...
- mfc通过MapWinGIS控件读取shp文件(通过#import实现)
在MFC工程中想使用MapWinGIS组件,有多种方法可以实现, 第一种方法,#Import来实现 1.首先注册MapWinGIS ActiveX组件, 2.新建一个单文档工程:MapGis,为控件添 ...
- 将mat文件中的数据按要求保存到txt文档中(批处理)
之前有个老朋友,让帮忙将一个mat中的数据重新保存到txt中,由于数据比较多需要用到批处理,之前弄过很多次,但每次一到要用的时候总是忘记怎么写了,现在记录一下,免得后面老是需要上网搜.这里先说一个比较 ...
- FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...
- PHP操作:将数据库中的数据保存到Word、Excel中。
1.首先要把word.excel表放到文件的根目录下 2.定义了一个word类 <?php class word { function start() { ob_start(); ob_star ...
- GeoTools介绍、环境安装、读取shp文件并显示
GeoTools是一个开放源代码(LGPL)Java代码库,它提供了符合标准的方法来处理地理空间数据,例如实现地理信息系统(GIS).GeoTools库实现了开放地理空间联盟(OGC)规范. Geot ...
- arcgis for android 读取shp文件中文乱码解决方法
设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...
随机推荐
- iOS 远程消息推送,原理和开发详解篇(新手推荐)
1.APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Servic ...
- SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1.SpringMVC中通过@ResponseBody.@RequestParam默认值,@PathVariable的用法 package com.kuman.cartoon.controller.f ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- 使用GDAL将下载的Google卫星图像转为带坐标的tif
网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件.这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就 ...
- Oracle Applications DBA 基础(二)
6.OAM及系统管理 2014年9月13日 20:40 参考资料: 1.Oracle Applications System Administrator's Guide - Configuration ...
- linux下ruby使用tcl/tk编程环境设置
正常情况下最新的ruby都是不带tcl/tk选项编译的,所以我们在运行tcl/tk代码时都会发生找不到tk库的错误.解决办法很简单只要以tcl/tk选项编译ruby即可. 这里以ubuntu 15.0 ...
- LAV Filter 源代码分析 4: LAV Video (2)
上一篇文章分析了LAV Filter 中的LAV Video的两个主要的类:CLAVVideo和CDecodeThread.文章:LAV Filter 源代码分析 3: LAV Video (1) 在 ...
- 初识MySQL数据库的各种CMD命令窗口下的指令
今天我们就来看一下数据库的各种命令,以下命令全部是从CMD命令窗口下的命令行输入指令,首先如果如果输入mysql,系统提示"mysql不是内部命令或外部命令.那么这其实是环境变量没有设置好的 ...
- Which SQL statement is the trump card to the senior software developer
Which SQL statement is the trump card to the senior software developer MA Genfeng ...
- DPDK virtio-user
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. virtio-user 是 DPDK 针对特定场景提出的一种解决方案, ...