C# 中的谷歌几何 API

Posted

技术标签:

【中文标题】C# 中的谷歌几何 API【英文标题】:Google geometry Api in C# 【发布时间】:2018-12-01 23:20:36 【问题描述】:

我有一个点(纬度,经度),例如:33.959295,35.606100,我正在 C# 中寻找一种方法来检查该点是否在特定路线上(点列表或折线)。我做了一些研究,发现Google Maps Geometry Library 中包含的isLocationOnEdge 函数正是我需要的,但它不适用于c#。以下是其他语言的一些示例:

谷歌地图 javascript API https://developers.google.com/maps/documentation/javascript/geometry#isLocationOnEdge. 安卓示例https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/PolyUtil.java 我找到了gmaps的c#库google maps API for C#,但它不支持函数isLocationOnEdge

有没有办法在 c# 中完成上述要求?

【问题讨论】:

我想到了两个选项:1) 您可以使用 V8 JavaScript 引擎在 C# 中运行所需的 Javascript,就像在 this library 中一样 2) 建立一个为您拨打电话的网站并返回结果。 【参考方案1】:

这里是 IsLocationOnEdge For 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; 
    

参考资料:

Check is a point (x,y) is between two points drawn on a straight line Calculating Distance between two Latitude and Longitude GeoCoordinates

【讨论】:

以上是关于C# 中的谷歌几何 API的主要内容,如果未能解决你的问题,请参考以下文章

从 Java 中的谷歌地图 api 解析 Json 数组

谷歌地理编码 API 不如使用地址的谷歌地图准确

动态 Web 项目中的谷歌日历 api (java) 身份验证错误

iOS应用swift 3中的谷歌翻译rest api错误403

如何在同一张地图上使用带有多个标记的谷歌地图 API

wordpress 中的谷歌地图