Приведенные выше SELECT FROM `highway` и INSERT INTO `highway` я получил из лога Mysql,
при добавлении точки к линии в QGIS. С помощью ogr2ogr
Код: Выделить всё
ogr2ogr -f "MySQL" MySQL:"geo,user=root,host=localhost,password=******" -nln highway -lco engine=MYISAM highway.shp
я загружаю шейпы из
OSM в Mysql. Открываю векторный слой (базы данных) и подключаю данные Mysql в QGIS. Затем выполняю редактирование слоя highway, добавляя точки к линии. Анализируем лог. Какие команды Вы хотели увидеть из лога Mysql ?
SELECT, INSERT, UPDATE, DELETE …
Единственно, что меня самого удивило то, что при добавлении точки к линии в QGIS выполняются команды:
DELETE FROM `highway` WHERE `OGR_FID` = 47
INSERT INTO `highway` …
Представьте полигон в несколько тысяч точек, в который необходимо добавить еще одну точку.
Более корректно написана работа с Mysql в uDig через UPDATE
Лог из uDig при добавлении точки к линии:
SELECT OGR_FID,asWKB(SHAPE) as SHAPE FROM highway WHERE (((OGR_FID = '310') AND NOT ((OGR_FID = '310'))) AND MbrIntersects(SHAPE,GeomFromText('POLYGON ((31.404378958637622 55.51667837821648, 31.404378958637622 55.53105953474343, 31.440429764212208 55.53105953474343, 31.440429764212208 55.51667837821648, 31.404378958637622 55.51667837821648))', 1)))
SELECT asWKB(envelope(SHAPE)) FROM highway
SELECT OGR_FID,asWKB(SHAPE) as SHAPE,osm_id,name,ref,highway,oneway,bridge,tunnel,maxspeed,lanes FROM highway WHERE (OGR_FID = '310')
SELECT asWKB(envelope(SHAPE)) FROM highway
UPDATE highway SET SHAPE = GeomFromText('LINESTRING (31.4044049 55.516703, 31.4092618 55.5186671, 31.4170242 55.5230369, 31.4220112 55.5246325, 31.4265211 55.5275044, 31.4319852 55.5285353, 31.4348039 55.5296888, 31.43890355005453 55.530669351473335, 31.43944297208882 55.53079792008746, 31.4395959631157 55.53083463793391, 31.439828509476563 55.53089583434466)', 1) WHERE (OGR_FID = '310')
AsWKB () функция обеспечивает доступ к двоичным значения геометрии путем преобразования их в BLOB-значения, содержащие WKB представления, как я понимаю это временное хранилище, используемое для редактирования.
Да, я в принципе всё это читал, но там нет ответа на мой вопрос.
Как редактировать существующую геометрию - добавить точку к линии или полигону, добавить
элемент в коллекцию и т. п.
Понятно, что и этот мой ответ Вас не устроит, … хотя тема называется MySql Spatial - редактирование геометрии.
Способ редактировать геометрию в Mysql на уровне Mysql ссылки я указал (не все естественно).
Следующий уровень редактировать геометрию в Mysql – уровень GIS:
QGIS, uDig, gvSIG, Openjump,
Using MySQL with FDO in AutoCAD
Какие GIS поддерживают работу с Mysql можно посмотреть
здесь.
Под Web, например
SUAS MapServer.
Как реализована поддержка Mysql в QGIS смотрим в
API QGIS,
Loading Layers
http://www.qgis.org/api/qgsmaplayer_8cpp-source.html
http://www.qgis.org/api/qgscoordinatere ... ource.html
http://www.qgis.org/api/qgsprojectionse ... ource.html
API Udig: Package org.geotools.data.mysql
Приведенный Вами пример, это на мой взгляд, уровень ГИС разработки, а не уровень Mysql. Вы ГИС разрабатываете на Delphi?
Еще одна Нева?
Подсмотреть, как реализована на Delphi работа с PostgreSql можно в
DSpatial GIS
Если можно приведите пример других SQL (Oracle, MS Sql, PostgreSql, SQLite …), что в них есть для редактирования геометрии в Sql,
чего не хватает в Mysql?