Exemple #1
0
        private void Create(Node node)
        {
            OracleCommand command;

            command = this.CreateCommand("insert into node (id,latitude,longitude,changeset_id,visible,timestamp,tile,version,usr,usr_id) values (:id,:latitude,:longitude,:changeset_id,:visible,:timestamp,:tile,:version,:usr,:usr_id)");

            // format data and create parameters.
            long?id = node.Id;

            command.Parameters.Add(new OracleParameter("id", id.ConvertToDBValue <long>()));

            int?latitude = (int)(node.Latitude * 10000000);  // latitude should always contain a value.

            command.Parameters.Add(new OracleParameter("latitude", latitude.ConvertToDBValue <int>()));

            int?longitude = (int)(node.Longitude * 10000000);  // longitude should always containt a value.

            command.Parameters.Add(new OracleParameter("longitude", longitude.ConvertToDBValue <int>()));

            long?changeset_id = node.ChangeSetId;

            command.Parameters.Add(new OracleParameter("changeset_id", changeset_id.ConvertToDBValue <long>()));

            bool?visible     = node.Visible;
            int  visible_int = 1;

            if (!visible.HasValue)
            {
                visible_int = 1;
            }
            command.Parameters.Add(new OracleParameter("visible", visible_int));

            DateTime?timestamp = node.TimeStamp;

            command.Parameters.Add(new OracleParameter("ts", timestamp.ConvertToDBValue <DateTime>()));

            // calculate the tile the node belongs to.
            long tile = TileCalculations.xy2tile(TileCalculations.lon2x(node.Longitude.Value), TileCalculations.lat2y(node.Latitude.Value));

            command.Parameters.Add(new OracleParameter("tile", tile));

            long?version = (long)node.Version;

            command.Parameters.Add(new OracleParameter("version", version.ConvertToDBValue <long>()));


            command.Parameters.Add("usr", node.UserName);
            command.Parameters.Add("usr_id", node.UserId);

            command.ExecuteNonQuery();
            command.Dispose();

            // insert tags.
            this.CreateTags(node.Id.Value, node.Tags, "node_tags", "node_id");
        }
Exemple #2
0
        /// <summary>
        /// Adds a node to this target.
        /// </summary>
        /// <param name="node"></param>
        public override void AddNode(Node node)
        {
            if (!node.Latitude.HasValue || !node.Longitude.HasValue)
            {
                // cannot insert nodes without lat/lon.
                throw new ArgumentOutOfRangeException("node", "Cannot insert nodes without lat/lon.");
            }

            // insert the node.
            _insertNodeCmd.Parameters[0].Value = node.Id;
            _insertNodeCmd.Parameters[1].Value =
                (node.Latitude.HasValue ? (int)(node.Latitude.GetValueOrDefault() * 10000000.0) : (int?)null)
                .ConvertToDBValue();
            _insertNodeCmd.Parameters[2].Value =
                (node.Longitude.HasValue ? (int)(node.Longitude.GetValueOrDefault() * 10000000.0) : (int?)null)
                .ConvertToDBValue();
            _insertNodeCmd.Parameters[3].Value = node.ChangeSetId.ConvertToDBValue();
            _insertNodeCmd.Parameters[4].Value = node.Visible.ConvertToDBValue();
            _insertNodeCmd.Parameters[5].Value = this.ConvertDateTime(node.TimeStamp);
            _insertNodeCmd.Parameters[6].Value = TileCalculations.xy2tile((uint)TileCalculations.lon2x(node.Longitude.Value),
                                                                          (uint)TileCalculations.lat2y(node.Latitude.Value));
            _insertNodeCmd.Parameters[7].Value = node.Version.ConvertToDBValue();
            _insertNodeCmd.Parameters[8].Value = node.UserName;
            _insertNodeCmd.Parameters[9].Value = node.UserId.ConvertToDBValue();
            _insertNodeCmd.ExecuteNonQuery();

            // insert the tags.
            if (node.Tags != null)
            {
                foreach (Tag keyValuePair in node.Tags)
                {
                    _insertNodeTagsCmd.Parameters[0].Value = node.Id;
                    _insertNodeTagsCmd.Parameters[1].Value = keyValuePair.Key;
                    _insertNodeTagsCmd.Parameters[2].Value = keyValuePair.Value;
                    _insertNodeTagsCmd.ExecuteNonQuery();
                }
            }

            //// commit nodes in batch.
            //_nodecount++;
            //if (_nodecount < BatchNodes)
            //    return;

            //_insertNodeCmd.Transaction.Commit();
            //_insertNodeTagsCmd.Transaction =
            //    _insertNodeCmd.Transaction = _connection.BeginTransaction();
        }
Exemple #3
0
        /// <summary>
        /// Modifies the given node.
        /// </summary>
        /// <param name="node"></param>
        private void Modify(Node node)
        {
            OracleCommand command;

            string sql = string.Empty;

            DateTime?timestamp = node.TimeStamp;

            if (timestamp.HasValue)
            {
                sql = "update node set latitude = :latitude, longitude = :longitude, changeset_id = :changeset_id, visible=:visible, timestamp=to_date('{0}','YYYY/MM/DD HH24:MI'), tile=:tile, version=:version, usr=:usr, usr_id=:usr_id where id=:id";
                sql = string.Format(sql, timestamp.Value.ToString("yyyy/MM/dd HH:mm"));
            }
            else
            {
                sql = "update node set latitude = :latitude, longitude = :longitude, changeset_id = :changeset_id, visible=:visible, timestamp=null, tile=:tile, version=:version where id=:id";
            }
            command = this.CreateCommand(sql);

            // format data and create parameters.
            int?latitude = (int)(node.Latitude * 10000000);  // latitude should always contain a value.

            command.Parameters.Add("latitude", latitude.ConvertToDBValue <int>());

            int?longitude = (int)(node.Longitude * 10000000);  // longitude should always containt a value.

            command.Parameters.Add("longitude", longitude.ConvertToDBValue <int>());

            long?changeset_id = node.ChangeSetId;

            command.Parameters.Add("changeset_id", changeset_id.ConvertToDBValue <long>());

            bool?visible     = node.Visible;
            int  visible_int = 1;

            if (!visible.HasValue || !visible.Value)
            {
                visible_int = 0;
            }
            command.Parameters.Add("visible", visible_int);

            // calculate the tile the node belongs to.
            long tile = TileCalculations.xy2tile(TileCalculations.lon2x(node.Longitude.Value), TileCalculations.lat2y(node.Latitude.Value));

            command.Parameters.Add("tile", tile);

            long?version = (long)node.Version;

            command.Parameters.Add("version", version.ConvertToDBValue <long>());

            command.Parameters.Add("usr", node.UserName);
            command.Parameters.Add("usr_id", node.UserId);

            long?id = node.Id;

            command.Parameters.Add("id", id.ConvertToDBValue <long>());


            // execute the update command.
            command.ExecuteNonQuery();
            command.Dispose();

            if (this.Exists("node", id.Value))
            {
                // modify the node tags.
                this.ModifyTags(node.Id.Value, node.Tags, "node_tags", "node_id");
            }

            // raise the modified event.
            this.RaiseChange(ChangeType.Modify, OsmGeoType.Node, node.Id.Value);
        }