Google Geometry Library в C # - PullRequest
       2

Google Geometry Library в C #

0 голосов
/ 24 апреля 2019

У меня есть точка (широта, долгота), например: 25, -80, и я ищу способ в c # проверить, находится ли эта точка в определенном многоугольнике.

Я провел некоторое исследование и обнаружил, что функция containsLocation, содержащаяся в Библиотеке геометрии Карт Google, делает именно то, что мне нужно, но она недоступна для c #. Вот примеры, в которых этот метод используется в JS:

// This example requires the Geometry library. Include the libraries=geometry
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry">

function initMap() {

        var triangleCoords = [
          {lat: 25.774, lng: -80.19},
          {lat: 18.466, lng: -66.118},
          {lat: 32.321, lng: -64.757}
        ];

        var coords = new google.maps.LatLng(25.774, -80.19);
        var bermudaTriangle = new google.maps.Polygon({paths: triangleCoords});

        var result = google.maps.geometry.poly.containsLocation(coords, bermudaTriangle);
        alert('The location exist in polygon: '+result);
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=geometry&callback=initMap"
         async defer></script>

Я нашел библиотеку c # для gmaps API Google Maps для C #, но она не поддерживает функцию содержит расположение Есть ли способ сделать необходимое выше в c #?

1 Ответ

0 голосов
/ 25 апреля 2019

Алгоритм наведения луча обычно используется для определения, находится ли данная точка в пределах многоугольника. Этот ответ содержит реализацию в C #.

Также NetTopologySuite библиотека может быть использована для этого вопроса, в частности NetTopologySuite.Algorithm.Locate.IndexedPointInAreaLocator class:

var triangleCoords = new[] {
      new Coordinate(25.774, -80.19),
      new Coordinate(18.466, -66.118),
      new Coordinate(32.321, -64.757),
      new Coordinate(25.774, -80.19)
};
IGeometryFactory geometryFactory = new GeometryFactory();
var poly = geometryFactory.CreatePolygon(triangleCoords);


var locator = new NetTopologySuite.Algorithm.Locate.IndexedPointInAreaLocator(poly);
var location = locator.Locate(new Coordinate(24.886, -70.269));
if (location == GeoAPI.Geometries.Location.Interior)
{
     Console.WriteLine("Polygon contains the location");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...