2016-08-15 2 views
1
mysql> show create table places\G; 
*************************** 1. row *************************** 
     Table: places 
Create Table: CREATE TABLE `places` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `name_full` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
    `network_id` int(11) DEFAULT NULL, 
    `fence_ll` polygon NOT NULL, 
    `fence_utm` polygon NOT NULL, 
    `area` bigint(20) NOT NULL, 
    `created_at` bigint(20) DEFAULT NULL, 
    `updated_at` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `network_id` (`network_id`), 
    CONSTRAINT `places_ibfk_1` FOREIGN KEY (`network_id`) REFERENCES `networks` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 
1 row in set (0.01 sec) 

Dies ist meine Frage:Wurde mein Polygon korrekt in die Datenbank eingefügt?

INSERT IGNORE INTO places(name, fence_ll, fence_utm, area, created_at) 
VALUES('West Covina', 
    GeomFromText('POLYGON((34.08166844698419 -118.01307678222656,33.994611584814606 -118.01307678222656,33.994042291874415 -117.89566040039062,34.08280585343835 -117.89634704589844)) ', 0), 
    GeomFromText('POLYGON((406532.3562310586 3771674.3531455416,406436.8059323749 3762021.032807315,417280.6563504976 3761856.9033192885,417303.43441323494 3771699.900605784)) ', 0), 105355675, 1471220285) 

Der Befehl fügt den Datensatz korrekt, aber aus irgendeinem Grund fence_ll und fence_utm sind leer.

*************************** 5. row *************************** 
     id: 11 
     name: Los Angeles 
name_full: NULL 
network_id: NULL 
    fence_ll: 
fence_utm: 
     area: 6859688899 
created_at: 1471220285 
updated_at: NULL 

Meine Sorge ist, dass die polygon Punkte zu präzise sind. Wenn ja, auf welche Dezimalstellen sollte ich die Punkte abschneiden?

Antwort

1

Es sieht so aus, als ob die ersten und letzten Punkte Ihrer Polygone nicht gleich sind, und dies scheint eine Voraussetzung zu sein. Versuchen Sie stattdessen:

INSERT IGNORE INTO places(name, fence_ll, fence_utm, area, created_at) 
VALUES 
    ('West Covina', 
    GeomFromText('POLYGON((34.08166844698419 -118.01307678222656, 33.994611584814606 -118.01307678222656, 33.994042291874415 -117.89566040039062,34.08280585343835 -117.89634704589844, 34.08166844698419 -118.01307678222656)) ', 0), 
    GeomFromText('POLYGON((406532.3562310586 3771674.3531455416,406436.8059323749 3762021.032807315,417280.6563504976 3761856.9033192885,417303.43441323494 3771699.900605784, 406532.3562310586 3771674.3531455416)) ', 0), 105355675, 1471220285) 

Reference

+0

Dank Tim. Sind die Ziffern wichtig (sollte ich es abschneiden)? Wird es die Leistung beeinträchtigen? – TIMEX

+0

@TIMEX Ich weiß nicht über Präzision, aber mein _guess_ ist, dass das Schlimmste, was passieren wird, ist, dass Sie Kürzung (oder vielleicht Rundung) bekommen werden. Sie sollten die Polygon-Genauigkeit überprüfen, statt anzunehmen, dass sie 14 Genauigkeitsziffern verarbeiten kann. –

Verwandte Themen