updatePost(title: string, url: string, id:number): void {
    const update: Picture[] = this.collection.map((p)=>{
        p.id  = id;
        p.title = title;
        p.url = url
    });
}
Если цель - обновление элементов массива, надо использовать forEach вместо map, и нет необходимости в получении результата. И зачем вы обновляете весь массив, если по вашим же словам обновить нужно всего один элемент? Или вы не понимаете, что происходит в этом коде?
Надо по id найти нужный элемент и обновить только его:
Object.assign(this.collection.find(n => n.id === id), { title, url });
UPD. Ещё странный момент. Если верить вашему коду, то свойство edData является массивом:
editPost(picId: Picture[]): void {
    this.edData = picId;
}
А если смотреть на шаблон - предполагается, что это объект:
<button (click)="updatePost(titleEd.value, urlEd.value, edData.id);
Откуда у edData возьмётся id, если это массив?