Упрощенный GeoJSON сообщает о фэнтомных маркерах на картах Google - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть столбец географии в базе данных. Этот столбец содержит исходный многоугольник. Рядом с ним у меня есть еще один столбец, который содержит упрощенную версию этого многоугольника. Упрощение было сделано с помощью функции geography.Reduce () ( Я использую допуск 100 ), которая работает с алгоритмом Дугласа-Пекера. Когда клиент запрашивает эту область, я извлекаю ее из базы данных, быстро конвертирую в GeoJSON и передаю ее моему клиенту.

Если я запрашиваю исходный многоугольник, пройдет 20 секунд, прежде чем он будет успешно получен, но он работает. В конце концов, единственной проблемой является скорость, и именно поэтому я представил второй столбец, содержащий упрощенный многоугольник. Извлечение этого многоугольника из базы данных происходит мгновенно, но на стороне клиента происходит любопытная вещь.

enter image description here

Как видите, на моей карте показано несколько маркеров. Никто из них не кликабелен, кроме самой верхней (немного юго-западнее Мельбурна), но на самом деле это маркер, который я добавил. Откуда другие?

Еще одна вещь, которую я заметил, это , чем больше я уменьшаю простоту, тем меньше этих фантомных маркеров показывает . Так что, если я буду использовать оригинальный полигон как GeoJSON, все будет хорошо. Как только я начинаю упрощаться, я получаю эти фэнтомные маркеры.

Когда я запрашиваю этот упрощенный многоугольник, я использую функцию geography::STAsText(). После этого я использую NetTopologySuite, чтобы прочитать это как WKT и создать объект геометрии NetSuiteTopology. С помощью этого объекта я создаю объект и использую GeoJsonWriter для создания фактического GeoJSON.

var query = new SqlQuery("Location")
                .Select("LocationServicingAreaSimplified.STAsText()")
                .Where("LocationID", SqlOp.Equals, "@LocationID");
// This object query will be convertet to
// SELECT   LocationServicingAreaSimplified.STAsText() FROM Location WHERE LocationID = ?           

query.Parameters.Add("@LocationID", LocationID);
var simplifiedPolygon = await query.ExecuteScalarAsync<string>();

var wktReader = new WKTReader() { DefaultSRID = 4326 };
var geoJsonWriter = new GeoJsonWriter();

var feature = new Feature
{
    Geometry = wktReader.Read(simplifiedPolygon)
};

return geoJsonWriter.Write(feature);

1 Ответ

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

После обширного исследования я пришел к выводу, что процесс упрощения даст точки, когда некоторые многоугольники упрощены.Карты Google будут представлять точки в виде маркеров, поэтому, чем больше упрощение, тем больше очков производится, тем больше маркеров присутствует.

Я нашел статью , где описано, как избавиться от нее.из этих точек, но еще не проверил это.

Надеюсь, что это помогает некоторому пространственному новичку (как я).

...