Страница 1 из 2

Построение квадратных полигонов вокруг точки

Добавлено: 20 апр 2017, 13:15
Анастасия19
Здравствуйте, подскажите пожалуйста как можно построить идеальные квадраты (с заданной стороной) вокруг точки или последовательности точек. Пробовала через буферные зоны, но получается четырехугольники кривоватые (стороны не равны). И если можно ориентировать их вдоль линии... :D То есть, есть съемка ЛЭП, линия с точками (опорами) нужно вокруг каждой точечки построить квадратик, ищу варианты как упростить все это...Спасибо!

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
Александр Мурый
trir писал(а):R/Python, а есть ещё SQL и даже страшно сказать - MapBasic
После таких сенсационных заявлений нам всем ничего другого не остаётся, как ждать от вас готовых решений хотя бы на одном из означенных выше продуктов.

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
Попробуйте. Хотя и написано достаточно давно, но кажется вполне работоспособно.
Направление задается движением мыши при нажатой ЛК.