3857
.3857
, how to download files from OpenStreetMap-derived data and how to import them to SAP HANA using this SRS. But today we will use land polygons
files (not coastlines
files), so that we can build ASCII map.select srs_id, srs_name, axis_order, min_x, max_x, min_y, max_y, linear_unit_of_measure, round_earth
from "PUBLIC"."ST_SPATIAL_REFERENCE_SYSTEMS"
where srs_id in (3857, 1000004326);
CREATE TYPE "NATURAL_EARTH"."TT_SHAPES" AS TABLE ( "SHAPE" ST_GEOMETRY );
CREATE PROCEDURE "NATURAL_EARTH"."ASCII_MAP_PLANAR_FLEX"
(IN input_shape "NATURAL_EARTH"."TT_SHAPES", IN resolution INT,
IN srs INT DEFAULT 1000004326, IN primeMeridian FLOAT DEFAULT 0.0, IN northUp INT DEFAULT 1)
LANGUAGE SQLSCRIPT AS
loopLon, loopLat, calcLon, calcLat FLOAT;
minX, maxX, minY, maxY, totalX FLOAT;
meridianShift INTEGER;
stringSurface, pointSurface STRING;
BEGIN
select "MIN_X" into minX from "PUBLIC"."ST_SPATIAL_REFERENCE_SYSTEMS" where srs_id = :srs;
select "MAX_X" into maxX from "PUBLIC"."ST_SPATIAL_REFERENCE_SYSTEMS" where srs_id = :srs;
select "MIN_Y" into minY from "PUBLIC"."ST_SPATIAL_REFERENCE_SYSTEMS" where srs_id = :srs;
select "MAX_Y" into maxY from "PUBLIC"."ST_SPATIAL_REFERENCE_SYSTEMS" where srs_id = :srs;
totalX = :maxX - :minX;
IF northUp <> 1 THEN northUp := -1; END IF;
IF resolution > 1000 THEN resolution := 1000; END IF;
IF resolution < 20 THEN resolution := 20; END IF;
IF primeMeridian < minX OR primeMeridian > maxX THEN primeMeridian := 0.0; END IF;
loopLat := :maxY;
WHILE loopLat>= :minY DO
loopLon := :minX;
calcLat := loopLat * northUp;
stringSurface := '';
WHILE loopLon<= :maxX DO
calcLon := loopLon * northUp;
select new st_point('POINT ('||:calcLon||' '||:calcLat||')', :srs).ST_CoveredBy("SHAPE") into pointSurface
FROM :input_shape where "SHAPE".ST_SRID() = :srs;
stringSurface := concat (stringSurface, pointSurface);
loopLon := loopLon+totalX/resolution;
END WHILE;
meridianShift := mod(primeMeridian*northUp +totalX, totalX) * resolution/totalX;
stringSurface := concat (right(stringSurface, resolution-meridianShift), left(stringSurface, meridianShift+1));
INSERT INTO "NATURAL_EARTH"."DRAW_EARTH" VALUES (:calcLat, :stringSurface);
loopLat := loopLat-totalX/resolution;
END WHILE;
END;
CREATE COLUMN TABLE "TESTSGEO"."EARTH3857" ("SHAPE" ST_GEOMETRY(3857) ) ;
INSERT INTO "TESTSGEO"."EARTH3857" SELECT ST_UnionAggr("SHAPE") FROM "TESTSGEO"."land_polygons_z1";
SELECT "SHAPE".st_asSVG() FROM "TESTSGEO"."EARTH3857";
truncate table "NATURAL_EARTH"."DRAW_EARTH";
CALL "NATURAL_EARTH"."ASCII_MAP_PLANAR_FLEX"(
INPUT_SHAPE => "TESTSGEO"."EARTH3857",
RESOLUTION => 120,
SRS => 3857
);
SELECT replace(replace("SSTRING", '0', ' '), '1', '*') as "ASCIIMAP" FROM "NATURAL_EARTH"."DRAW_EARTH";
TRUNCATE TABLE "NATURAL_EARTH"."DRAW_EARTH";
CALL "NATURAL_EARTH"."ASCII_MAP_PLANAR_FLEX"(
INPUT_SHAPE => "NATURAL_EARTH"."NE_EARTH",
RESOLUTION => 180,
SRS => 1000004326,
primeMeridian => 158,
northUp => 0
);
SELECT replace(replace("SSTRING", '0', ' '), '1', '*') as "ASCIIMAP" FROM "NATURAL_EARTH"."DRAW_EARTH";
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
34 | |
17 | |
16 | |
15 | |
11 | |
9 | |
8 | |
8 | |
8 | |
7 |