NetTopologySuite TransformGeometry का उपयोग करते समय त्रुटि - सी #, .net, gis, nettopologysuite

मैं एक आकृतिफाइल में पढ़ने की कोशिश कर रहा हूं जिसमें यूके नॉर्थिंग / ईस्टिंग समन्वय प्रणाली (ब्रिटिश नेशनलग्रिडोस जीबी 36) अक्षांश / देशांतर (डब्लूजीएस 1 9 84) में है। मुझे एक उत्कृष्ट पोस्ट मिला यहाँ ऐसा करने के लिए NetTopologySuite का उपयोग कैसे करें। आकृतिफाइल का पठन ठीक काम करता है लेकिन लोड के दौरान भूगोल को बदलने पर मुझे समस्याएं मिलती हैं।

मैंने समस्या को नीचे पिन किया हैNetTopologySuite TransformGeometry विधि। यदि मैं डॉटस्पाटियल रिप्रोजेक्ट पॉइंट्स का उपयोग करके एक बिंदु बदलता हूं तो यह सही तरीके से काम करता है (एक बार जब मेरे पास ब्रिटिशNationalGridOSGB36 के लिए सही परिभाषा है, तो देखें यहाँ इस पर उपयोगी पोस्ट के लिए)। हालांकि नेटटोपोलॉजी सूइट की ट्रांसफॉर्म जीमेट्री मुझे गलत जवाब देती है। जवाब दो मामलों में गलत है

  1. इसमें अक्षांश में अक्षांश मान है (-0.0 9 3 9 3303 होना चाहिए)
  2. अक्षांश 181560 है (51.517489 होना चाहिए)

मैं NetTopologySuite का उपयोग करना चाहता हूँट्रांसफॉर्म जीमेट्री क्योंकि यह प्रत्येक समन्वय को अनपिप करने और इसे बदलने से ज्यामिति को बहुत बेहतर तरीके से संभालता है। मुझे यह भी लगता है कि मैंने कुछ डम किया होगा इसलिए मैं इसे ठीक करना और सीखना चाहता हूं।

यहां मेरा एनआईएनआईटी परीक्षण कोड है।

class TestConvert
{
//The standard DotSpatial definition, KnownCoordinateSystems.Projected.NationalGrids.BritishNationalGridOSGB36, is incorrect so needed defined string below
const string BritishNationalGridOsgb36String = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs";

readonly ProjectionInfo _britishNationalGridOsgb36 = ProjectionInfo.FromProj4String(BritishNationalGridOsgb36String);
readonly ProjectionInfo _wgs84 = KnownCoordinateSystems.Geographic.World.WGS1984;

[Test]
public void ConvertAPointUsingDotSpatialReproject()
{
//SETUP
var xy = new double[] { 532248.29992272425, 181560.30052819476 };
var z = new double[] { 0 };

//ATTEMPT
Reproject.ReprojectPoints(xy, z,
_britishNationalGridOsgb36, _wgs84, 0, z.Length);

//VERIFY
xy[0].ShouldEqualWithTolerance(-0.095399303, 0.001);
xy[1].ShouldEqualWithTolerance(51.517489, 0.001);
}


[Test]
public void ConvertAPointUsingNetTopologySuiteTransformGeometry()
{
//SETUP
var factory = NetTopologySuite.Geometries.GeometryFactory.Default;
var pointNatGrid = new NetTopologySuite.Geometries.Point(532248.29992272425, 181560.30052819476);

//ATTEMPT
var transform = new DotSpatialMathTransform(
_britishNationalGridOsgb36, _wgs84);
var result = GeometryTransform.TransformGeometry(
factory, pointNatGrid, transform);

//VERIFY
result.GeometryType.ShouldEqual("Point");
result.Coordinates.Count().ShouldEqual(1);
result.Coordinates[0].X.ShouldEqualWithTolerance(-0.095399303, 0.001);
result.Coordinates[0].Y.ShouldEqualWithTolerance(51.517489, 0.001);
}

}

पहला टेस्ट पास होता है, दूसरा परीक्षण कंधेक्विथ विथोलरेंस परीक्षण दोनों में विफल रहता है।

आपकी सहायता का आभार होगा।

उत्तर:

जवाब के लिए 2 № 1

आगे के शोध पर मुझे एक बग मिलाNetTopologySuite.CoordinateSystems.Transformation.DotSpatial.Projections कोड। मैंने इसकी सूचना दी और अब यह तय हो गया है। मुझे मिली समस्या और विवरण की पुष्टि के लिए यहां देखें कि यह तय किया गया है। http://code.google.com/p/nettopologysuite/issues/detail?id=152


संबंधित सवाल
सबसे लोकप्रिय