Beispiel #1
0
        public IEnumerable <Parking> GetParkingsByGeo(GeoPoint point, double radius, int parkingsToTake)
        {
            var parkings = new List <DistanceParking>();

            // Go over all the parkings and calculate the distance
            foreach (var parking in ParkingCache.Values)
            {
                var location = new GeoPoint(parking.Longtitude, parking.Latitude);
                var distance = location.Distance(point);
                if (distance <= radius)
                {
                    parkings.Add(new DistanceParking()
                    {
                        Distance = distance, Parking = parking
                    });
                }
            }

            if (parkingsToTake < 0)
            {
                return(parkings.Select(dist => dist.Parking));
            }
            else
            {
                parkings.Sort(new DistanceComparer());
                return(parkings.Take(parkingsToTake > parkings.Count ? parkings.Count : parkingsToTake).Select(dist => dist.Parking));
            }
        }
Beispiel #2
0
 public RoutePath(GeoPoint from, GeoPoint to, float speed)
 {
     mFrom     = from;
     mTo       = to;
     mDistance = GeoPoint.Distance(mFrom, mTo);
     mSpeed    = speed;
 }
 private bool OnSetLength(double length)
 {
     if (length > Precision.eps)
     {
         lineLength = length;
     }
     else
     {
         return(false);
     }
     if (curveInput.Fixed)
     {
         base.MultiSolutionCount = 2;
         objectPoint             = base.CurrentMousePosition;
         GeoVector v = line.EndPoint - line.StartPoint;
         if (!v.IsNullVector())
         {
             v.Norm();
         }
         else
         {
             v = new GeoVector(1.0, 0.0, 0.0);
         }
         GeoPoint endPoint    = line.StartPoint + length * v;
         GeoPoint endPointOpp = line.StartPoint - length * v;
         if (!nextSol)
         {
             if (objectPoint.Distance(endPoint) > objectPoint.Distance(endPointOpp))
             {
                 endPoint = endPointOpp;
             }
         }
         else
         {
             if (objectPoint.Distance(endPoint) < objectPoint.Distance(endPointOpp))
             {
                 endPoint = endPointOpp;
             }
         }
         line.EndPoint = endPoint;
         return(true);
     }
     base.MultiSolutionCount = 0;
     return(false);
 }
Beispiel #4
0
        public void Distance(GeoPoint a, GeoPoint b, double expectedDistance)
        {
            var actual        = GeoPoint.Distance(a, b);
            var actualInverse = GeoPoint.Distance(b, a);

            Assert.AreEqual(actual, actualInverse, "dist(b,a) should equal dist(a,b)");
            double faultTolerance = expectedDistance * 0.005;

            Assert.AreEqual(expectedDistance, actual.ToKilometers(), faultTolerance);
        }
    public virtual Task Distance_on_converted_geometry_type_lhs(bool async)
    {
        var point = new GeoPoint(1, 0);

        return(AssertQuery(
                   async,
                   ss => ss.Set <GeoPointEntity>().Select(
                       e => new { e.Id, Distance = point.Distance(e.Location) }),
                   elementSorter: e => e.Id,
                   elementAsserter: (e, a) => { Assert.Equal(e.Id, a.Id); }));
    }
Beispiel #6
0
    public static void BuildPath(GeoPoint from, GeoPoint to, int steps, ref List <Vector3> vertices, ref float distance)
    {
        distance = GeoPoint.Distance(from, to);

        Quaternion q0 = Quaternion.FromToRotation(from.ToSphericalCartesian(), from.ToSphericalCartesian());
        Quaternion q1 = Quaternion.FromToRotation(from.ToSphericalCartesian(), to.ToSphericalCartesian());

        float tStep = 1.0f / (float)steps;

        for (int i = 0; i <= steps; i++)
        {
            Quaternion q = Quaternion.Slerp(q0, q1, i * tStep);
            Vector3    v = q * from.ToSphericalCartesian();
            vertices.Add(v);
        }
    }
Beispiel #7
0
        protected void UpdateCurrentTownId(List <AreaTestInfo> results, int townId, GeoPoint point, int fileId,
                                           bool isCoverage)
        {
            var distance = 0.0;

            if (townId == _currentTownId)
            {
                if (_lastLon > 0 && _lastLat > 0)
                {
                    distance = point.Distance(new GeoPoint(_lastLon, _lastLat));
                }
                _lastLon = point.Longtitute;
                _lastLat = point.Lattitute;
            }
            else
            {
                _currentTownId = townId;
                _lastLon       = -1.0;
                _lastLat       = -1.0;
            }
            var item = results.FirstOrDefault(x => x.TownId == townId);

            if (item == null)
            {
                results.Add(new AreaTestInfo
                {
                    FileId        = fileId,
                    TownId        = townId,
                    Distance      = distance,
                    Count         = 1,
                    CoverageCount = isCoverage ? 1 : 0
                });
            }
            else
            {
                item.Distance += distance;
                item.Count++;
                if (isCoverage)
                {
                    item.CoverageCount++;
                }
            }
        }
Beispiel #8
0
        public void WithinRadiusTest(GeoLocation sample)
        {
            const double radius = 100;

            Console.WriteLine($"Searching for places within {radius} km of {sample.Name}");
            var within = _places.WithinRadius(sample.Point, radius).OrderBy(p => p.Value).ToArray();

            Console.WriteLine("Found " + within.Length);
            foreach (var keyValuePair in within)
            {
                var kms = keyValuePair.Value.ToKilometers();
                Console.WriteLine($"{keyValuePair.Key} at distance {kms} km");
                Assert.IsTrue(keyValuePair.Value.ToKilometers() <= radius);
            }

            //Double check and print any errors
            var withinNames = new HashSet <string>(within.Select(kvp => kvp.Key));
            int failures    = 0;

            foreach (var keyValuePair in _places)
            {
                var name     = keyValuePair.Key;
                var distance = GeoPoint.Distance(sample.Point, keyValuePair.Value);
                if (distance.ToKilometers() > radius && withinNames.Contains(name))
                {
                    failures++;
                    Console.WriteLine("false positive: " + name + ", d=" + distance);
                }
                if (distance.ToKilometers() <= radius && !withinNames.Contains(name))
                {
                    failures++;
                    Console.WriteLine("false negative: " + name + ", d=" + distance);
                }
            }
            Assert.IsTrue(failures == 0, "failures: " + failures);
        }
    private bool WithinRanage(GeoPoint searchElement, GeoPoint listElement, float range)
    {
        var d = searchElement.Distance(listElement.ToVector2());

        return(d <= range);
    }
Beispiel #10
0
            ////////////////////////////////////////////////////////////////////////
            //--------------------------------- REVISIONS --------------------------
            // Date       Name                 Tracking #         Description
            // ---------  -------------------  -------------      ------------------
            // 18JUN2009  James Shen                              Initial Creation
            ////////////////////////////////////////////////////////////////////////

            /**
             *
             * @param mapDirection
             * @param X
             * @param Y
             * @param Width
             * @param Height
             */
            private void DrawRouteImage(MapDirection mapDirection, int x, int y,
                                        int width, int height)
            {
                if (!_routeDrawWaypointOnly)
                {
                    _sutherlandHodgman = new SutherlandHodgman(_screenBounds);

                    ArrayList polyline = new ArrayList();
                    int       minLevel = NeedShowLevel(mapDirection.Polyline.NumLevels, GetZoom());
                    for (int i = 0; i < mapDirection.Polyline.GetVertexCount(); i++)
                    {
                        int level = mapDirection.Polyline.GetLevel(i);
                        if (level >= minLevel)
                        {
                            polyline.Add(mapDirection.Polyline.GetVertex(i));
                        }
                    }
                    ArrayList clippedPts = _sutherlandHodgman.ClipPline(polyline);

                    GeoPoint newPt1;
                    GeoPoint newPt2;

                    GeoPoint  drawPt1 = new GeoPoint(0, 0), drawPt2 = new GeoPoint(0, 0);
                    const int steps         = 1;
                    int       numOfTiles    = MAP_TILE_WIDTH / _mapDrawingTileWidth;
                    Rectangle drawArea      = new Rectangle();
                    Rectangle intersectRect = new Rectangle(0, 0, width, height);
                    int       xIndex;
                    for (xIndex = 0; xIndex < numOfTiles; xIndex++)
                    {
                        int yIndex;
                        for (yIndex = 0; yIndex < numOfTiles; yIndex++)
                        {
                            bool      hasPt1 = false;
                            GeoLatLng pt1    = null;
                            _routeGraphics2D.Clear(Color.White);
                            drawArea.X     = xIndex * _mapDrawingTileWidth;
                            drawArea.Y     = yIndex * _mapDrawingTileWidth;
                            drawArea.Width = drawArea.Height = _mapDrawingTileWidth;
                            drawArea       = intersectRect.Intersection(drawArea);
                            int totalPointSize = clippedPts.Count;
                            if (!drawArea.IsEmpty())
                            {
                                _routeGraphics2D.SetClip(0, 0,
                                                         drawArea.Width, drawArea.Height);
                                try
                                {
                                    for (int j = 0; j < totalPointSize; j += steps)
                                    {
                                        GeoLatLng pt    = (GeoLatLng)clippedPts[j];
                                        int       level = minLevel;
                                        if (hasPt1 == false)
                                        {
                                            if (level >= minLevel)
                                            {
                                                {
                                                    {
                                                        hasPt1 = true;
                                                        pt1    = pt;
                                                        continue;
                                                    }
                                                }
                                            }
                                        }
                                        if (hasPt1)
                                        {
                                            if (level >= minLevel)
                                            {
                                                GeoLatLng pt2 = pt;
                                                newPt1    = FromLatLngToMapPixel(pt1);
                                                newPt2    = FromLatLngToMapPixel(pt2);
                                                newPt1.X -= x + xIndex * _mapDrawingTileWidth;
                                                newPt1.Y -= y + yIndex * _mapDrawingTileWidth;
                                                newPt2.X -= x + xIndex * _mapDrawingTileWidth;
                                                newPt2.Y -= y + yIndex * _mapDrawingTileWidth;
                                                drawPt1.X = (int)newPt1.X;
                                                drawPt1.Y = (int)newPt1.Y;
                                                drawPt2.X = (int)newPt2.X;
                                                drawPt2.Y = (int)newPt2.Y;

                                                if ((drawPt1.Distance(drawPt2) > 0))
                                                {
                                                    _routeGraphics2D.DrawLine(RoutePen, (int)drawPt1.X,
                                                                              (int)drawPt1.Y,
                                                                              (int)drawPt2.X, (int)drawPt2.Y);
                                                    pt1 = pt2;
                                                    if (_readListener != null)
                                                    {
                                                        _readListener.readProgress(j,
                                                                                   totalPointSize);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception)
                                {
                                }
                            }

                            _routeGraphics.DrawRGB(_routeGraphics2D.GetRGB(), 0,
                                                   _mapDrawingTileWidth,
                                                   xIndex * _mapDrawingTileWidth,
                                                   yIndex * _mapDrawingTileWidth,
                                                   _mapDrawingTileWidth,
                                                   _mapDrawingTileWidth, true);
                        }
                    }
                }
                else
                {
                    _routeGraphics.SetColor(TRANSPARENCY);
                    _routeGraphics.FillRect(0, 0, MAP_TILE_WIDTH, MAP_TILE_WIDTH);
                }
            }
Beispiel #11
0
 public Airport GetRandomAirportCloseTo(Airport airport)
 {
     return(_airports.Values.Where(a => !a.IsUnlocked).OrderBy(a => GeoPoint.Distance(a.Location, airport.Location)).Take(5).OrderBy(qu => Guid.NewGuid()).First());
 }