Страница 1 из 2
Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 13:15
Анастасия19
Здравствуйте, подскажите пожалуйста как можно построить идеальные квадраты (с заданной стороной) вокруг точки или последовательности точек. Пробовала через буферные зоны, но получается четырехугольники кривоватые (стороны не равны). И если можно ориентировать их вдоль линии...
То есть, есть съемка ЛЭП, линия с точками (опорами) нужно вокруг каждой точечки построить квадратик, ищу варианты как упростить все это...Спасибо!
Re: Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 13:17
trir
обычно для этого делают стиль точек
Re: Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 13:24
Анастасия19
trir писал(а):обычно для этого делают стиль точек
Не поняла вас, меня интересуют именно площадные объекты...
Re: Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 13:39
trir
но получается четырехугольники кривоватые (стороны не равны)
интересно почему, какая СК слоя?
Re: Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 13:41
Анастасия19
trir писал(а):но получается четырехугольники кривоватые (стороны не равны)
интересно почему, какая СК слоя?
МСК 66
Re: Построение квадратных полигонов вокруг точки
Добавлено: 20 апр 2017, 18:25
gamm
проще всего затащить вектор в R/Python, и там спокойно все руками нарисовать, и записать в текстовый MIF/MID.
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 07:11
Анастасия19
gamm писал(а):проще всего затащить вектор в R/Python, и там спокойно все руками нарисовать, и записать в текстовый MIF/MID.
А что такое R/Python
?
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 07:18
trir
R/
Python, а есть ещё
SQL и даже страшно сказать -
MapBasic
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 09:44
Александр Мурый
После таких сенсационных заявлений нам всем ничего другого не остаётся, как ждать от вас готовых решений хотя бы на одном из означенных выше продуктов.
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 11:20
trir
означенных выше продуктов
это ЯП
Код: Выделить всё
CREATE FUNCTION [dbo].[Trans1]
(
@wpoint geometry,
@xy0point geometry,
@sina float,
@cosa float
)
RETURNS geometry
AS
BEGIN
declare @nx float;
declare @ny float;
set @nx = (@wpoint.STX - @xy0point.STX)*@cosa + (@wpoint.STY - @xy0point.STY)* @sina;
set @ny = -(@wpoint.STX - @xy0point.STX)*@sina + (@wpoint.STY - @xy0point.STY)* @cosa;
RETURN geometry::STGeomFromText('POINT(' + Str(@nx, 25, 5) + ' ' + Str(@ny, 25, 5) + ')', 0);
END
Код: Выделить всё
CREATE FUNCTION [dbo].[GetRect]
(
@p1 geometry,
@p2 geometry,
@size float
)
RETURNS geometry
AS
BEGIN
declare @r float;
set @r = @p1.STDistance(@p2);
declare @sina float;
declare @cosa float;
set @sina = (@p2.STY - @p1.STY)/@r;
set @cosa = (@p2.STX - @p1.STX)/@r;
DECLARE @pr1 geometry;
DECLARE @pr2 geometry;
DECLARE @pr3 geometry;
DECLARE @pr4 geometry;
SET @pr1 = [dbo].[Trans1](geometry::Point(@size, @size, 0), @p1, @sina, @cosa);
SET @pr2 = [dbo].[Trans1](geometry::Point(@size, -1*@size, 0), @p1, @sina, @cosa);
SET @pr3 = [dbo].[Trans1](geometry::Point(-1*@size, -1*@size, 0), @p1, @sina, @cosa);
SET @pr4 = [dbo].[Trans1](geometry::Point(-1*@size, @size, 0), @p1, @sina, @cosa);
DECLARE @pstr nvarchar(MAX);
set @pstr = '0x01030000000100000005000000';
set @pstr = @pstr + REPLACE(CONVERT(varchar(max), @pr1.STAsBinary(), 2), '0101000000', '')
set @pstr = @pstr + REPLACE(CONVERT(varchar(max), @pr2.STAsBinary(), 2), '0101000000', '')
set @pstr = @pstr + REPLACE(CONVERT(varchar(max), @pr3.STAsBinary(), 2), '0101000000', '')
set @pstr = @pstr + REPLACE(CONVERT(varchar(max), @pr4.STAsBinary(), 2), '0101000000', '')
set @pstr = @pstr + REPLACE(CONVERT(varchar(max), @pr1.STAsBinary(), 2), '0101000000', '')
DECLARE @tb varbinary(MAX);
set @tb = CONVERT(varbinary(MAX), @pstr, 1)
RETURN geometry::STGeomFromWKB(@tb , 0);
END
Код: Выделить всё
DECLARE @p1 geometry;
DECLARE @p2 geometry;
declare @size float;
set @size =11.1;
SET @p1 = geometry::STGeomFromText('POINT(1 1)', 0);
SET @p2 = geometry::STGeomFromText('POINT(10 15)', 0);
DECLARE @g geometry;
SET @g = [dbo].[GetRect](@p1, @p2, @size);
SELECT @g.STAsText();
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 11:47
Александр Мурый
trir писал(а):означенных выше продуктов
это ЯП
Спасибо, а то мужики-то и не знали.
Следующий вопрос: как топикстартеру применить ваш код на практике? Как я понял, в наличии набор TAB-файлов с точками.
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 11:52
trir
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 12:40
Анастасия19
Благодарю всех кто откликнулся, посоветовали сделать в автокаде, буду разбираться....
П.С. в R/Python, SQL, MapBasic не сильна, намсте)
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 12:49
trir
посоветовали сделать в автокаде
на lisp'е?
Re: Построение квадратных полигонов вокруг точки
Добавлено: 21 апр 2017, 14:49
thegeo
Попробуйте. Хотя и написано достаточно давно, но кажется вполне работоспособно.
Направление задается движением мыши при нажатой ЛК.