As customers expectations for location-based services grow, firms will need to add spatial information to the databases. For example, increasingly tourists will expect to be able to use their mobile phone to locate services near to their current locations (e.g., Where is the nearest Italian restaurant?).
INSERT INTO political_unit VALUES ('Spain', 'es', 4.9);
INSERT INTO political_unit VALUES ('Portugal','pt', 10);
INSERT INTO political_unit VALUES ('Andorra','ad', .067);
INSERT INTO political_unit VALUES ('United Kingdom','uk', 58.79);
INSERT INTO boundary VALUES (3,GeomFromText('POLYGON((12 12, 13 12, 13 11, 12 11, 12 12))'),'ad');
INSERT INTO boundary VALUES (4,GeomFromText('POLYGON((1 10, 4 10, 4 9, 3 3, 1 3, 1 5, 0 5, 0 6, 1 8, 1 10))'),'pt');
INSERT INTO boundary VALUES (5,GeomFromText('POLYGON((1 12, 3 13, 12 12, 12 11, 15 11, 15 11, 11 7, 11 5, 9 2, 5 1, 4 1, 3 3, 4 9, 4 10, 1 10, 1 12))'),'es');
INSERT INTO city VALUES ('Braga',GeomFromText('POINT(2 10)'),'pt');
INSERT INTO city VALUES ('Porto',GeomFromText('POINT(1 9)'),'pt');
INSERT INTO city VALUES ('Lisbon',GeomFromText('POINT(1 5)'),'pt');
INSERT INTO city VALUES ('Santiago de Compostela',GeomFromText('POINT(2 12)'),'es');
INSERT INTO city VALUES ('Oviedo',GeomFromText('POINT(5 12)'),'es');
INSERT INTO city VALUES ('Santander',GeomFromText('POINT(7 12)'),'es');
INSERT INTO city VALUES ('Vitori',GeomFromText('POINT(8 11)'),'es');
INSERT INTO city VALUES ('Pamplona',GeomFromText('POINT(9 11)'),'es');
INSERT INTO city VALUES ('Logrono',GeomFromText('POINT(8 11)'),'es');
INSERT INTO city VALUES ('Valiadoti',GeomFromText('POINT(6 10)'),'es');
INSERT INTO city VALUES ('Saragossa',GeomFromText('POINT(10 10)'),'es');
INSERT INTO city VALUES ('Barcelona',GeomFromText('POINT(13 10)'),'es');
INSERT INTO city VALUES ('Madrid',GeomFromText('POINT(7 8)'),'es');
INSERT INTO city VALUES ('Toledo',GeomFromText('POINT(7 7)'),'es');
INSERT INTO city VALUES ('Valencia',GeomFromText('POINT(11 6)'),'es');
INSERT INTO city VALUES ('Murcia',GeomFromText('POINT(10 4)'),'es');
INSERT INTO city VALUES ('Sevilla',GeomFromText('POINT(4 3)'),'es');
INSERT INTO city VALUES ('Gibralta',GeomFromText('POINT(5 1)'),'uk');
INSERT INTO city VALUES ('Andorra la Veila',GeomFromText('POINT(12 11)'),'ad');
Notes:
SELECT GLENGTH(LINESTRINGFROMWKB(LINESTRING(ASBINARY(orig.cityloc), ASBINARY(dest.cityloc))))*75 as "Distance (kms)" FROM city orig, city dest WHERE orig.cityname = 'Lisbon' AND dest.cityname = 'Madrid';
SELECT cityname FROM city WHERE GLENGTH(LINESTRINGFROMWKB(LINESTRING(ASBINARY(cityloc), ASBINARY(GeomFromText('POINT(3 9)')))))
= (SELECT MIN(GLENGTH(LINESTRINGFROMWKB(LINESTRING(ASBINARY(cityloc), ASBINARY(GeomFromText('POINT(3 9)')))))) FROM city)
SELECT AREA(boundpath)*5625 as "Area (km^2)" from political_unit, boundary WHERE unitname = 'Portugal' AND political_unit.unitcode = boundary.unitcode;
You could need to use the Euclidean distance if the area covered is not large.
Distance = sqrt((x2 - x1)2 * (y2-y1)2)
|
This page is part of the promotional and support material for Data Management (fifth edition) by Richard T. Watson |