Api геометрии Google на C #

У меня есть точка (широта, долгота), например: 33.959295,35.606100, и я ищу способ в С # проверить, находится ли эта точка на определенном маршруте (список точек или ломаная линия). Я провел небольшое исследование и обнаружил, что функция isLocationOnEdge, содержащаяся в Google Maps Geometry Library, делает именно то, что мне нужно, но она недоступна для C #. Вот несколько примеров на других языках:

Есть ли способ сделать то, что указано выше, на С #?


person User7291    schedule 22.06.2018    source источник
comment
На ум приходят два варианта: 1) вы можете запустить требуемый Javascript на C # с помощью движка JavaScript V8, например, в эту библиотеку 2) создать веб-сайт, который будет обращаться к вам и возвращать результаты.   -  person stuartd    schedule 22.06.2018


Ответы (1)


Вот реализация IsLocationOnEdge для C #.

using System;
using System.Collections.Generic;
using System.Device.Location;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

namespace TestConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = new List<Location>
            {
                new Location(1,1),
                new Location(2, 2),
                new Location(3, 3),
            };
            var point = new Location(1.9, 1.5);
            bool isOnEdge = isLocationOnEdge(path, point);
            Console.ReadKey();
        }
        static bool isLocationOnEdge(List<Location> path, Location point, int tolerance = 2)
        {
            var C = new GeoCoordinate(point.Lat, point.Lng);
            for (int i = 0; i < path.Count - 1; i++)
            {
                var A = new GeoCoordinate(path[i].Lat, path[i].Lng);
                var B = new GeoCoordinate(path[i + 1].Lat, path[i + 1].Lng);
                if (Math.Round(A.GetDistanceTo(C) + B.GetDistanceTo(C), tolerance) == Math.Round(A.GetDistanceTo(B), tolerance))
                {
                    return true;
                }
            }
            return false;
        }
    }
    class Location
    {
        public Location(double Lat, double Lng)
        {
            this.Lat = Lat;
            this.Lng = Lng;
        }
        public double Lat { get; set; }
        public double Lng { get; set; }
    }
}

Ссылки:

Проверка - это точка (x, y) находится между двумя точками, нарисованными на прямой линии Расчет расстояния между двумя географическими координатами широты и долготы

person Mihir Dave    schedule 28.06.2018