Mercurial > postarc > postarc
view Postarc/Postarc/Feature/Point.cs @ 0:1aca3d413885 tip
Initial import of Postarc
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 05 Oct 2012 23:55:06 +0200 |
parents | |
children |
line wrap: on
line source
/* * Postarc * * Author: * Christian Lins <christian.lins@intevation.de> * * Copyright: * Copyright (C) 2012 Intevation GmbH <http://www.intevation.de/> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using ESRI.ArcGIS.Geometry; using NpgsqlTypes; using System.Globalization; using ESRI.ArcGIS.Geodatabase; using System.Diagnostics; using ESRI.ArcGIS.esriSystem; namespace Postarc.Feature { public class Point : IWKTGeometry, IGeometryDef, IPoint, IGeometry, IGeometry2, IGeometry3, IGeometry4, IGeometry5, IClone, IConstructPoint, IConstructPoint2 { protected PointClass point = new PointClass(); public double X { get { return this.point.X; } set { this.point.X = value; } } public double Y { get { return this.point.Y; } set { this.point.Y = Y; } } public double Z { get { return point.Z; } set { this.point.Z = value; } } public Point() { this.point.SpatialReference = FeatureLayer.CreateGeographicSpatialReference(); this.point.PutCoords(0, 0); } public Point(IPoint point) { this.point.SpatialReference = point.SpatialReference; this.point.PutCoords(point.X, point.Y); } /// <summary> /// Compares X, Y, M, Z, ID (in order) of this point with /// otherPoint's respective values. /// </summary> /// <param name="otherPoint"></param> /// <returns> /// 0 if equal, 1 if this point is greater, -1 if smaller /// </returns> public int Compare(IPoint otherPoint) { return this.point.Compare(otherPoint); } public void ConstrainAngle(double constraintAngle, IPoint anchor, bool allowOpposite) { this.point.ConstrainAngle(constraintAngle, anchor, allowOpposite); } public void ConstrainDistance(double constraintRadius, IPoint anchor) { this.point.ConstrainDistance(constraintRadius, anchor); } public esriGeometryDimension Dimension { get { // A point has no dimension return this.point.Dimension; } } /// <summary> /// Creates and returns an envelope of this point. /// </summary> public IEnvelope Envelope { get { return this.point.Envelope; } } public void GeoNormalize() { this.point.GeoNormalize(); } public void GeoNormalizeFromLongitude(double longitude) { this.point.GeoNormalizeFromLongitude(longitude); } public esriGeometryType GeometryType { get { return esriGeometryType.esriGeometryPoint; } } public int ID { get { return this.point.ID; } set { this.point.ID = value; } } public bool IsEmpty { get { return this.point.IsEmpty; } } public double M { get { return this.point.M; } set { this.point.M = value; } } public void Project(ISpatialReference newReferenceSystem) { this.point.Project(newReferenceSystem); } public void PutCoords(double X, double Y) { this.point.X = X; this.point.Y = Y; } public void QueryCoords(out double X, out double Y) { X = this.X; Y = this.Y; } public void SetEmpty() { this.point.X = 0; this.point.Y = 0; } public void SnapToSpatialReference() { this.point.SnapToSpatialReference(); } public ISpatialReference SpatialReference { get { return this.point.SpatialReference; } set { Debug.WriteLine("Point::SpatialReference::set"); this.point.SpatialReference = value; } } public double get_VertexAttribute(esriGeometryAttributes attributeType) { return this.point.get_VertexAttribute(attributeType); } public void set_VertexAttribute(esriGeometryAttributes attributeType, double attributeValue) { this.point.set_VertexAttribute(attributeType, attributeValue); } public string GetWKT() { StringBuilder wkt = new StringBuilder(); wkt.Append("POINT("); wkt.Append(X.ToString("r", CultureInfo.InvariantCulture)); wkt.Append(" "); wkt.Append(Y.ToString("r", CultureInfo.InvariantCulture)); wkt.Append(")"); return wkt.ToString(); } public int AvgNumPoints { get { return 1; } } public int GridCount { get { return 0; } } public bool HasM { get { return false; } } public bool HasZ { get { return false; } } public double get_GridSize(int index) { return 0; } public void SetWKT(string wkt) { wkt = wkt.Split(new char[] { '(', ')' })[1]; string[] wkts = wkt.Split(' '); X = double.Parse(wkts[0]); Y = double.Parse(wkts[1]); } public void QueryEnvelope(IEnvelope outEnvelope) { this.point.QueryEnvelope(outEnvelope); } public IPoint CentroidEx { get { throw new NotImplementedException(); } } public bool Changed { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } public void Project5(ISpatialReference newSpatialReference, int ProjectionHint) { throw new NotImplementedException(); } public void ProjectEx(ISpatialReference newReferenceSystem, esriTransformDirection direction, IGeoTransformation GeoTransformation, bool bAngularDensify, double maxSegmentLength, double maxDeviation) { throw new NotImplementedException(); } public void ProjectEx5(ISpatialReference newReferenceSystem, esriTransformDirection direction, ITransformation transformation, bool bAngularDensify, double maxSegmentLength, double maxDeviation, int ProjectionHint) { throw new NotImplementedException(); } public void QueryWKSEnvelope(out ESRI.ArcGIS.esriSystem.WKSEnvelope e) { throw new NotImplementedException(); } public void Assign(IClone src) { throw new NotImplementedException(); } public IClone Clone() { throw new NotImplementedException(); } public bool IsEqual(IClone other) { throw new NotImplementedException(); } public bool IsIdentical(IClone other) { throw new NotImplementedException(); } public void ConstructAlong(ICurve curve, esriSegmentExtension extension, double distance, bool asRatio) { throw new NotImplementedException(); } public void ConstructAngleBisector(IPoint from, IPoint through, IPoint to, double distance, bool useAcuteAngle) { throw new NotImplementedException(); } public void ConstructAngleDistance(IPoint p, double inAngle, double distance) { throw new NotImplementedException(); } public void ConstructAngleIntersection(IPoint p1, double angle1, IPoint p2, double angle2) { throw new NotImplementedException(); } public void ConstructAverage(IPointCollection Points, esriGeometryAttributes attributeType) { throw new NotImplementedException(); } public void ConstructDeflection(ILine baseLine, double distance, double inAngle) { throw new NotImplementedException(); } public void ConstructDeflectionIntersection(ILine baseLine, double startAngle, double endAngle, bool OnRightSide) { throw new NotImplementedException(); } public void ConstructOffset(ICurve curve, esriSegmentExtension extension, double distance, bool asRatio, double Offset) { throw new NotImplementedException(); } public void ConstructParallel(ISegment Segment, esriSegmentExtension extension, IPoint start, double distance) { throw new NotImplementedException(); } public void ConstructPerpendicular(ISegment @base, esriSegmentExtension extension, IPoint p, double distance, bool bUseLineOrientation) { throw new NotImplementedException(); } public void ConstructThreePointResection(IPoint point1, double angleP1P2, IPoint point2, double angleP2P3, IPoint point3, out double arcAngle) { throw new NotImplementedException(); } } }