json生成shp_ArcGIS Server REST的JSON格式的数据生成SHP文件

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

AccessOperate.cs

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using ESRI.ArcGIS.Geodatabase;

using ESRI.ArcGIS.DataSourcesGDB;

using ESRI.ArcGIS.DataSourcesFile;

using System.Collections;

using ESRI.ArcGIS.Geometry;

using System.Web.Script.Serialization;

using System.IO;

using ESRI.ArcGIS.esriSystem;

using System.Threading;

namespace ArcObjectsLibrary

{

public class AccessOperate

{

public AccessOperate()

{

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

ESRI.ArcGIS.esriSystem.IAoInitialize m_AoInitialize = new ESRI.ArcGIS.esriSystem.AoInitialize();

m_AoInitialize.Initialize(ESRI.ArcGIS.esriSystem.esriLicenseProductCode.esriLicenseProductCodeArcInfo);

}

public IWorkspace OpenAccessWorkspace(string connString)

{

IWorkspace pWorkspace = null;

IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactory();

pWorkspace = pWorkspaceFactory.OpenFromFile(connString, 0);

return pWorkspace;

}

public IWorkspace OpenShapfileWorkspace(string Location)

{

IWorkspace pWorkspace = null;

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();

pWorkspace = pWorkspaceFactory.OpenFromFile(Location, 0);

return pWorkspace;

}

public IWorkspace OpenFileGDBWorkspace(string Location)

{

IWorkspace pWorkspace = null;

IWorkspaceFactory pWorkspaceFactory = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory();

pWorkspace = pWorkspaceFactory.OpenFromFile(Location, 0);

return pWorkspace;

}

public String createSegment(string Location, String segmentRiverArrayString, String sceneId)

{

IWorkspace pWorkspace = OpenFileGDBWorkspace(Location);

IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;

String result = createSegmentAllByCoordinateAccordingRiver2(pFeatureWorkspace, segmentRiverArrayString, sceneId);

return result;

}

public String createSegmentAllByCoordinateAccordingRiver(IFeatureWorkspace pFeatureWorkspace, String segmentRiverArrayString, String sceneId)

{

String result = "successed";

String[] segmentRiverArray = segmentRiverArrayString.Split('|');

IList pPolygonArrayList = new List();

IList codeArrayList = new List();

//Single

IFeatureClass pFeatureClassRiverSinglePolyline = pFeatureWorkspace.OpenFeatureClass("河流单线");

ISpatialFilter pSpatialFilterRiverSinglePolyline = new SpatialFilter();

pSpatialFilterRiverSinglePolyline.GeometryField=(pFeatureClassRiverSinglePolyline.ShapeFieldName);

//Double

IFeatureClass pFeatureClassRiverDoublePolyline = pFeatureWorkspace.OpenFeatureClass("河流边线");

ISpatialFilter pSpatialFilterRiverDoublePolyline = new SpatialFilter();

pSpatialFilterRiverDoublePolyline.GeometryField=(pFeatureClassRiverDoublePolyline.ShapeFieldName);

//Polygon

IFeatureClass pFeatureClassRiverPolygon = pFeatureWorkspace.OpenFeatureClass("河流面");

ISpatialFilter pSpatialFilterRiverPolygon = new SpatialFilter();

pSpatialFilterRiverPolygon.GeometryField=(pFeatureClassRiverPolygon.ShapeFieldName);

//Segment

IFeatureClass pFeatureClassRiverSegment = pFeatureWorkspace.OpenFeatureClass("河流切片");

//

double distanceFromCurve = 0;

Boolean asRatio = false;

Boolean bRightSide = false;

IPoint pPointClosest = new Point();

if (segmentRiverArrayString.Length > 0)

{

for (int riverIndex = 0; riverIndex < segmentRiverArray.Length; ++riverIndex)

{

String segmentRiverString = segmentRiverArray[riverIndex];

String[] segmentRiverInfo = segmentRiverString.Split('$');

String riverCode = segmentRiverInfo[0];

String cordinateCodeArrayString = segmentRiverInfo[1];

String[] cordinateCodeArray = cordinateCodeArrayString.Split(':');

IPoint[] pPointArray = new IPoint[cordinateCodeArray.Length];

double[] lengthArray = new double[cordinateCodeArray.Length];

String[] codeArray = new String[cordinateCodeArray.Length];

IPolygon[] pPolygonArray = new IPolygon[cordinateCodeArray.Length];

for (int index = 0; index < cordinateCodeArray.Length; ++index)

{

String cordinateCodeString = cordinateCodeArray[index];

if (cordinateCodeString.Length > 0)

{

String[] coordinateCode = cordinateCodeString.Split(',');

String code = coordinateCode[0];

codeArray[index] = code;

String coordinateString = coordinateCode[1];

String[] coordinate = coordinateString.Split(' ');

double x = Double.Parse(coordinate[0]);

double y = Double.Parse(coordinate[1]);

IPoint pPoint = new Point();

pPoint.X = (x);

pPoint.Y = (y);

pPointArray[index] = pPoint;

}

}

//Single

pSpatialFilterRiverSinglePolyline.WhereClause=("CODE='" + riverCode + "'");

pSpatialFilterRiverSinglePolyline.SearchOrder=esriSearchOrder.esriSearchOrderAttribute;

IFeatureCursor pFeatureCursorRiverSinglePolyline = pFeatureClassRiverSinglePolyline.Search(pSpatialFilterRiverSinglePolyline, false);

IFeature pFeatureRiverSinglePolyline = pFeatureCursorRiverSinglePolyline.NextFeature();

IPolyline pPolylineSingleRiver = (IPolyline)pFeatureRiverSinglePolyline.Shape;

//Double

pSpatialFilterRiverDoublePolyline.WhereClause = ("CODE='" + riverCode + "'");

pSpatialFilterRiverDoublePolyline.SearchOrder = esriSearchOrder.esriSearchOrderAttribute;

IFeatureCursor pFeatureCursorRiverDoublePolyline = pFeatureClassRiverDoublePolyline.Search(pSpatialFilterRiverDoublePolyline, false);

IFeature pFeatureRiverDoubleOnePolyline = pFeatureCursorRiverDoublePolyline.NextFeature();

IPolyline pPolylineDoubleOneRiver = (IPolyline)pFeatureRiverDoubleOnePolyline.Shape;

IFeature pFeatureRiverDoubleTwoPolyline = pFeatureCursorRiverDoublePolyline.NextFeature();

IPolyline pPolylineDoubleTwoRiver = (IPolyline)pFeatureRiverDoubleTwoPolyline.Shape;

//Polygon

pSpatialFilterRiverPolygon.WhereClause = ("CODE='" + riverCode + "'");

pSpatialFilterRiverPolygon.SearchOrder = esriSearchOrder.esriSearchOrderAttribute;

IFeatureCursor pFeatureCursorRiverPolygon = pFeatureClassRiverPolygon.Search(pSpatialFilterRiverPolygon, false);

IFeature pFeatureRiverPolygon = pFeatureCursorRiverPolygon.NextFeature();

IPolygon pPolygonRiver = (IPolygon)pFeatureRiverPolygon.Shape;

ITopologicalOperator pITopologicalOperator = (ITopologicalOperator)pPolygonRiver;

IRelationalOperator pRelationalOperator2 = (IRelationalOperator)pPolygonRiver;

for (int index = 0; index < pPointArray.Length; ++index)

{

IPoint pPoint = pPointArray[index];

double distanceAlongCurve = 0;

pPolylineSingleRiver.QueryPointAndDistance(0, pPoint, asRatio, pPointClosest, distanceAlongCurve, distanceFromCurve, bRightSide);

lengthArray[index] = distanceAlongCurve;

}

for (int i = 0; i < lengthArray.Length - 1; i++)

{

for (int j = i + 1; j < lengthArray.Length; j++)

{

if (lengthArray[i] > lengthArray[j])

{

double temp = lengthArray[i];

lengthArray[i] = lengthArray[j];

lengthArray[j] = temp;

//

IPoint pPoint = pPointArray[i];

pPointArray[i] = pPointArray[j];

pPointArray[j] = pPoint;

//

String code = codeArray[i];

codeArray[i] = codeArray[j];

codeArray[j] = code;

}

}

}

for (int index = 0; index < pPointArray.Length; ++index)

{

IPoint pPointStart = null;

IPoint pPointEnd = null;

IPoint pPointCurrent = pPointArray[index];

if (index == 0)

{

pPointStart = pPointCurrent;

IPoint pPointNext = pPointArray[index + 1];

pPointEnd = new Point();

pPointEnd.X = ((pPointCurrent.X + pPointNext.X) / 2);

pPointEnd.Y = ((pPointCurrent.Y + pPointNext.Y) / 2);

}

else if (index == pPointArray.Length - 1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值