@@ -78,6 +78,7 @@ TRAMPOLINE(app_get_bbox, get_bbox)
7878TRAMPOLINE(app_as_point, as_point)
7979TRAMPOLINE(app_as_linestring, as_linestring)
8080TRAMPOLINE(app_as_polygon, as_polygon)
81+ TRAMPOLINE(app_as_multipoint, as_multipoint)
8182TRAMPOLINE(app_as_multilinestring, as_multilinestring)
8283TRAMPOLINE(app_as_multipolygon, as_multipolygon)
8384TRAMPOLINE(app_as_geometrycollection, as_geometrycollection)
@@ -920,6 +921,25 @@ int output_flex_t::app_as_polygon()
920921 return 1 ;
921922}
922923
924+ int output_flex_t::app_as_multipoint ()
925+ {
926+ check_context_and_state (
927+ " as_multipoint" , " process_node/relation() functions" ,
928+ m_calling_context != calling_context::process_node &&
929+ m_calling_context != calling_context::process_relation);
930+
931+ auto *geom = create_lua_geometry_object (lua_state ());
932+
933+ if (m_calling_context == calling_context::process_node) {
934+ geom::create_point (geom, *m_context_node);
935+ } else {
936+ m_relation_cache.add_members (middle ());
937+ geom::create_multipoint (geom, m_relation_cache.members_buffer ());
938+ }
939+
940+ return 1 ;
941+ }
942+
923943int output_flex_t::app_as_multilinestring ()
924944{
925945 check_context_and_state (
@@ -2099,6 +2119,8 @@ void output_flex_t::init_lua(std::string const &filename)
20992119 lua_trampoline_app_as_point);
21002120 luaX_add_table_func (lua_state (), " as_polygon" ,
21012121 lua_trampoline_app_as_polygon);
2122+ luaX_add_table_func (lua_state (), " as_multipoint" ,
2123+ lua_trampoline_app_as_multipoint);
21022124 luaX_add_table_func (lua_state (), " as_multilinestring" ,
21032125 lua_trampoline_app_as_multilinestring);
21042126 luaX_add_table_func (lua_state (), " as_multipolygon" ,
0 commit comments