In MySQL gibt es Unterstützung für GIS (räumliche Ausdehnung) [1]. Im Internet finden Sie verschiedene Meinungen darüber, wie gut oder schlecht ist ein GIS Postgres im Vergleich zu anderen Datenbanken wie. Trotz all dem gibt es eine aktuelle Erweiterung.
Räumliche Ausdehnung ist ein Satz von Datentypen und Funktionen, die in einer bequemen Form sind (nicht mit Hilfe von geometrischen Funktionen), um mit Produkten auf der Karte, Polygone, Entfernungen und andere Anwendungen, die Kartographie verwendet werden, zu arbeiten.Basierend auf der Dokumentation sollte sein, dass diese Erweiterungen in beiden MyISAM-und InnoDB-, Single-Note können verwendet werden: MyISAM unterstützt räumliche Indizes und InnoDB - nein. Ich weiß nicht überprüfen, aber es gibt keinen Grund, nicht zu glauben:)
Lassen Sie die räumliche Ausdehnung ist für Roboter mit geometrischen Daten ausgelegt, kann es auch für Roboter mit zeitlichen Abständen und die Daten der anderen Art, die in der geometrischen Ebene projiziert können vorsehen, genutzt werden.
Zuordnung:
Angenommen, es gibt mehrere Prozesse Anfangs-und Endzeiten. Sucht nach dem Zeitintervall, in dem das angegebene Anfangs-und Endzeiten.
Geometrische Interpretation:
Da die Zeit als ganze Zahl (unix_timestamp) dargestellt werden kann, kann eine vorübergehende Stream als Werte auf der X-Achse dargestellt werden Auf der Y-Achse sind Prozesse entfernt. Problem reduziert sich auf der Suche nach den Prozessen, die unter den Bereich einer bestimmten Zeit fallen.
1. Table.
CREATE TABLE `events` ( `id` int(11) NOT NULL AUTO_INCREMENT, `startDate` date DEFAULT NULL, `endDate` date DEFAULT NULL, `line` linestring NOT NULL, PRIMARY KEY (`id`), SPATIAL KEY `line` (`line`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
StartDate EndDate sind bestimmt durch die Art -. Datum Beachten Sie die zwei neuen Designs - die Art LINESTRING, und der Index SPATIAL KEY.
2. Weiter erstellen die Intervalle.Die räumliche Auflösung kann mit Zahlen (Datum kann nicht verwendet werden) zu diesem Zeitpunkt sollte umgewandelt werden unix_timestamp Arbeit.
Syntax: GeomFromText ('POINT (58,0093006 25,1778021)')
UPDATE events SET line = GeomFromText( CONCAT('LineString(', unix_timestamp(startDate), ' 0, ', unix_timestamp(endDate), ' 0)') )
CONCAT ispolzuktsya zu "kleben" eine Zeichenkette, bestehend aus einem Text-Fragment und dem Wert Feld lesen aus dem StartDate EndDate. Ich mache Sie darauf aufmerksam, dass die Koordinate Y = 0 ist.
3. Request.
SELECT * FROM events WHERE MBRIntersects(line, GeomFromText('LineString(1272661200 0, 1273438800 0)'))
Werte 1272661200 und 1273438800 Anfang und am Ende in das Format von Zeitstempel.
Abfrage gibt die folgenden Einträge: Verfahren A, B Process UN-Prozess C.
[1] http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html
[2] http://laacz.lv/2009/11/11/ipiki-un-citi/