本文整理汇总了C#中Spatial4n.Core.Context.SpatialContext.GetWorldBounds方法的典型用法代码示例。如果您正苦于以下问题:C# SpatialContext.GetWorldBounds方法的具体用法?C# SpatialContext.GetWorldBounds怎么用?C# SpatialContext.GetWorldBounds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Spatial4n.Core.Context.SpatialContext
的用法示例。
在下文中一共展示了SpatialContext.GetWorldBounds方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GeohashPrefixTree
public GeohashPrefixTree(SpatialContext ctx, int maxLevels)
: base(ctx, maxLevels)
{
Rectangle bounds = ctx.GetWorldBounds();
if (bounds.GetMinX() != -180)
throw new ArgumentException("Geohash only supports lat-lon world bounds. Got " + bounds);
int MAXP = GetMaxLevelsPossible();
if (maxLevels <= 0 || maxLevels > MAXP)
throw new ArgumentException("maxLen must be [1-" + MAXP + "] but got " + maxLevels);
}
示例2: CalcBoxByDistFromPtDEG
public static Rectangle CalcBoxByDistFromPtDEG(double lat, double lon, double distance, SpatialContext ctx)
{
//See http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates Section 3.1, 3.2 and 3.3
double radius = ctx.GetUnits().EarthRadius();
double dist_deg = Dist2Degrees(distance, radius);
if (dist_deg == 0)
return ctx.MakeRect(lon, lon, lat, lat);//essentially a point
if (dist_deg >= 180)//distance is >= opposite side of the globe
return ctx.GetWorldBounds();
//--calc latitude bounds
double latN_deg = lat + dist_deg;
double latS_deg = lat - dist_deg;
if (latN_deg >= 90 || latS_deg <= -90)
{//touches either pole
//we have special logic for longitude
double lonW_deg = -180, lonE_deg = 180;//world wrap: 360 deg
if (latN_deg <= 90 && latS_deg >= -90)
{//doesn't pass either pole: 180 deg
lonW_deg = lon - 90;
lonE_deg = lon + 90;
}
if (latN_deg > 90)
latN_deg = 90;
if (latS_deg < -90)
latS_deg = -90;
return ctx.MakeRect(lonW_deg, lonE_deg, latS_deg, latN_deg);
}
else
{
//--calc longitude bounds
double lon_delta_deg = CalcBoxByDistFromPt_deltaLonDEG(lat, lon, distance, radius);
double lonW_deg = lon - lon_delta_deg;
double lonE_deg = lon + lon_delta_deg;
return ctx.MakeRect(lonW_deg, lonE_deg, latS_deg, latN_deg);//ctx will normalize longitude
}
}
示例3: QuadPrefixTree
public QuadPrefixTree(SpatialContext ctx, int maxLevels)
: this(ctx, ctx.GetWorldBounds(), maxLevels)
{
}
示例4: TestGeoCircle
public void TestGeoCircle(SpatialContext ctx)
{
base.ctx = ctx;
Assert.Equal("Circle(Pt(x=10.0,y=20.0), d=30.0° 3335.85km)", ctx.MakeCircle(10, 20, 30).ToString());
double v = 200 * (random.NextDouble() > 0.5 ? -1 : 1);
Assert.Throws<InvalidShapeException>(() => ctx.MakeCircle(v,0,5));
Assert.Throws<InvalidShapeException>(() => ctx.MakeCircle(0, v, 5));
Assert.Throws<InvalidShapeException>(() => ctx.MakeCircle(random.Next(-180, 180), random.Next(-90, 90), v));
//--Start with some static tests that once failed:
//Bug: numeric edge at pole, fails to init
ctx.MakeCircle(110, -12, 90 + 12);
//Bug: horizXAxis not in enclosing rectangle, assertion
ctx.MakeCircle(-44, 16, 106);
ctx.MakeCircle(-36, -76, 14);
ctx.MakeCircle(107, 82, 172);
// TODO need to update this test to be valid
//{
// //Bug in which distance was being confused as being in the same coordinate system as x,y.
// double distDeltaToPole = 0.001;//1m
// double distDeltaToPoleDEG = ctx.getDistCalc().distanceToDegrees(distDeltaToPole);
// double dist = 1;//1km
// double distDEG = ctx.getDistCalc().distanceToDegrees(dist);
// Circle c = ctx.makeCircle(0, 90 - distDeltaToPoleDEG - distDEG, dist);
// Rectangle cBBox = c.getBoundingBox();
// Rectangle r = ctx.makeRect(cBBox.getMaxX() * 0.99, cBBox.getMaxX() + 1, c.getCenter().getY(), c.getCenter().getY());
// assertEquals(INTERSECTS, c.getBoundingBox().relate(r, ctx));
// assertEquals("dist != xy space", INTERSECTS, c.relate(r, ctx));//once failed here
//}
assertEquals("edge rounding issue 2", SpatialRelation.INTERSECTS, ctx.MakeCircle(84, -40, 136).Relate(ctx.MakeRectangle(-150, -80, 34, 84)));
assertEquals("edge rounding issue", SpatialRelation.CONTAINS, ctx.MakeCircle(0, 66, 156).Relate(ctx.MakePoint(0, -90)));
assertEquals("nudge back circle", SpatialRelation.CONTAINS, ctx.MakeCircle(-150, -90, 122).Relate(ctx.MakeRectangle(0, -132, 32, 32)));
assertEquals("wrong estimate", SpatialRelation.DISJOINT, ctx.MakeCircle(-166, 59, kmToDeg(5226.2)).Relate(ctx.MakeRectangle(36, 66, 23, 23)));
assertEquals("bad CONTAINS (dateline)", SpatialRelation.INTERSECTS, ctx.MakeCircle(56, -50, kmToDeg(12231.5)).Relate(ctx.MakeRectangle(108, 26, 39, 48)));
assertEquals("bad CONTAINS (backwrap2)", SpatialRelation.INTERSECTS,
ctx.MakeCircle(112, -3, 91).Relate(ctx.MakeRectangle(-163, 29, -38, 10)));
assertEquals("bad CONTAINS (r x-wrap)", SpatialRelation.INTERSECTS,
ctx.MakeCircle(-139, 47, 80).Relate(ctx.MakeRectangle(-180, 180, -3, 12)));
assertEquals("bad CONTAINS (pwrap)", SpatialRelation.INTERSECTS,
ctx.MakeCircle(-139, 47, 80).Relate(ctx.MakeRectangle(-180, 179, -3, 12)));
assertEquals("no-dist 1", SpatialRelation.WITHIN,
ctx.MakeCircle(135, 21, 0).Relate(ctx.MakeRectangle(-103, -154, -47, 52)));
assertEquals("bbox <= >= -90 bug", SpatialRelation.CONTAINS,
ctx.MakeCircle(-64, -84, 124).Relate(ctx.MakeRectangle(-96, 96, -10, -10)));
//The horizontal axis line of a geo circle doesn't necessarily pass through c's ctr.
assertEquals("c's horiz axis doesn't pass through ctr", SpatialRelation.INTERSECTS,
ctx.MakeCircle(71, -44, 40).Relate(ctx.MakeRectangle(15, 27, -62, -34)));
assertEquals("pole boundary", SpatialRelation.INTERSECTS,
ctx.MakeCircle(-100, -12, 102).Relate(ctx.MakeRectangle(143, 175, 4, 32)));
assertEquals("full circle assert", SpatialRelation.CONTAINS,
ctx.MakeCircle(-64, 32, 180).Relate(ctx.MakeRectangle(47, 47, -14, 90)));
//--Now proceed with systematic testing:
assertEquals(ctx.GetWorldBounds(), ctx.MakeCircle(0, 0, 180).GetBoundingBox());
//assertEquals(ctx.makeCircle(0,0,distToOpposeSide/2 - 500).getBoundingBox());
double[] theXs = new double[] { -180, -45, 90 };
foreach (double x in theXs)
{
double[] theYs = new double[] { -90, -45, 0, 45, 90 };
foreach (double y in theYs)
{
TestCircle(x, y, 0);
TestCircle(x, y, kmToDeg(500));
TestCircle(x, y, 90);
TestCircle(x, y, 180);
}
}
TestCircleIntersect();
}
示例5: TestGeoRectangle
public void TestGeoRectangle(SpatialContext ctx)
{
base.ctx = ctx;
double v = 200 * (random.NextDouble() > 0.5 ? -1 : 1);
Assert.Throws<InvalidShapeException>(() => ctx.MakeRectangle(v,0,0,0));
Assert.Throws<InvalidShapeException>(() => ctx.MakeRectangle(0,v,0,0));
Assert.Throws<InvalidShapeException>(() => ctx.MakeRectangle(0,0,v,0));
Assert.Throws<InvalidShapeException>(() => ctx.MakeRectangle(0,0,0,v));
Assert.Throws<InvalidShapeException>(() => ctx.MakeRectangle(0, 0, 10, -10));
//test some relateXRange
// opposite +/- 180
Assert.Equal(SpatialRelation.INTERSECTS, ctx.MakeRectangle(170, 180, 0, 0).RelateXRange(-180, -170));
Assert.Equal(SpatialRelation.INTERSECTS, ctx.MakeRectangle(-90, -45, 0, 0).RelateXRange(-45, -135));
Assert.Equal(SpatialRelation.CONTAINS, ctx.GetWorldBounds().RelateXRange(-90, -135));
//point on edge at dateline using opposite +/- 180
Assert.Equal(SpatialRelation.CONTAINS, ctx.MakeRectangle(170, 180, 0, 0).Relate(ctx.MakePoint(-180, 0)));
//test 180 becomes -180 for non-zero width rectangle
Assert.Equal(ctx.MakeRectangle(-180, -170, 0, 0), ctx.MakeRectangle(180, -170, 0, 0));
Assert.Equal(ctx.MakeRectangle(170, 180, 0, 0), ctx.MakeRectangle(170, -180, 0, 0));
double[] lons = new double[] { 0, 45, 160, 180, -45, -175, -180 }; //minX
foreach (double lon in lons)
{
double[] lonWs = new double[] { 0, 20, 180, 200, 355, 360 }; //width
foreach (double lonW in lonWs)
{
if (lonW == 360 && lon != -180)
continue;
TestRectangle(lon, lonW, 0, 0);
TestRectangle(lon, lonW, -10, 10);
TestRectangle(lon, lonW, 80, 10); //polar cap
TestRectangle(lon, lonW, -90, 180); //full lat range
}
}
TestShapes2D.testCircleReset(ctx);
//Test geo rectangle intersections
testRectIntersect();
}
示例6: QuadPrefixTree
public QuadPrefixTree(SpatialContext ctx, int maxLevels)
: base(ctx, maxLevels)
{
Init(ctx, ctx.GetWorldBounds(), maxLevels);
}
示例7: TestGeoCircle
public void TestGeoCircle(SpatialContext ctx)
{
base.ctx = ctx;
//--Start with some static tests that once failed:
//Bug: numeric edge at pole, fails to init
ctx.MakeCircle(110, -12, ctx.GetDistCalc().DegreesToDistance(90 + 12));
//Bug: horizXAxis not in enclosing rectangle, assertion
ctx.MakeCircle(-44, 16, DegToDist(106));
ctx.MakeCircle(-36, -76, DegToDist(14));
ctx.MakeCircle(107, 82, DegToDist(172));
// TODO need to update this test to be valid
//{
// //Bug in which distance was being confused as being in the same coordinate system as x,y.
// double distDeltaToPole = 0.001;//1m
// double distDeltaToPoleDEG = ctx.getDistCalc().distanceToDegrees(distDeltaToPole);
// double dist = 1;//1km
// double distDEG = ctx.getDistCalc().distanceToDegrees(dist);
// Circle c = ctx.makeCircle(0, 90 - distDeltaToPoleDEG - distDEG, dist);
// Rectangle cBBox = c.getBoundingBox();
// Rectangle r = ctx.makeRect(cBBox.getMaxX() * 0.99, cBBox.getMaxX() + 1, c.getCenter().getY(), c.getCenter().getY());
// assertEquals(INTERSECTS, c.getBoundingBox().relate(r, ctx));
// assertEquals("dist != xy space", INTERSECTS, c.relate(r, ctx));//once failed here
//}
Assert.Equal(/*"nudge back circle", */ SpatialRelation.CONTAINS, ctx.MakeCircle(-150, -90, DegToDist(122)).Relate(ctx.MakeRect(0, -132, 32, 32), ctx));
Assert.Equal(/* "wrong estimate", */ SpatialRelation.DISJOINT, ctx.MakeCircle(-166, 59, 5226.2).Relate(ctx.MakeRect(36, 66, 23, 23), ctx));
Assert.Equal(/*"bad CONTAINS (dateline)",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(56, -50, 12231.5).Relate(ctx.MakeRect(108, 26, 39, 48), ctx));
Assert.Equal(/*"bad CONTAINS (backwrap2)",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(112, -3, DegToDist(91)).Relate(ctx.MakeRect(-163, 29, -38, 10), ctx));
Assert.Equal(/*"bad CONTAINS (r x-wrap)",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(-139, 47, DegToDist(80)).Relate(ctx.MakeRect(-180, 180, -3, 12), ctx));
Assert.Equal(/*"bad CONTAINS (pwrap)",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(-139, 47, DegToDist(80)).Relate(ctx.MakeRect(-180, 179, -3, 12), ctx));
Assert.Equal(/*"no-dist 1",*/ SpatialRelation.WITHIN,
ctx.MakeCircle(135, 21, 0).Relate(ctx.MakeRect(-103, -154, -47, 52), ctx));
Assert.Equal(/*"bbox <= >= -90 bug",*/ SpatialRelation.CONTAINS,
ctx.MakeCircle(-64, -84, DegToDist(124)).Relate(ctx.MakeRect(-96, 96, -10, -10), ctx));
//The horizontal axis line of a geo circle doesn't necessarily pass through c's ctr.
Assert.Equal(/*"c's horiz axis doesn't pass through ctr",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(71, -44, DegToDist(40)).Relate(ctx.MakeRect(15, 27, -62, -34), ctx));
Assert.Equal(/*"pole boundary",*/ SpatialRelation.INTERSECTS,
ctx.MakeCircle(-100, -12, DegToDist(102)).Relate(ctx.MakeRect(143, 175, 4, 32), ctx));
Assert.Equal(/*"full circle assert",*/ SpatialRelation.CONTAINS,
ctx.MakeCircle(-64, 32, DegToDist(180)).Relate(ctx.MakeRect(47, 47, -14, 90), ctx));
//--Now proceed with systematic testing:
double distToOpposeSide = ctx.GetUnits().EarthRadius() * Math.PI;
Assert.Equal(ctx.GetWorldBounds(), ctx.MakeCircle(0, 0, distToOpposeSide).GetBoundingBox());
//assertEquals(ctx.makeCircle(0,0,distToOpposeSide/2 - 500).getBoundingBox());
double[] theXs = new double[] { -180, -45, 90 };
foreach (double x in theXs)
{
double[] theYs = new double[] { -90, -45, 0, 45, 90 };
foreach (double y in theYs)
{
TestCircle(x, y, 0);
TestCircle(x, y, 500);
TestCircle(x, y, DegToDist(90));
TestCircle(x, y, ctx.GetUnits().EarthRadius() * 6);
}
}
TestCircleIntersect();
}
示例8: TestGeoRectangle
public void TestGeoRectangle(SpatialContext ctx)
{
base.ctx = ctx;
//First test some relateXRange
// opposite +/- 180
Assert.Equal(SpatialRelation.INTERSECTS, ctx.MakeRect(170, 180, 0, 0).RelateXRange(-180, -170, ctx));
Assert.Equal(SpatialRelation.INTERSECTS, ctx.MakeRect(-90, -45, 0, 0).RelateXRange(-45, -135, ctx));
Assert.Equal(SpatialRelation.CONTAINS, ctx.GetWorldBounds().RelateXRange(-90, -135, ctx));
//point on edge at dateline using opposite +/- 180
Assert.Equal(SpatialRelation.CONTAINS, ctx.MakeRect(170, 180, 0, 0).Relate(ctx.MakePoint(-180, 0), ctx));
//test 180 becomes -180 for non-zero width rectangle
Assert.Equal(ctx.MakeRect(-180, -170, 0, 0), ctx.MakeRect(180, -170, 0, 0));
Assert.Equal(ctx.MakeRect(170, 180, 0, 0), ctx.MakeRect(170, -180, 0, 0));
double[] lons = new double[] { 0, 45, 160, 180, -45, -175, -180 }; //minX
foreach (double lon in lons)
{
double[] lonWs = new double[] { 0, 20, 180, 200, 355, 360 }; //width
foreach (double lonW in lonWs)
{
TestRectangle(lon, lonW, 0, 0);
TestRectangle(lon, lonW, -10, 10);
TestRectangle(lon, lonW, 80, 10); //polar cap
TestRectangle(lon, lonW, -90, 180); //full lat range
}
}
//Test geo rectangle intersections
TestRectIntersect();
}