After working through:
I started building up a list of gcp points for geo-refering historical maps
- classifying the points based on the 1st,2nd,2rd order
-- 0=tpc (Thin Plate Spline)
-- 1=1st order(affine) [precise];
-- 2=2nd order [less exact];
-- 3=3rd order [poor]
--
So assuming you have a 'raster_area' table with an entry for each area, classified as
1=1st order [precise]
2=2nd order [good, but could be better]
3=3rd order [poor]
You could then create a 'raster_area_reference' table
- ONLY done once
- OR UPDATED when the classification of an area has changed
INSERT INTO raster_area_reference
(id_order,area_count,area_geometry)
(
1,
(SELECT count(area_geometry) FROM raster_area WHERE id_order=1),
(SELECT CastToMultiPolygon(ST_UnaryUnion(area_geometry)) FROM raster_area WHERE id_order=1)
);
INSERT INTO raster_area_reference
(id_order,area_count,area_geometry)
(
2,
(SELECT count(area_geometry) FROM raster_area WHERE id_order=2),
(SELECT CastToMultiPolygon(ST_UnaryUnion(area_geometry)) FROM raster_area WHERE id_order=2)
);
INSERT INTO raster_area_reference
(id_order,area_count,area_geometry)
(
3,
(SELECT count(area_geometry) FROM raster_area WHERE id_order=3),
(SELECT CastToMultiPolygon(ST_UnaryUnion(area_geometry)) FROM raster_area WHERE id_order=3)
);
Adding a record with:
0=outside of range
A query could then be developed (pseudo code)
SELECT id_order FROM raster_area_reference
WHERE
(
ROWID IN
(
SELECT ROWID FROM SpatialIndex
WHERE
(
(f_table_name = 'raster_area_reference') AND
(f_geometry_column = 'area_geometry') AND
(search_frame = MakePoint(ST_X(NEW.gps_point), ST_Y(NEW.gps_point)))
)
)
);
for a 'BEFORE INSERT' trigger (again pseudo code)
CREATE TRIGGER
"ggi_gps_points" BEFORE INSERT ON "gps_points"
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK, 'gps_points: [out of range OR inside a 1st order Area]')
WHERE
(
-- above query
) IN (0,1);
END
which could prevent an INSERT, where not desired.
Mark
Colin B