Функция для создания LineString из точек с использованием Shapely

У меня есть список пунктов:

points = [Point(2.2, 4.2), Point(7.2, -25.1), Point(9.26, -2.456)]

Я пытаюсь написать функцию, которая будет проверять, содержит ли этот список точечные объекты, и возвращать затем LineString:

def createLineGeom(giveLine):
if type(giveLine) is shapely.geometry.point.Point:
    return LineString(giveLine)
else:
    return 'pointList must contain shapely point object(s)'

Я могу вернуть сообщение else только из createLineGeom(points). Не уверен, связана ли моя проблема с функцией type() или моим первым оператором возврата, я очень новичок в написании функций.

Спасибо!

Обновление после ответа J_H

vertices = [Point(2.2, 4.2), Point(7.2, -25.1), Point(9.26, -2.456)]
# function
def createLineGeom(giveLine):
    if isinstance(giveLine, Point):
       return LineString(giveLine)

По-прежнему не возвращает значения из

pls_work = createLineGeom(vertices)

person bagration    schedule 05.04.2018    source источник
comment
Вы можете создать LineString из массива Point, см.: gis.stackexchange.com/questions/95670/   -  person sagarr    schedule 05.04.2018
comment
Да, но сначала я должен проверить, содержит ли список типы данных Point, где я терплю неудачу. Мои инструкции к упражнению: Создайте функцию с именем createLineGeom(), которая принимает список объектов Shapely Point в качестве параметра и возвращает объект LineString этих входных точек. Функция должна сначала проверить, что входной список действительно содержит Shapely Point(s). Продемонстрируйте использование функции, создав объекты LineString с функцией.   -  person bagration    schedule 05.04.2018


Ответы (2)


Используйте print(type(giveLine)), чтобы узнать тип объекта.

Вы, вероятно, захотите использовать isinstance(), когда решаете, является ли это точкой . А еще лучше, бросьтесь вперед и попытайтесь использовать аргумент. Если это не подходящий тип, вы получите полезную трассировку стека, объясняющую проблему.

person J_H    schedule 05.04.2018
comment
Оригинальные инструкции к этому упражнению сбивают меня с толку: создайте функцию с именем createLineGeom(), которая принимает список объектов Shapely Point в качестве параметра и возвращает объект LineString этих входных точек. Функция должна сначала проверить, что входной список действительно содержит Shapely Point(s). Продемонстрируйте использование функции, создав объекты LineString с функцией. Итак, как мне проверить, действительно ли список содержит стройные точечные объекты? Я добавил правку выше! - person bagration; 05.04.2018

Спасибо @J_H за то, что указал мне правильное направление с помощью isinstance(). Я не уверен, что мое решение является наиболее эффективным вариантом, но оно работает!

def createLineGeom(inList):
if all(isinstance(x, Point) for x in inList) is True:
   return LineString(inList)
else:
    return 'pointList must contain shapely point object(s)'
person bagration    schedule 05.04.2018
comment
Вместо inList типичным именем будет points. Если вы считаете необходимым документировать итерируемый список, добавьте аннотацию типа к подписи. Кроме того, вы сказали if expression is True:, что слишком многословно, чтобы быть питоническим. Пожалуйста, просто скажи if expression: - person J_H; 06.04.2018