Как реализовать для географических систем пространственной привязки в MySQL - PullRequest
0 голосов
/ 17 октября 2019

Я хочу создать буфер с 10 м в точке с широтой и долготой. Поэтому я попытался

SET @json = ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [139.445699080589, 35.507941895691]}');
SELECT ST_AsText(ST_Buffer(@json,10));

Но я получил ошибку:

[22001][3618] Data truncation: st_buffer(POINT, ...) has not been implemented for geographic spatial reference systems.

Как реализовать географическое пространственное в этой ситуации ??

1 Ответ

0 голосов
/ 17 октября 2019

Это не то, что вы, как пользователь, можете реализовать. Эта ошибка говорит о том, что MySQL сам не реализовал функцию ST_Buffer для случая географической SRS.

Проблема в том, что существует два типа SRS - проекционная (планарная карта, также называемая декартовой) и географическая (на эллипсоиде),В других системах они обычно представлены отдельными типами: геометрия (плоская) и география (эллипсоид). В MySQL это один тип с проекционным или эллипсоидным SRS.

Некоторые алгоритмы на эллипсоиде являются более сложными, поэтому некоторые функциональные возможности в MySQL пространственные еще не реализованы для этого случая.

Возможны следующие варианты:

1) переключиться на соответствующую проецируемую SRS, если это возможно,

2) переключиться на другую платформу, например PostgreSQL + PostGIS, которая поддерживает ST_Buffer для типа Geography,

3) избегать ST_Buffer (часто используется для проверки буферизованного пересечения, когда нужно использовать ST_DWithin, хотя я не знаю ваш конкретный вариант использования)

...