numpy mgrid shapely для линейных координат

Я делал небольшие карты, чтобы ориентироваться в использовании shapely.

Например:

from shapely.geometry import MultiLineString 
from pprint import pprint
import pylab

coords = [((1,1),(1,13)),((3,1),(3,13)),((5,1),(5,13)),((7,1),(7,13)),((9,1),(9,13)), ((11,1),(11,13)),((13,1),(13,13)),((1,1),(13,1)),((1,3),(13,3)), ((1,5),(13,5)),((1,7),(13,7)),((1,9),(13,9)),((1,11),(13,11)),((1,13),(13,13)),((1,1),(13,13)),((3.5,1),(13,10.5)),((6.5,1),(13,7.5)),((9.5,1),(13,4.5)),((1,3.5),(10.5,13)),((1,6.5),(7.5,13)),((1,9.5),(4.5,13))]
lines_1 = MultiLineString(coords)
mow = lines_1.buffer(0.25)}

Я обнаружил, что плохо печатаю, и мне трудно писать длинные списки координат.

Я заметил numpy mgrid и задался вопросом, есть ли способ использовать его для создания произвольных прямоугольных сеток xy, а затем преобразовать mgrid в список для стройной LineString.

Сетка, как правило, представляет собой что-то вроде шахматной доски. Затем некоторые горизонтальные линии в сетке буферизируются, чтобы стать полигонами, затем буферизуются вертикальные линии, затем объединяются два каскада, и у меня есть шахматная доска. Затем я беру разные диагонали, объединяю их с шахматной доской и извлекаю получившиеся многоугольники из линейных колец.

Поскольку размеры карты увеличиваются, и, будучи не лучшим наборщиком, я надеялся, что может быть способ использовать mgrid, чтобы сделать некоторые из моих наборов текста намного лучше.

т.е. x, y = np.mgrid[:55, :35] # прямоугольный

Это дает ожидаемые значения x и y. Я смущен тем, как я могу вернуть эти результаты в массив Nx2 для Linestring (s) в виде списка для shapely.

Заранее благодарим вас за любое руководство. Крис


person Chris    schedule 01.09.2013    source источник


Ответы (1)


Вы можете vstack в сочетании с транспонировать:

>>> x, y = np.mgrid[:2, :3]
>>> np.vstack((x.ravel(),y.ravel())).T
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2]])

Если вам нужен список кортежей:

>>> [(x,y) for x,y in zip(x.ravel(),y.ravel())]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
person Daniel    schedule 01.09.2013
comment
это отлично подходит для MultiPoint, и, честно говоря, я бы никогда этого не сделал. - person Chris; 01.09.2013
comment
Я считаю, что вы решили мою проблему с плохой печатью, и я поиграю с этими MultiPoints в строки и отчитаюсь. Спасибо, Крис - person Chris; 01.09.2013
comment
Он делает именно то, что я просил. А теперь, размышляя, думаю, я на самом деле хотел, по сути, элементы ограничивающей рамки. Еще раз спасибо за ваше решение, и я также позабочусь о ограничивающей рамке. - person Chris; 01.09.2013