Ошибка Shapely LineString SVG

Я пытаюсь изучить Shapely, и в конечном итоге я хотел бы взять ряд координат x, y и создать смещенную или параллельную линию. Ранее я задавал вопрос об этом процессе прошлой ночью и понял, что он может быть запутанным, поэтому позвольте мне переформулировать его и попытаться атаковать его более мелкими фрагментами. Я использую 64-разрядную версию Windows 7 с Anaconda. Я установил модули Shapely и Shapefile. Я пытаюсь создать LineString; однако всякий раз, когда я это делаю, я получаю сообщение об ошибке. Пожалуйста, найдите код:

from shapely.geometry import LineString

x1

Out[56]: 1633042.5200605541

y1

Out[57]: 700342.4999843091

x2

Out[58]: 1632943.7118592262

y2

Out[59]: 700441.360350892

LineString([(x1,y1),(x2,y2)])

Out[60]: 
Received invalid SVG data. 

Что это означает «неверные данные SVG»? Я делаю что-то неправильно. У меня, вероятно, будут другие вопросы после того, как это будет решено, но давайте пошагово. Я пытался преобразовать x1, y1, x2, y2 в числа с плавающей запятой, и это, похоже, не помогает.


person Trevor Grout    schedule 27.01.2015    source источник
comment
Что такое x и y? (Какие типы и какие данные?) Какую ошибку или неверный вывод вы получаете? Какой результат вы ожидаете? Shapely не является дуговым; не ожидайте, что это будет работать точно так же. Вам нужно понять, чем он отличается. (Я работал с ArcGIS; я считаю благословением, когда что-то работает не так, как раньше.)   -  person jpmc26    schedule 27.01.2015


Ответы (2)


Из вашего вопроса похоже, что вы запускаете свой код внутри консоли IPython (qt)? Проблема, по-видимому, не связана с Shapely, а связана с проблемой IPython, пытающейся отобразить/отрисовать ваш LineString в виде векторного изображения (в формате SVG).

Использование ipython qtconsole:

In [1]: from shapely.geometry import LineString

In [2]: x = LineString([(16.3,7.0),(16.2,7.1)])

In [3]: x
Out[3]: 
Received invalid SVG data.

Если бы вы запускали тот же код в «стандартной» консоли IPython или даже в стандартном интерпретаторе Python, ваш код должен работать нормально.

Используя только ipython:

In [1]: from shapely.geometry import LineString

In [2]: x = LineString([(16.3,7.0),(16.2,7.1)])

In [3]: x
Out[3]: <shapely.geometry.linestring.LineString at 0x113c30f60>

Короче говоря, все отлично работает с исходным кодом; ошибка заключается в том, что консоль IPython не может построить график LineString. Все остальные операции Shapely не должны быть затронуты. Например:

In [4]: list(x.coords)
Out[4]: [(16.3, 7.0), (16.2, 7.1)]

In [5]: x.length
Out[5]: 0.14142135623731025
person chdorr    schedule 28.01.2015
comment
Благодарю вас! Это имело большой смысл. Я использую Spyder, поставляемый с Anaconda. Но ваш ответ имел большой смысл. - person Trevor Grout; 30.01.2015

Это была ошибка, и она исправлена. Данные SVG действительно были недействительны. Обновите до Shapely>=1.5.6

person Mike T    schedule 12.02.2015