Более

Что такое OGRGeometryShadow и почему я не могу использовать его в методе Intersects ()?


Я пытаюсь написать что-то на Python, GDAL / OGR и Shapely.

Что у меня есть:

  • две геометрии LineString: "geom1" и "geom2"
  • Я сделал перекресток: "Intersection = geom1.Intersection (geom2)"

Теперь я хотел проверить, является ли точка пересечения начальной или конечной точкой (или ни одной из них) одной из входных геометрий.

Что я сделал:

from shapely.geometry import Point point_start_1 = Point (geom1.GetPoint_2D (0)) point_end_1 = Point (geom1.GetPoint_2D (geom1.GetPointCount () - 1)) point_start_2 = Point (geom2.GetPoint_2D (0)) point_end_2 = Point (geom2 .GetPoint_2D (geom2.GetPointCount () - 1))

Следующий код работать не будет:

если crossction.Intersects (point_start_1): выведите «пересечение и начальная точка geom1 - это одна и та же точка»

Сообщение об ошибке:

"TypeError: в методе 'Geometry_Intersects' аргумент 2 типа 'OGRGeometryShadow *'"

Мой вопрос:

Что такое OGRGeometryShadow и почему я не могу пересечь его с другой геометрией? Когда я печатаю start_point_1, он говорит: «ТОЧКА (6.331836999999999 53.6154012)». Таким образом, это выглядит как обычная геометрия. Но, как я уже сказал, метод "пересечения" не работает.


В своем решении вы смешиваете геометрию и предикаты ogr и Shapely

Только с Shapely (пересечение (), пересекает ())

из shapely.geometry import Point, LineString, отображение geom1 = LineString ([(0, 0), (0, 1)]) geom2 = LineString ([(1, 1), (-1, -1)]) пересечение = geom1.intersection (geom2) # geo_interface -> Сопоставление GeoJSON (пересечение) {'type': 'Point', 'Coordinates': (0.0, 0.0)} # Shapely geometry pt1 = [Point (pt) for pt in list (geom1 .coords)] point_start_1 = pt1 [0]… # Фигурный предикат crossction.intersects (point_start_1) True

Только с ogr (Пересечение (), Пересекает ()):

from osgeo import ogr geom1 = ogr.CreateGeometryFromWkt ('LINESTRING (0 0, 0 1)') geom2 = ogr.CreateGeometryFromWkt ('LINESTRING (1 1, -1 -1)') # пересечение с ogr correction_ogr = geom1.Intersection ( geom2) # geo_interface -> GeoJSON correction_ogr.ExportToJson () '{"тип": "Точка", "координаты": [0.0, 0.0]}' # ogr geometry point_start_1 = ogr.Geometry (ogr.wkbPoint) point_start_1.AddPoint ( geom1.GetPoint_2D (0) [0], geom1.GetPoint_2D (0) [1])… # ogr predicate correction_ogr.Intersects (point_start_1) Истина

В своем решении вы используете геометрию Shapely:

point_start_1 = Точка (geom_ogr1.GetPoint_2D (0))…

с двоичным предикатом ogr -> error

Intersection_ogr.Intersects (point_start_1) TypeError: в методе 'Geometry_Equal' аргумент 2 типа 'OGRGeometryShadow *'