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

MapInfo, MapBasic
Анастасия19
Новоприбывший
Сообщения: 7
Зарегистрирован: 20 апр 2017, 13:00
Репутация: 0

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

Сообщение Анастасия19 » 20 апр 2017, 13:15

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

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 20 апр 2017, 13:17

обычно для этого делают стиль точек

Анастасия19
Новоприбывший
Сообщения: 7
Зарегистрирован: 20 апр 2017, 13:00
Репутация: 0

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

Сообщение Анастасия19 » 20 апр 2017, 13:24

trir писал(а):обычно для этого делают стиль точек
Не поняла вас, меня интересуют именно площадные объекты...

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 20 апр 2017, 13:39

но получается четырехугольники кривоватые (стороны не равны)
интересно почему, какая СК слоя?

Анастасия19
Новоприбывший
Сообщения: 7
Зарегистрирован: 20 апр 2017, 13:00
Репутация: 0

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

Сообщение Анастасия19 » 20 апр 2017, 13:41

trir писал(а):
но получается четырехугольники кривоватые (стороны не равны)
интересно почему, какая СК слоя?
МСК 66

gamm
Гуру
Сообщения: 2525
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 515
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 20 апр 2017, 18:25

проще всего затащить вектор в R/Python, и там спокойно все руками нарисовать, и записать в текстовый MIF/MID.

Анастасия19
Новоприбывший
Сообщения: 7
Зарегистрирован: 20 апр 2017, 13:00
Репутация: 0

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

Сообщение Анастасия19 » 21 апр 2017, 07:11

gamm писал(а):проще всего затащить вектор в R/Python, и там спокойно все руками нарисовать, и записать в текстовый MIF/MID.
А что такое R/Python :| ?

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 21 апр 2017, 07:18

R/Python, а есть ещё SQL и даже страшно сказать - MapBasic

Александр Мурый
Гуру
Сообщения: 4961
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 691
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 21 апр 2017, 09:44

trir писал(а):R/Python, а есть ещё SQL и даже страшно сказать - MapBasic
После таких сенсационных заявлений нам всем ничего другого не остаётся, как ждать от вас готовых решений хотя бы на одном из означенных выше продуктов.
Редактор материалов, модератор форума

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 21 апр 2017, 11:20

означенных выше продуктов
это ЯП

Код: Выделить всё

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();  

Александр Мурый
Гуру
Сообщения: 4961
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 691
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 21 апр 2017, 11:47

trir писал(а):
означенных выше продуктов
это ЯП
Спасибо, а то мужики-то и не знали.

Следующий вопрос: как топикстартеру применить ваш код на практике? Как я понял, в наличии набор TAB-файлов с точками.
Редактор материалов, модератор форума

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 21 апр 2017, 11:52


Анастасия19
Новоприбывший
Сообщения: 7
Зарегистрирован: 20 апр 2017, 13:00
Репутация: 0

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

Сообщение Анастасия19 » 21 апр 2017, 12:40

Благодарю всех кто откликнулся, посоветовали сделать в автокаде, буду разбираться....
П.С. в R/Python, SQL, MapBasic не сильна, намсте)

trir
Гуру
Сообщения: 2883
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 447
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 21 апр 2017, 12:49

посоветовали сделать в автокаде
на lisp'е?

thegeo
Активный участник
Сообщения: 150
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 71

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

Сообщение thegeo » 21 апр 2017, 14:49

Попробуйте. Хотя и написано достаточно давно, но кажется вполне работоспособно.
Направление задается движением мыши при нажатой ЛК.
Вложения
SmallThings.rar
(5.15 КБ) 40 скачиваний

Ответить

Вернуться в «MapInfo»