전단 및 CartoDB를 사용하여 웹 응용 프로그램을 만들려고합니다. this tutorial을 사용하여 공용 CartoDB 테이블에 데이터를 읽고 쓰려고합니다.Leaflet.draw 및 CartoDB로 테이블을 업데이트/삽입하는 방법
자습서에서는 보안 정의자를 사용하여이를 수행하는 방법을 설명합니다. 어떤 이유로 든 응용 프로그램에서 leaflet.draw를 사용하여 만든 기능이 내 테이블에 삽입되지 않습니다. 나는 코딩에 익숙하지 않고 SQL 쿼리가 실제로 내 코드에서 호출되는 방법을 잘 모르고 있지만 예제 소스 코드를 복제하려고 시도했지만 실행과 관련한 행운을 얻지 못했습니다.
목표는 사용자가지도에서 포인트를 만들고 편집하고 CartoDB의 crowdsource 데이터베이스에 저장하도록 허용하는 것입니다.
내 프로젝트에 대한 코드는 여기에서 볼 수 있습니다 : https://github.com/zrobby/crowdsource-storymap
나는 다음과 같다 실행 어려움을 겪고 위 링크 된 튜토리얼 제공하고있어 특정 SQL 쿼리.
DROP FUNCTION IF EXISTS leaflet_upsert_usercomments(int[], text[]);
-- Returns a set of op,cartodb_id values where op means:
-- deleted: -1
-- updated: 0
-- inserted: 1
CREATE OR REPLACE FUNCTION leaflet_upsert_usercomments(
cartodb_ids integer[],
geojsons text[])
RETURNS TABLE(op int, cartodb_id int)
LANGUAGE plpgsql SECURITY DEFINER
RETURNS NULL ON NULL INPUT
AS $$
DECLARE
sql text;
BEGIN
sql := 'WITH n(cartodb_id,the_geom) AS (VALUES ';
-- Iterate over the values
FOR i in 1 .. array_upper(geojsons, 1)
LOOP
IF i > 1 THEN sql := sql || ','; END IF;
sql :=sql || '('||cartodb_ids[i]||','
|| 'ST_SetSRID(ST_GeomFromGeoJSON(NULLIF('''|| geojsons[i] ||''','''')),4326))';
END LOOP;
sql := sql || '), do_update AS ('
|| 'UPDATE leaflet_data p '
|| 'SET the_geom=n.the_geom FROM n WHERE p.cartodb_id = n.cartodb_id '
|| 'AND n.the_geom IS NOT NULL '
|| 'RETURNING p.cartodb_id), do_delete AS ('
|| 'DELETE FROM leaflet_data p WHERE p.cartodb_id IN ('
|| 'SELECT n.cartodb_id FROM n WHERE cartodb_id >= 0 AND '
|| ' n.the_geom IS NULL) RETURNING p.cartodb_id), do_insert AS ('
|| 'INSERT INTO leaflet_data (the_geom)'
|| 'SELECT n.the_geom FROM n WHERE n.cartodb_id < 0 AND '
|| ' n.the_geom IS NOT NULL RETURNING cartodb_id) '
|| 'SELECT 0,cartodb_id FROM do_update UNION ALL '
|| 'SELECT 1,cartodb_id FROM do_insert UNION ALL '
|| 'SELECT -1,cartodb_id FROM do_delete';
RAISE DEBUG '%', sql;
RETURN QUERY EXECUTE sql;
END;
$$;
-- Grant access to the public user
GRANT EXECUTE ON FUNCTION leaflet_upsert_usercomments(integer[],text[]) TO publicuser;
관련 질문 : http://gis.stackexchange.com/questions/134544/in-cartodb-best-way-to-have- 복수 참여자와 함께 테이블 – zrobby
관련 솔루션 : https://github.com/radumas/crowdmap-basic – zrobby